当前位置: 首页 > article >正文

mysql入门到精通005-基础篇-约束

1、概述

1.1 概念

约束是作用于表中字段上的规则,用于限制储存在表中的数据。

1.2 目的

保证数据库中数据的正确性、有效性和完整性。

1.3 常见的约束分类

  • 一旦谈到外键,则至少涉及2张表
  • 约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束

2、演示

2.1 案例

案例1: 根据需求完成表结构的创建(关注约束条件)

创建表结构: 

create table user (
    id int primary key auto_increment comment "主键",
    name varchar(10) not null unique comment "姓名",
    age int check(age>0 and age<=120) comment "年龄",
    status char(1) default '1' comment "状态",
    gender char(1) comment "性别"

) comment "用户表"

插入数据:

insert into user(name,age,status,gender) values ("tom1",19,"1","男"),("kity",29,"0","女")
// 没有传status参数,这个时候会默认取1
insert into user(name,age,gender) values ("tom1",19,"男")

2.2 总结

记住约束的关键字即可

3、外键约束

3.1 概念

外键用来让2张表的数据之间建立连接,从而保证数据的一致性和完整性。

🌟🌟🌟(具有外键的表被称为子表(从表),外键所关联的表被称为父表(主表))🌟🌟🌟

eg.如员工表和部门表之间的关联。

注:目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的。(影响:如删除或则update主表记录后,从表不会进行更新

3.2 语法

3.2.1 添加外键

<1>  创建表时,添加外键语法

CREATE TABLE 表名(
         字段名 数据类型,
         ...
         [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
  ); 

<2> 更新表时,添加外键语法

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

外键名称是自定义的变量,名字可以自己命名。

alter table emp add contraint fk_emp_dept_id foreign key (dept_id) references dept(id);
3.2.2 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
alter table drop foreign key fk_emp_dept_id;

4、外键删除更新行为

4.1 应用场景

如果我想在主表删除记录时候,从表也对应删除对应外键的记录,这个时候就可以使用外键的删除更新行为。(如员工表和部门表,一对多的关系,删除主表部门表一条记录时,可能对应删除多个从表员工表的多条记录)

4.2 外键删除更新行为分类

alter table emp add constranint fk_emp_dept_id foreign key(dept_id) references dept(id) on update cascade on delete cascade;

5、小结


http://www.kler.cn/a/231760.html

相关文章:

  • 阿里云引领智算集群网络架构的新一轮变革
  • 构建SSH僵尸网络
  • 智能网页内容截图工具:AI助力内容提取与可视化
  • 算法日记 26-27day 贪心算法
  • 大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 了 拦截器实现 Java
  • 【windows笔记】08-Windows中的各种快捷方式、符号链接、目录联接、硬链接的区别和使用方法
  • 【前端素材】bootstrap4实现绿色植物Lukani平台
  • vite项目配置根据不同的打包环境使用不同的请求路径VITE_BASE_URL,包括报错解决
  • 挑战杯 opencv 图像识别 指纹识别 - python
  • C语言:函数递归
  • 尝试gtp2go3.8解析
  • mac电脑flutter环境配置,解决疑难问题
  • 分享86个行业PPT,总有一款适合您
  • 从零开始手写mmo游戏从框架到爆炸(六)— 消息处理工厂
  • Redis核心技术与实战【学习笔记】 - 21.Redis实现分布式锁
  • 职业发展 - 一个专注于嵌入式物联网架构设计的攻城狮(转载)
  • npm 上传一个自己的应用(4) 更新自己上传到NPM中的工具版本 并进行内容修改
  • Spring IoC容器(四)容器、环境配置及附加功能
  • Docker进阶篇-CIG重量级监控系统
  • Android13新特性之预测返回手势
  • next项目页面性能调优
  • json、jsonlines格式化显示
  • MySQL温故篇(一)SQL语句基础
  • GEE入门篇|栅格数据集概述(四):其他卫星产品
  • C语言笔试题之实现C库函数 strstr()(设置标志位)
  • k8s弃用docker后使用ctr导入镜像