1.数据库约束
是关系型数据库的一个重要功能
主要作用是保证数据的完整性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正确)人工检查数据完整性的工作量非常大,在数据表中定义一些约束,在数据库写入数据的时候数据库会帮我们做校验工作约束一般是指定在列上的
1.1约束类型
1.2 NULL约束
创建表时,可以指定某列不为空:
NOT NULL - 指示某列不能存储 NULL 值。
没有指定非空约束时,当前的列是可以写入一个NULL值的
如果要把某一列定义为一个必填项,那么就可以使用not null(非空)约束
创建表时在相对的字段加入约束类型
当插入id字段为null时
提示不能写入NULL值数据库帮我们做了一次校验
非空列有值才能正常写入
1.3 UNIQUE:唯一约束
保证某列的每行必须有唯一的、不重复的值:
例如:身份证号 银行卡号 电话号........
可以发现不加唯一约束的时候,可能出现编号相同,但是人名不同的情况不符合逻辑
创建一个在ID字段加唯一约束的表
在表中插入相同的id
可以发现由于id设定了唯一约束 当出现相同的时候就会报错
NULL可以重复插入
1.4 DEFAULT:默认值约束
规定没有给列赋值时的默认值
插入时只指定了ld,这时name列使用默认值填充
当为某列设置了默认约束的时候,如果不给这个列指定值才会使用默认约束
虽然指定的默认约束,但是当我们手动指定这一列的值为NULL时插入的值依然是NULL,因为这个NULL 是我们自己手动指定的,也可以理解为我们想要的值用户指定的优先级要高于默认约束
1.5 PRIMARY KEY:主键约束
NOT NULL 和 UNIQUE 的结合(主键约束的列既是非空的又是唯一的)。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
把表中的某一列设置成非空且唯一 (强烈建议为每张表定义一个主键)
写入数据时两个约束同时生效
PRIMARY KEY:主键约束
在写入数据时,不具体指定主键列的值,而是用NULL代替
指定列插入
写入数据错误
再次写入新数据
当insert 操作时,都会先生成一个主键值不论记录写入成功与否,这个主键值都会视为已使用
重新定义新的主键可以吗?
只要主键值不重复就能写入
再次指定列新增数据就会在最大值的基本上加1,那么主键值在数据表有可能是不连续的
多主键?
一个主键同时可以包含多个列(复合主键)
主键包含的列值都相同
编号相同 姓名不同
1.6 FOREIGN KEY:外键约束
外键用于关联其他表的主键或唯一键
建立学生表和班级表
写入一条不存在的班级
删除学生表 建立新的并加入外键
建表插入数据 再次尝试插入不存在的班级学生信息
删除主表数据
当子表中存在对主表的依赖的时候,那么能不能删除主表中相应的记录?
依然会报一个主外键关系的错误
如果要删除主表中的记录,子表中不能有对该条记录的依赖也就意味要先删除子表中的记录,再去删除主表中的记录