MySQL学习(4) - 数据表的约束

参考:https://blog.csdn.net/baidu_41388533/article/details/108127513

约束的作用

  • 对表中的数据进行限制,保证数据的正确性、有效性和完整性。
  • 一个表如果添加了约束,不正确的数据将无法插入到表中。
  • 约束在创建表的时候添加比较合适。

约束种类

在这里插入图片描述

主键
作用

用来唯一标识数据库中的每一条记录

特征
  1. 通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。
  2. 主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。
    下表中使用id作为主键,一般不使用身份证号、学号等。
    在这里插入图片描述
创建主键
  • 主键关键字: primary key
  • 主键的特点:
    1. 非空 not null
    2. 唯一
  • 创建表的时候创建主键
-- 创建表学生表 st5, 包含字段(id, name, age)id 做为主键
create table st5 (
 id int primary key, 
 name varchar(20),
 age int
)
  • 已有表中增加主键
ALTER TABLE employee ADD PRIMARY KEY(ID)
删除主键
-- 删除 st5 表的主键
alter table st5 drop primary key;
-- 添加主键
alter table st5 add primary key(id);
设置主键自增

在每次插入新记录时,数据库自动生成主键字段的值

-- 指定起始值为 1000
create table st4 (
 id int primary key auto_increment,
 name varchar(20)
) 

auto_increment = 1000;
insert into st4 values (null, '孔明');
select * from st4;

-- 修改起始值
alter table st4 auto_increment = 2000;
  • DELETE 和 TRUNCATE 对自增长的影响
    DELETE:删除所有的记录之后,自增长没有影响。
    TRUNCATE:删除以后,自增长又重新开始
唯一约束

表中不能出现重复的数据

字段名 字段类型 UNIQUE
非空约束
字段名 字段类型 not null
默认值
字段名 字段类型 default 默认值
注意
  • 主键数在一个表中,只能有一个。不能出现多个主键。
  • 主键可以单列,也可以是多列。
  • 自增长只能用在主键上。
外键
  • 什么是外键:在从表中与主表主键对应的那一列,如:员工表中的 dep_id
  • 主表: 一方,用来约束别人的表
  • 从表: 多方,被别人约束的表在这里插入图片描述
-- 1) 创建从表 employee 并添加外键约束 emp_depid_fk
-- 多方,从表
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外键对应主表的主键
-- 创建外键约束
constraint emp_depid_fk foreign key (dep_id) references department(id)
)
-- 2) 正常添加数据
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
select * from employee;
-- 3) 部门错误的数据添加失败
-- 插入不存在的部门
-- Cannot add or update a child row: a foreign key constraint fails
INSERT INTO employee (NAME, age, dep_id) VALUES ('老张', 18, 6);
  • 删除外键
ALTER TABLE 从表 drop foreign key 外键名称;
外键级联
  • 在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值