博主主页: 码农派大星.
数据库专栏:MySQL数据库
关注博主带你了解更多MySQL数据库知识
数据库约束
1.1 约束类型
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
DEFAULT - 规定没有给列赋值时的默认值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性
CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句
1.2 NULL约束
创建表时,可以指定某列不为空:
CREATE TABLE student (
id INT NOT NULL,
sn INT,
name VARCHAR(20),
qq_mail VARCHAR(20)
);
insert into student values(4,2,'李白','rf43r');
正确
insert into student values(,2,'李白','rf43r');
错误
insert into student values(null,2,'李白','rf43r');
错误
1.3 UNIQUE:唯一约束
指定sn列为唯一的、不重复的:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20),
qq_mail VARCHAR(20)
);
insert into student values(5,3,'张三','df43r');
insert into student values(6,3,'李四','ff43r');
两个3已重复 ,不符合unique,所以报错.
1.4 DEFAULT:默认值约束
指定插入数据时,name列为空,默认值unkown:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
insert into student (id) values(1);
1.5 PRIMARY KEY:主键约束
指定id列为主键:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
一个表中只能存在一个主键
对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大 值+1。
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment,
1.6 FOREIGN KEY:外键约束
外键用于关联其他表的主键或唯一键,语法:
foreign key (字段名) references 主表(列)
学生表的classId列引用了班级表的classId列,班级表中的数据约束了学生表中的数据.
注意:
外键(foreign key)不能被修改和插入不相同列的属性.
如果父表中的某个记录被子表引用,就不能删除/修改父表中的记录了
父表会影响子表,子表有时也会影响父表(如上).
删表也不能删
除非先删除子表,再删除父表:
这里我们看到,刚才第一就行,我们刚删除了后,再创建就不行了,这是什么原因呢?
是因为没有主键
主键本身具有唯一性要求的,频繁触发查询,此处数据库就会对主键约束,就会特殊处理(索引),
加快查询速度.
如果不指定主键,是一个unique,也能达成效果,也会自动建立索引,便于快速查询
1.7 CHECK约束(了解)
MySQL使用时不报错,但忽略该约束:
drop table if exists test_user;
create table test_user (
id int,
name varchar(20),
sex varchar(1),
check (sex ='男' or sex='女')
);