表约束
一、设置非空约束(NOT NULL)
数据库字段的某个值是否可以为空,NULL 字段值可以为空,NOT NULL 字段值不能为空。
当字段设置为非空时,添加数据就必须要插入值,否则就会报错
二、唯一约束(UNIQUE)
字段添加唯一约束之后,该字段的值不重复,也就是该字段的值在该表中唯一unique key
添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]]
UNIQUE [INDEX|KEY] [index_name] [index_type]
(index_col_name)
删除唯一约束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
三、主键约束(PRIMARY KEY)
主键保证记录的唯一性,主键自动为 NOT NULL, 每张数据表只能存在一个主键
添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT[sysbol]]
PRIMARY KEY [index_type] (index_col_name)
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY
四、自增约束(AUTO_INCREMENT)
AUTO_INCREMENT 自动编号,且必须与主键组合使用,默认情况下,起始值为1,每次的增量为1。
添加自增约束:
ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT;
删除自增约束:
ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL ;
五、默认约束(DEFAULT)
DEFAULT(默认约束) 初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值
ALTER TABLE tbl_name ALTER [COLUMN] col_name
{SET DEFAULT literal | DROP DEFAULT}
六、创建表的时候使用约束
七、外键约束(FOREGIN)
添加格式:
ALTER TABLE yourtablename #需要添加外键的表
ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
CASCADE 删除包含与已删除键值有参照关系的所有记录
SET NULL 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
RESTRICT 拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
NO ACTION 啥也不做
创建条件:
数据表的存储引擎只能为InnoDB(如果不修改,默认就是这个)
外键列和参照列数据类型一致
外键必须关联到主键上面去
创建学院表:
创建学生表,为学生表添加外键:
向学院表和学生表中添加数据:
尝试删除主表(学院表)中外键关联的数据(d_id),由于设置的格式(ON DELETE)为(SET NULL),学院表中的学院3被删除,但学生表中的学生’xiaolv’没有被删除,而是解除了与学院3的绑定,变为NULL,后续可以重新绑定新的学院
创建学生详细信息表:
向学生详细信息表内插入数据:
尝试删除学生表中的一行:
由于学生详情表中外键绑定方式为’ON DELETE CASCADE’,不但学生表中的s_id=3的学生被删掉,学生详情表中的sd_id=3的学生也会被删掉。
创建课程表:
创建学生课程中间表:
向学生课程中间表插入数据:
约束,即对表数据的约束,除了外键约束,其他的都是对表自身数据的约束,外键约束是对其他表的约束。
事务的回滚
数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
简单来说:几个操作是绑定在一起的,要么都做完,要么一个都不做
BEGIN 打断点;
ROLLBACK 退回到断点;
COMMIT 提前结束;
注意:ROLLBACK不能退回到删除表之前的状态,即删除后不能进行回滚。
视图
作用:
三范式让表查询变得复杂,对于常用的数据查询,反复写复杂的查询语句十分不方便,因此可以创建一个虚拟的表(不存数据),这个虚拟表的数据来源于数据库中存在的其他表,虚拟表的数据来源就在定义时给定
创建视图之前的查询表操作:
创建视图的操作:
创建视图之后的查询表操作:
删除视图的操作:
删除该视图之后继续访问该视图会报错: