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';
感谢大家,点赞,收藏,关注,评论!