MySQL:04---数据完整性(非空、唯一、主键、check、默认值、外键约束),级联设置,表自增列

版权声明:本文章刊载的内容,多数为读者作者笔记,笔记内容来自于潭州教育提供的学习资源以及读者本人阅读的文章,特此声明! https://blog.csdn.net/qq_41453285/article/details/85118227

一、数据完整性

1.概念:指数据能正确反映实际情况

2.分类

  • 实体完整性:标识符或主键完整性(主键、唯一值约束)
  • 域完整性:限制数据类型、格式、取值范围(检查、默认值、外键约束)
  • 引用完整性:输入或删除时,不能存在引用不存在的值(外键约束)
  • 自定义完整性:自定义规则

3.约束:限制表数据的一个条件

约束写法

  • 行级约束:定义在每个字段后(字段基础上)
  • 表级约束:定义在表后(表基础上)

二、非空约束(not null)

1.创建表时指定非空约束

create  table  student(id int not null,phone int);

2.将指定列修改为非空约束

alter  table  student  modify  column phone int not null;

3.删除非空约束

alter  table  student  modify  column  phone int;

三、唯一约束(unique)

1.创建表时指定唯一约束

create  table  student(id int  unique,phone int);

2.将指定列修改为唯一约束

方式:定义唯一约束名称,uc_xxx(下划线后面为自己定义的名称),且一个表中只能出现一个,不能重复使用

单列:alter  table  student  add constraint uc_name  unique(name);
复合唯一约束(表级约束):alter  table  student  add constraint uc_idname  unique(id,name...);

3.创建表时指定复合唯一约束(表级约束)

 注:复合唯一约束指组合的内容唯一,而不是单独分开来判断是否唯一(例如下面的id与name)

create table student (id int,name varchar(255),constraint uc_name unique(id,name));

4.删除列的唯一约束

删除方式:通过前面定义的唯一约束的名称删除(uc_xxx),例如上方定义了uc_name的唯一约束名称

alter table student drop index uc_name;

四、主键约束(primary key)

概念:非空+唯一(指定列/多列组合不允许重复,也不允许出现空值)

注意:一个表中最多允许有一个主键

1.创建表时指定主键

create  table  student(id int primary key,phone int);

2.增加主键约束

方法:在key()括号内写入字段名称

单列:alter  table  student  add primary key(id);
复合主键(表级约束):alter  table  student  add primary key(id,name...);

3.删除主键约束

方法:一个表中最多只有一个主键,所以直接删除,不需要指定字段

alter  table  student  drop primary key;

4.创建表时指定复合主键(表级约束)

方法:constraint  pk_xxx增加主键,pk_后面为自定的名称(constraint  pk_xxx可省去)

create  table  student(id  int, phone  int, constraint  pk_id  primary  key(id,phone));

五、check约束

1.概念:约束字段的取值范围

2.声明:MySQL不支持check约束。但可以定义,不起作用。

3.定义check约束

create table student(age int check(age>0 and age<100)) ;

六、默认值约束(default)

1.概念:为字段赋默认值

2.创建表时添加默认值

create  table  student(name  varchar(10)  defalut  "C++");

3.给表中的一列添加(修改默认值)

alter  table  student  modify column name  varchar(10)  default  "C++";

4.删除默认值

方法:赋值为null即可

alter  table  student  modify  column name varchar(10)  default  null;

七、外键约束

1.概念:一个表的外键取值参考另一个表的主键,而且外键和主键的长度、精度要相同

2.在事例中介绍语法

例如:有一个学生表(student)和一个班级表(class),学生表中的班号为外键,参考班级表中的主键

班级表:create  table  class(class_no  int  primary key, class_name varchar(255));

①.创表时指定外键

方式:constraint  kf_外键名  foreign  key(子表字段)  references  父表名(父表字段);

create  table  student (student_id  int, student_name varchar(20),class_no  int, constraint  fk_stucla foreign  key(class_no)  references  class(class_no));

②.增加外键约束

alter  table  student  add constraint  fk_stucla  foreign  key(class_no)  references  class(class_no);

③.删除外键约束

方式:通过外键约束名称删除

alter  table  student  drop  foreign  key  fk_stucla;

3.注意事项

  • 当外键在插入一行新数据时,外键的内容必须是主键中存在的,否则不能添加
  • 主键一定要设置为primary key

八、级联设置

1.概念:创建外键时,允许子父表之间有所联系(更新/删除)。父表:含有主键的表。子表:含有外键的表

2.级联的三种形式

  • cascade:当父表数据更新时,子表数据也会更新。父表数据删除时,子表对应一行都会删除
  • no action:当子表已经使用了关联数据,则父表不能执行更新/删除功能
  • ste null:当父表数据更新/删除时,子表数据将变为null(因此子表的外键约束不能设置为非空约束(not null))

3.代码演示

注意:on delete和on update代表更新和删除,根据自己的需求使用,也可以只使用其中一个

添加级联设置:create  table  student(student_no  int, class_no int,  constraint  fk_stucla  key(class_no)  references  class(class_no)  on delete  cascade  on  update  cascade);

九、表的自增值

1.特点:自增值在创建对象时,如果没有赋值,默认从0开始递增。赋值后从赋的值开始递增。

2.代码演示

①创建自增列

create table student(id int  auto_increment);

②为现有表指定自增列

alter  table  student  modify  column id int  auto_increment;

③删除自增列

删除自增列此处是使用not null方法。使用此方法后、向表中主键插入数据时就必须带上值

alter  table  student  modify  column  id int  not null;

④设置自增起始值

  • auto_increment=起始值;
  • 此种方法目前有错...待更新

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/85118227