MySQL数据库约束

目录

数据库约束

1.NULL约束

2.UNIQUE:唯一约束

3.DEFAULT:默认值约束

4.PRIMARY KEY:主键约束

5.FOREIGN KEY:外键约束


数据库约束

以下为本篇文章会介绍的约束

 (1)NOT NULL - 指示某列不能存储 NULL 值。  

(2)UNIQUE - 保证某列的每行必须有唯一的值。

(3)DEFAULT - 规定没有给列赋值时的默认值。
(4)PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
(5)FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
约束能够引入更多的检查操作,但也会增加系统的开销, 属于牺牲了执行效率,换来了开发效率。

1.NULL约束

创建表时,可以指定某列不为空:

设置学生表结构1-1
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT NOT NULL,
   sn INT,
   name VARCHAR(20),
   qq_mail VARCHAR(20)
);
比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;
MySQL数据库约束_第1张图片
演示效果:
若想正常插入id不能为空
MySQL数据库约束_第2张图片

 


2.UNIQUE:唯一约束

设置学生表结构2-1

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT NOT NULL,
   sn INT UNIQUE,
   name VARCHAR(20),
   qq_mail VARCHAR(20)
);

这里我们重新设置一下表结构,对sn进行约束为唯一约束

MySQL数据库约束_第3张图片

演示效果:

MySQL数据库约束_第4张图片

补充:

加上unique约束之后,当后续进行插入或修改操作时,系统都会进行查询,看看操作值是否存在。


3.DEFAULT:默认值约束

指定插入数据时,若列为空,则为默认值

设置学生表结构3-1

指定插入数据时, 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)
);

MySQL数据库约束_第5张图片

演示:
MySQL数据库约束_第6张图片

4.PRIMARY KEY:主键约束

可以理解为:主键是 NOT NULL 和 UNIQUE 的结合

非空&唯一
注意:
  • 每个表只能定义一个主键。

  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

指定 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)
);
MySQL数据库约束_第7张图片
对于整数类型的主键,常配搭自增长 auto_increment 来使用。
插入数据对应字段不给值时, 数据库会按照自增的方式分配, 使用最大值+1。
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment 

(1)一般演示: 

 MySQL数据库约束_第8张图片

MySQL数据库约束_第9张图片

 

(2)演示:
插入数据对应字段不给值时, 数据库会按照自增的方式分配, 使用最大值+1。
MySQL数据库约束_第10张图片
MySQL数据库约束_第11张图片
(3)此时你也可以手动加入符合条件的任意值。
MySQL数据库约束_第12张图片
(4)递增不重复利用之前的值
MySQL数据库约束_第13张图片
MySQL数据库约束_第14张图片

注意:

(1)自增的数据必须是整形。

(2)上述自增,只能在单个数据库中生效。如果数据库是由多个mysql服务器构成的集群,自增主键就会失效。


5.FOREIGN KEY:外键约束

外键用于关联其他表的主键或唯一键

语法如下:

foreign key (字段名) references 主表(列)

本表的某列引用另一个表的对应列,此时就要求,本表中个这个列的数据与另一个表的类型对应。

接下来我们设计一个案例如下:

  • 创建班级表classes,id为主键
    DROP TABLE IF EXISTS classes;
    CREATE TABLE classes (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR(20),
    desc1 VARCHAR(100)
    );
    

  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id。
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);
  • 必须为主表定义主键。

MySQL数据库约束_第15张图片

MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

简单理解:

班级表约束了学生表。我们把班级表这种约束别人的表称为父表,把学生表这种被约束的表称为子表。

演示:

(1)父表对字表的约束。外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

MySQL数据库约束_第16张图片

MySQL数据库约束_第17张图片

如果输入不存在的classes_id.

(2)外键为空值:

MySQL数据库约束_第18张图片

补充:字表对父表也有约束

如果尝试修改或删除父表的记录,也会先查看一下子表,看看这个结果是否在子表中被引用,如果被引用则无法删改。


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

你可能感兴趣的:(mysql,mysql,数据库,经验分享,其他)