MySql的初学习 -- 第五章 -- 了解约束
博客说明
文章内容输出来源:拉勾教育Java就业急训营
什么是约束
- 约束的作用:
对表中的数据进行进一步的限制,从而保证数据的正确性、有效性、完整性. 违反约束的不正确数据,将无法插入到表中 - 常见的约束
约束名 | 约束关键字 |
---|---|
主键约束 | primary key |
唯一约束 | unique |
非空约束 | not null |
外键约束 | foreign key |
主键约束
特点:不可重复、唯一、不可为空
作用:用来表示数据库中的每一条数据(类似人的身份证,因此可以通过主键来找到相应的数据)
主键约束的添加与删除
-- 方法一:创建表时添加主键
-- 格式:字段名称 字段类型 PRIMARY KEY;
CREATE TABLE test1(
id INT PRIMARY KEY,
name VARCHAR(20)
);
-- 方法二:创建表时添加主键
-- 格式:PRIMARY KEY(字段名称);
CREATE TABLE test2(
id INT,
name VARCHAR(20),
PRIMARY KEY(id)
);
-- 方法三:创建表之后,再添加主键 -- 通过DDL语句添加主键约束
#第一步,创建一个没有主键的表
CREATE TABLE test3(
id INT,
name VARCHAR(20),
);
#第二步,使用DDL语句添加主键约束
ALTER TABLE test3 ADD PRIMARY KEY(id);
-- 删除主键约束 -- 通过DDL语句删除主要约束
-- 格式:ALTER TABLE 表名 DROP PRIMARY KEY;
ALTER TABLE test3 DROP PRIMARY KEY;
主键的自增 与 修改自增初始值
主键如果让自己添加很有可能重复,通常希望在每次插入新记录时,数据库自动生成主键字段的值.但主键的字段类型必须是整数类型
-- 创建表时添加主键自增
-- 格式:字段名称 字段类型 PRIMARY KEY AUTO_INCREMENT;
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
-- 修改自增的起始值(默认是1)
-- 重新创建自增主键的表,自定义自增的起始位置
-- 格式:在建表SQL后加上AUTO_INCREMENT = 开始位置;
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
)AUTO_INCREMENT = 100;
delete(DELETE)和truncate(TRUNCATE)对自增长的影响
方法 | 执行流程 |
---|---|
delete | 删除表中数据,将表中的数据逐条删除 |
truncate | 将整个表删除后,重新创建一个结构相同的新表 |
结论:
方法 | 结果 |
---|---|
delete | 对自增是没有影响,删除数据后自增不会恢复初始则会一直自增下去 |
truncate | 对自增有影响,删除数据后自增会恢复初始,从初始值开始自增 |
非空约束
特点:不可为空
作用:用来约束数据不能为空
-- 创建表时添加非空约束
-- 格式:字段名称 字段类型 NOT NULL;
CREATE TABLE test(
id INT NOT NULL,
name VARCHAR(20)
);
唯一约束
特点:不可重复
补充:对null值不做唯一判断
作用:用来约束数据不能重复
-- 创建表时添加唯一约束
-- 格式:字段名称 字段类型 UNIQUE;
CREATE TABLE test(
id INT UNIQUE,
name VARCHAR(20)
);
主键约束和唯一约束的区别
约束 | 区别 |
---|---|
主键约束 | 唯一,且不能为空(null) |
唯一约束 | 唯一,但可以为空(null) |
一个表中只能有一个主键约束,但可以有多个唯一约束 |
外键约束
默认值
作用:如果数据为null时,默认给予的值
-- 格式:字段名 字段类型 DEFAULT 默认值
CREATE TABLE test(
id INT PRIMARY KEY,
name VARCHAR(20),
sex CHAR(1) DEFAULT '男'
);
-- 使用默认值
INSERT INTO test(id,name) VALUE (1,"张三");
INSERT INTO test(id,name) VALUE (2,"李四");
-- 不使用默认值时,直接自定义值既可
INSERT INTO test VALUE (3,"小红",'女');