目录
- 主键约束
- 外键约束
- 非空约束
- 唯一性约束
- 默认约束
- 设置表自增
主键约束
主键:又叫主码,是表中一列或者多列的组合;
主键约束:要求主键列数据唯一,且不为空;
主键分为两种:一种叫单字段主键,另一种叫多字段主键;
设置主键
首先我们创建一个数据库名字叫try
后面的数据库都用这个;
然后我们添加一张数据表,创建单字段主键的方式有两种,一种是在定义列的同时定义主键,另一种是在定义好所有列以后定义主键;
这里采用定义列的同时定义主键,我们可以看到id
被设置为了主键;
这里我们会发现不管是采用哪一种方式添加主键,在数据库建表的时候都是把主键放在后面的;
这里我们建好了id
为主键的表t
;
在这里主键的意思就是不能有同样的id
, 也不能让id
为空;
我们看到第二次添加id
为1
的数据的时候就会报错了;这里我试了一下一个表只能有一个主键;
联合主键
主键由多个字段联合构成;
创建方式:
多字段联合主键只有在字段数据全部相同时,才会报错,这里我们就不演示了;
外键约束
外键用来在两个表的数据之间建立链接,它可以使一列或者多列,一个表可以有一个或者多个外键,一个表的外键可以是空值,若不为空,则每一个外键必须等于另一个表中主键的某个值;
**主表(父表)?*对于两个相关连的表主键所在的表;
**从表(子表)?*对于两个相关联的表外键所在的表;
我们这里举例说明:
我们创建两张表,一张用来存放学生数据,主键为学号,另一张放学生成绩将学生的学号设置为外键;
我们来说说外键怎么创建,首先每个外键要有外键名,因为一个表可以有多个外键,但是外键名不能重复;上表我们在创建外键的时候赋予他的外键名是num
;
然后我们通过几个小实验来说说外键:
我们向student
这张表中添加一行数据设置id = 1
;
然后我们尝试向另一张表中添加一个id = 2
的学生的成绩
毫无疑问这里会报错的因为主表中没有id = 1
的学生;
然后我们添加一个数据在从表中,在尝试删除主表中的那一行;
这里依然报错,因为从表中有id = 1
的数据所以不能删除;
那如果先删除从表中与id = 1
有关的数据再删除主表中的可不可以呢?
这样是可以的;
同样的在删除主表时先删除从表;
非空约束
这个就比较简单了;听名字就可以知道这里不能让这个字段为空;
创建方式:
字段名 数据类型 not null
唯一性约束
这里我感觉和主键有些类似,都是设置一列或者几列不出现相同值,例如qq
账号每个人都不一样;
这里和主键区别就是,一张表里只能有一个主键,但是这个可以有多个,而且可以为空;
因为有多个所以和外键一样每个约束要有一个约束名;
创建方式:
constraint <约束名> unique (<字段名>)
默认约束
指定某列的默认值,如果没有给这个字段赋值,系统就会为这个字段默认赋值;
字段名 数据类型 DEFAULT 默认值
举个栗子:
设置学生表的班级一列为nb1
;
然后向里面添加数据
我们可以看到第一种添加方式没有办法用到默认主键;
设置表值自增
因为主键不能重复所以我们可以设置每增加一条语句字段值自动加一;可以为表主键添加AUTO_INCREMENT
关键字实现;一个表只能有一个字段使用这个关键字;且该字段必须是主键的一部分;AUTO_INCREMENT
约束可以是任何整数类型;
字段名 数据类型 AUTO_INCREMENT
同样这里的insert into
也不能直接values
;