MySQL初学之旅(3)约束
目录
1.前言
2.正文
2.1约束类型
2.2NULL约束
2.3UNIQUE约束
2.4DEFAULT约束
2.5PRIMARY KEY主键约束
2.6FOREIGN KEY外键约束
2.7CHECK约束
3.小结
1.前言
哈喽大家好啊,今儿来继续给大家分享最近学习的MySQL和约束相关的知识点,希望大家一起加油,让我们开始吧。
2.正文
2.1约束类型
在 MySQL 中,约束(Constraint)是对表中数据的一种规则,用于限制存储在表中的数据,确保数据库数据的完整性、一致性和准确性。约束在定义表的列时设置,主要分为以下几种:
2.2NULL约束
NULL
用于指定列可以接受空值。通常与NOT NULL
约束相对,NULL
表示该列允许为空,即在插入或更新数据时,可以不给该列赋值,让其存储NULL
值。如果在创建表时没有为某列指定
NOT NULL
约束,MySQL 默认允许该列存储NULL
值。如果设置为NOT NULL约束,那么在插入数据时必须设定初值。
接下来我们来演示一下:
CREATE TABLE student(
id BIGINT not NULL,
NAME VARCHAR(50)
);
我们先创建一个表,接着再用desc去查看:
我们可以看到,在上面一栏的约束中,id的NULL值被设置为了NO,意为无默认值,让我们插入数据试一下效果:
INSERT INTO student values (1,'jerry');
INSERT INTO student values (NULL,'TOM');
运行结果如下:
提示信息告诉我们,id那个元素必须设置不为空。
由此观之,确实是只有一个元素插入成功。
2.3UNIQUE约束
UNIQUE
约束用于确保一列或多列中的值在表内是唯一的,即不允许出现重复的值。UNIQUE
约束可以防止插入重复的数据,从而保证数据的完整性。
特点如下:
- 保证唯一性:
UNIQUE
约束确保指定列的值在整个表中是唯一的,但允许有一个空值(NULL
)。- 与主键的区别:一个表只能有一个主键,但可以有多个唯一约束列。
- 组合唯一约束:可以在多列上添加组合唯一约束,确保这些列的组合值在表中是唯一的。
添加UNIQUE约束的方式有俩种,一种是单列唯一约束另一种是多列组合唯一约束,下面附上代码来讲解:
create table stu1(
id1 bigint,
name1 VARCHAR(20)UNIQUE
);
create table stu2(
id2 bigint,
name2 VARCHAR(20),
number BIGINT,
Unique(name2,number)
);
先按照语法创建俩个表:
接下来插入数据验证一下:
我们可以发现当有相同的值时,就没有办法正常插入
整条语句都没有插入成功,同理多列一样没有办法成功,但有下面这一种情况:
组合类型中有一个重复,有一个不同,那么结果还是能插入成功的。
2.4DEFAULT约束
DEFAULT
约束用于设置数据库表中的列的默认值。当插入数据时,如果某一列没有提供值,数据库会自动使用默认值。
这个较为简单我们直接上代码演示:
CREATE table stu (
id bigint,
name varchar(20),
class VARCHAR(20)DEFAULT('六班')
);
继续插入数据调试:
INSERT INTO stu (id, name, class) VALUES (1, 'jerry', '三班'), (2, 'tom', DEFAULT);
2.5PRIMARY KEY主键约束
PRIMARY KEY
主键约束用于唯一标识数据库表中的每一行记录。一个表只能有一个主键,且主键列的值必须唯一,并且不能为 NULL
。主键约束通常用于保证数据的完整性和唯一性。
特点如下:
- 唯一性:主键的值必须是唯一的,不能有重复。
- 非空性:主键列不能包含
NULL
值。- 自动索引:数据库会自动为主键列创建索引,从而加快查询速度。
- 单表唯一:每个表只能有一个主键,但主键可以由一个或多个列组合而成。
附上代码:
create table stu (
id bigint PRIMARY KEY auto_increment,
name varchar(20)
);
解释一下这里面是什么意思:
id BIGINT PRIMARY KEY AUTO_INCREMENT
:id
列是主键,同时使用AUTO_INCREMENT
约束,这样每次插入新记录时,id
会自动递增,保证每条记录的唯一性。
如果我们这样插入:
INSERT INTO stu (name) VALUES ('Alice'), ('Bob'), ('Charlie');
没有为id赋初值,结果发现仍能正常插入,并仍有递增的功能:
2.6FOREIGN KEY外键约束
FOREIGN KEY
外键约束用于在两个表之间建立关系。外键用于引用另一个表的 PRIMARY KEY
或 UNIQUE
列,从而保证数据的引用完整性。通过外键,可以确保某个表中的值必须在另一个表中存在,从而实现数据的关联性。
特点如下:
- 外键是用来在两个表之间建立链接的字段。
- 外键约束确保外键列的值在主表中必须存在。
- 外键可以防止无效数据被插入到表中,确保数据一致性。
先创建父表:
CREATE TABLE departments (
id INT PRIMARY KEY,
name VARCHAR(50)
);
再创建子表:
CREATE TABLE employees (
id1 INT PRIMARY KEY,
name2 VARCHAR(50),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(id)
);
此时,employees
表的 id
列是一个外键,让我们查看一下表属性:
此时表中存在外键关系。
INSERT INTO departments (id, name) VALUES (1, 'HR'), (2, 'Engineering');
INSERT INTO employees (id1, name2, department_id) VALUES (101, 'Alice', 1), (102, 'Bob', 2);
插入这俩行代码检验一下:
可以看到效果已经显现。
外键的好处是可以通过外键确保数据的完整性和关系的正确性。
2.7CHECK约束
CHECK
约束用于限制表中列的数据值,以确保数据符合特定条件。它在数据插入或更新时验证数据是否满足特定的规则,从而保证数据的有效性和一致性。
特点如下:
CHECK
约束可以应用于单个列或多个列。- 它通过表达式来定义,表达式的值为
TRUE
表示满足条件,否则不满足。- 任何不满足
CHECK
约束的插入或更新操作都会被拒绝。
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT CHECK (age >= 18)
);
在上面这个表中,为数据赋年龄时只能给>=18,一旦不满足条件就报错。
3.小结
今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,大家加油!