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

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、小结

相关文章:

  • 大规模机器学习简介
  • Netty源码系列 之 EventLoop run()方法 源码
  • Swift Combine 发布者订阅者操作者 从入门到精通二
  • 蓝桥杯嵌入式第8届真题(完成) STM32G431
  • yt-dlp快速上手
  • vim最简单命令学习
  • Python脚本之操作Elasticsearch【二】
  • C# async/await的使用
  • kubernetes部署nacos2.3.0
  • 网站服务器中毒或是被入侵该怎么办?
  • Leetcode的AC指南 —— 栈与队列 :1047.删除字符串中的所有相邻重复项
  • YUM | 包安装 | 管理
  • Oracle Vagrant Box 扩展根文件系统
  • Android Build 依赖项
  • JVM 性能调优 - Java 虚拟机内存体系(1)
  • 分享的文章《人生如棋》
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • docker python 配置
  • Docker: 容器互访的三种方式
  • JavaScript的使用你知道几种?(上)
  • laravel5.5 视图共享数据
  • windows下使用nginx调试简介
  • 程序员最讨厌的9句话,你可有补充?
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 基于组件的设计工作流与界面抽象
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 云大使推广中的常见热门问题
  • linux 淘宝开源监控工具tsar
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • %@ page import=%的用法
  • (007)XHTML文档之标题——h1~h6
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十一)手动添加用户和文件的特殊权限
  • (一)插入排序
  • (一一四)第九章编程练习
  • (转)shell调试方法
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *2 echo、printf、mkdir命令的应用
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET MVC 验证码
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 使用ajax控件后如何调用前端脚本
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • /run/containerd/containerd.sock connect: connection refused