MySQL数据库约束

本文详细介绍了数据库中的五种主要约束:NULL约束、UNIQUE约束、DEFAULT约束、PRIMARYKEY(主键)和FOREIGNKEY(外键)。这些约束确保数据完整性,但可能影响执行效率。NULL约束禁止空值,UNIQUE约束保证唯一性,DEFAULT提供默认值,而主键和外键则用于表间关联。
摘要由CSDN通过智能技术生成

目录

数据库约束

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;
演示效果:
若想正常插入id不能为空

 


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进行约束为唯一约束

演示效果:

补充:

加上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)
);

演示:

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

(1)一般演示: 

 

 

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

注意:

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

简单理解:

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

演示:

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

如果输入不存在的classes_id.

(2)外键为空值:

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

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


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

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值