Mysql——约束(六种)

约束基本概念:

作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性
(约束是为了保证进入数据库的数据都是有效的、可靠的,会对列的值进行一些约束,
确保存进去的数据都是有效的)
查看约束: show create table 表名;
约束分类:

(约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束)


主键约束(pk)

主键约束最显著的特征是主键列中的值是不允许重复的,通过主键约束可强制表的实
体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只
能有一个 PRIMARY KEY 约束,且 PRIMARY KEY 约 束中的列不能接受 NULL
alter table table_name add constraint pk_name primary key(字段名);
#设置该字段为主键,主键约束名称称为pk_name

设置主键约束的几种方式:

1.创建表的时候指定主键约束

create table table_name(id int primary key,name varchar(20));

create table table_name(id int,name varchar(20),primary key(id));

create table table_name(id int,name varchar(20),constraint pk primary key(id));

2.修改某一列为主键
alter table 表名 add [constraint] primary key(id);
alter table 表名 modify [column] 字段名 属性 primary key;  --修改列类型
alter table 表名 change [column] 字段名 字段名 属性 primary key; --修改列名称和类型
3.删除主键约束
alter table 表名 drop primary key;

自增长列(列识别)

并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长
列,自增长列是 int 类型的,其值是由数据库自动维护的,是永远都不会重复的,因此
自增长是最适合作为主键列的。在创建表时,通过 AUTO_INCREMENT 关键字来标识自
增长列,在 MySQL 数据库中自增长列必须是主键列。
特点:1.标识列必须和一个key搭配(key指主键、唯一、外键...)
           2.一个表最多有一个标识列
           3.标识列的类型只能是数值型
           4.标识列可以通过SET auto_increment_increment = 3; 设置步长(全局,退
              出数据库重新进入会恢复默认值),可以通过插入行时手动插入标识列值设置
              起始值。
create table goods(no int primary key auto_increment,name varchar(20)); --直接设置自增长
alter table 表名 modify [column] 列名 列类型 auto_increment;  --修改为自增长列
alter table 表名 change 列名 列名 列类型 auto_increment;
alter table 表名 modify [column] id int;  --删除自增长列

联合主键:

联合主键( Composite Primary Key )是指在数据库表中,由多个列共同组成的主键,
用来唯一标识表中的每一行数据。它的作用类似于单一列的主键,但不是由单个列组
成,而是由多个列组合而成。联合主键可以确保表中的每一行都具有唯一性,并且每
个列组合的值都不会重复。
在创建表时,可以在列定义中指定多个列作为联合主键。
create table 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型,
                            primary key(列名1,列名2,列名3));
alter table 表名 add [constraint] primary key(列名1,列名2,列名3);  --修改列的时候创建
alter table 表名称 drop primary key;  --删除
联合主键在以下情况非常有用:
1
1.当单个列无法唯一标识表中的每一行,但多个列组合在一起可以唯一标识每一
行数据时。
2
2.提高查询性能:联合主键可以更有效地支持涉及多个列的查询,避免创建额外
的索引。
3
3.在具有多个外键的关联表中,可以使用联合主键来确保外键引用的准确性。
(注:联合主键要求每个列组合的值都是唯一的)

唯一约束

对于非主键列中的值也要求唯一性时,就需要唯一约束

创建表时:

create table table_name(id int,name varchar(20) unique);
create table table_name(id int,name varchar(20),constraint 约束名 unique(name));

修改表:

alter table 表名 add unique(列名称);

alter table 表名 add constraint [constraint_name] unique(列名称);

alter table 表名 change [column] 列名 列名 类型 unique;

alter table 表名 modify [column] 列名 列类型 unique;

删除唯一约束:

alter table 列名称 drop index 设置唯一时的名称;

(如果没有设置约束名称,名称默认是字段名)

唯一约束允许有多个NULL值


默认约束:

概念:为列中的值设置默认值  default value

创建表时:

create table table_name(id int default value,name varchar(20) unique);

修改表:

alter table 表名 modify [column] 列名 列类型 default 默认值;

alter table 表名 change 列名 列名 列类型 default 默认值;

删除:

alter table 表名 modify [column] 列名 列类型;

alter table 表名 alter column 列名 drop default;

如果已经设置了值,默认值则无效。


非空约束

NOT NULL:非空,用于保证该字段的值不能为空。

创建表:

create table table_name(id int not null,name varchar(20));

alter table 表名 modify [column] 列名 列类型 not null;

alter table 表名 change 列名 列名 列类型 not null;

删除:

alter table 表名 modify [column] 列名 列类型 [null];

修改列的约束要确保有数据满足非空约束条件,否则可能操作失败。


检查约束

从 MySQL 8.0.19 版本开始, MySQL 支持了检查约束。检查约束允许你在表定义中声
明条件,并确保符合该条件的数据才能插入或更新到相应的列中。

添加检查约束:

create table employees(id int auto_increment primary key,

                        name varchar(50),

                        age int,

                        email varchar(100),

                        check(age>=18));     --添加检查约束,年龄必须>=18

修改表的时候:

alter table 表名 change 列名 列名 列类型 check(condition);

alter table 表名 modify 列名 列类型 check(condition);

alter table 表名 add constraint 列名 check(condition);

删除检查约束:

alter table 表名 drop constraint 约束名;


外键约束

用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
表中列的值来自于另外一张表的主键或唯一键的列称为外键 FK ,将被引用值的表称
为主表或父表,将引用值的表称为从表或子表。

创建表:

create table table_name(id int not null,

                                        name varchar(20),

                                        `rid`  int,

                                        constraint `abc` foreign key(rid) references b(id));

其中rid是从表的外键,‘abc’是约束名,b是主表名,b(id)是主表的主键

alter table 从表表名 add constraint 约束名称 foreign key(从表字段)references 主表表名(主表字段);

alter  table  goods  add  constraint  `fk_category_no`  foreign  key(category_no) references category(no);

删除表:

alter  table 表名称 drop  foreign  key 索引名;--设置外键时的名称

注:

1.外键列类型需要与引用列类型一致

2.外键列的值必须是主表中引用列的值或者 NULL

3.一个表可以有多个外键列

4.从表列可以随便删除

5.删除主表数据时,会先检查从表中有没有对此数据的关联,如果有就不能直接 删除

6.在 设 置 外 键 的 时 候 后 面 添 加 on delete cascade / on updatecascade 在删除/更新主表时,级联删除/更新外键列的数据

7.在设置外键的时候后面添加 on delete set null / on update set null 在删除 / 更新主表时,外键列的值会变成 null
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值