MySQL数据库基础之数据完整性约束学习

完整性约束是指数据库的内容必须遵守的规则

如果定义了数据完整性约束,MySQL会负责数据的完整性

每次更新数据时,MySQL都会测试新的数据内容是否符合相关的完整性约束条件,只有符合完整性约束条件的更新才被接受

1.主键Primary Key

  • 每张数据表只能存在一个主键
  • 主键保证记录的唯一性
  • 主键自动为not null
  • 差不多就是主键允许赋值,但不允许赋两个相同的值

1.创建course表来记录每门课程的学生学号,姓名,课程号,学分和毕业日期,其中学号,课程号和毕业日期构成复合主键P54

2.因为MySQL会自动为主键创建一个索引,所以我们可以吧这个索引进行重命名 P55 (复合主键+索引重命名)

2.唯一约束Unique Key

  • 唯一约束可以保证记录的唯一性
  • 唯一约束的字段可以为空值(null)
  • 每张数据表可以存在多个唯一约束

因为保证记录的唯一性,所以同样在赋值的时候,不能赋重复的值

(因为一个表只能有一个主键,当一个表有多个列需要建立唯一性约束时,替代键是没有被选作主键的候选键)

3.auto_increment(自动编号)

  • 自动编号,且必须与主键组合使用(自动编号离不开主键,但不代表主键离不开自动编号)
  • 默认情况下,起始值为1,每次的增量为1
1 create table tb3(
2 id smallint unsigned auto_increment primary key,
3 username varchar(30) not null
4 );

后面只需要给username赋值就行(id字段因为有了主键,所以无法赋重复的值,所以得继续加一加一下去,自动编号效果达成,当然这是我无聊时候的小想法)

  • 自动编号是记录没插入成功也会自动加一个1

4.默认值default

1 sex enum(1,2,3)default 3          /*有1,2,3这3个选项,其中默认值为3,没赋值就会写3*/

5.外键约束foreign key P58

  • 保持数据的一致性,完整性。
  • 实现一对一或一对多关系
1 create table users(
2 id smallint unsigned primary key auto_increment,
3 pid smallint unsigned,
4 foreign key(pid) references provinces(id)
5 );

provinces应该是父表表名,子表是users

pid外键列,id参照列(参照列与外键列具有相似的数据类型,其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同)

  • cascade,set null,restrict,no action
  • 在父表(父表provinces中字段id和pname,给pname插入3条记录,得先给父表插记录,才能给子表插记录。把父表的id=3的记录删掉,子表处pid=3的记录都被删掉——cascade)

6.SHOW CREATE TABLE 表名;

可以查看表的所以信息,包括一些字段类型,字段的约束,外键,主键,索引及字符编码等

7.show indexes from 表名\G;

加上\G似乎比较直观呈现数据

8.check完整性约束

创建表student,只考虑学号和性别两列,性别只能包含男或女两项。

1 create table student(
2 学号 char(6) not null,
3 性别 char(2) not null check(性别 in(,))
4 );

指定了性别(列)允许哪个值,列完整性约束

MySQL数据库基础之数据完整性约束学习

上一篇:django.db.utils.InternalError: (1054, "Unknown column 'cid' in 'field list'")


下一篇:mysql分组查询每组信息的最大值及所有信息