Cat-God-007

导航

Mysql数据库的约束类型

Mysql数据库的约束类型有:主键约束(Primary Key),外键约束(Foreign Key),非空约束(Not Null),唯一性约束(Unique),默认约束(Default)。

MySQL关键字含义
NULL数据列可包含NUL值
NOT NULL数据列不允许包含NULL值
DEFAULT默认值
PRIMARY KEY主键
AUTO_INCREMENT自动递增,适用于整数类型 UNSIGNED 无符号
CHARACTER SET name指定一个字符集

1.非空约束

就是限制数据库中某个字段中的值是否可以为空,null字段值表示可以为空,not null字段值表示不能为空.

create table testnull(
id int,
username varchar(20) not null
)charset=utf8;
insert into testnull(id,username) values(1,'catgod007');
insert into testnull(id) values(2);
select * from testnull;
desc testnull;      

2.唯一约束.

字段添加唯一约束之后,该字段的值不能重复,也就是说在一列当中不能出现一样的值。
例:添加唯一约束

alter table testnull add unique(id);
insert into testnull(id,username) values(1,'cat');
select * from testnull;

例:取消唯一约束

Alter table  testnull drop index id;
insert into testnull(id,username) values(1,'cat');
select * from testnull;

3.主键约束

主键保证记录的唯一性,主键自动为not null
每张数据表只能存在一个主键 not null + unique key
一个unique key又是一个not null的时候,那么它被当做PRIMARY KEY主键
当一张表里没有一个主键的时候,第一个出现的非空且为唯一的列被视为有主键。

create table user(
id int primary key,
name varchar(20),
number int)
charset=utf8;
insert into user(id,name,number)values(1,'catgod007',1);
select * from user;
select * from user;
select * from user;

4.自增长

自增auto_increment自动编号,且必须与主键组合使用默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为auto_increment数据列明确指定了一个数值,则会出现两种情况:
如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。
如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。
例:添加自增长

alter table user change id id int not null auto_increment;
desc user;
select * from user;
insert into user(name,number)values('catgod007',1);
select * from user;

例:删除自增长

desc user;
alter table user change id id int not null ;
desc user;

5.默认约束

例:设置默认值

alter table user alter number set default 0;
desc user;
select * from user;
insert into user(id,name)values(6,'catgod');
select * from user;

6.外键约束

外键约束要求数据表的存储引擎只能为InnoDB
查看当前mysq服务器支持的存储引擎

show engines;

编辑数据表的默认存储引擎

vi /etc/my.cnf

将带engines的小字段改为INNODB,并保存退出
重启数据库

systemctl restart mysqld

create table teacher(
id int primary key auto_increment,
name varchar(20) not null)
charset=utf8;
create table student(
id int primary key auto_increment,
name varchar(20) not null,
teacher_id int,
foreign key(teacher_id) references teacher(id))
charset=utf8;
insert into teacher(id,name)values(1,'catgod007');
select * from teacher;
insert into student(id,name,teacher_id)values(3,'catgod7',1);
select * from teacher;
select * from student;

注意:
如果约束不生效可以先设置一下sql_mode

set session sql_mode='STRICT_TRANS_TABLES';

感谢大家,点赞,收藏,关注,评论!

posted on 2022-04-17 08:31  成果和地方  阅读(42)  评论(0编辑  收藏  举报  来源