MySQL数据库的约束

发布于:2024-05-21 ⋅ 阅读:(49) ⋅ 点赞:(0)

 博主主页: 码农派大星.

数据库专栏: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='女')
);