MySQL:约束

2024-09-01 19:04
文章标签 mysql 约束 database

本文主要是介绍MySQL:约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 一、概述
    • 二、创建测试
    • 三、外键约束
      • 3.1 数据准备
      • 3.2 添加外键
      • 3.3 删除外键
      • 3.4 增加外键约束


在这里插入图片描述

一、概述

约束主要用于作用在表中字段上的规则,用于限制存储在表中的数据。
保证数据库中数据的正确性、有效性和完整性。

约束描述关键字
主键约束非空并且唯一PRIMARY KEY
非空约束字段不能为NULLNOT NULL
唯一性约束数据唯一UNIQUE
默认约束指定默认值DEFAULT
检查约束(8.0.16之后的版本)保证字段值满足某一条件CHECK
外键约束用于两张表之间的连接保证数据的一致性与完整性FOREIGN KEY

注意:约束是作用于表中的字段上的,可以在创建表、修改表的时候增肌约束

二、创建测试

CREATE TABLE tb_ys_test(id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID主键',name VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名',age INT CHECK(age > 0 && age <= 120) COMMENT '年龄',status CHAR(1) DEFAULT 1 COMMENT '状态',gender CHAR(1) COMMENT '性别'
) COMMENT '约束测试';

三、外键约束

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

在这里插入图片描述
注意:目前上述的两张表,在数据库层面,并未建立外键连接,所以无法保证数据的一致性与完整性。

3.1 数据准备

CREATE TABLE tb_dept(id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID主键',name VARCHAR(20) NOT NULL COMMENT '部门名称' 
) COMMENT '部门表';INSERT INTO tb_dept(id,`name`) VALUES (1, '研发部'), (2, '市场部'), (3, '财务部'), (4, '销售部'), (5, '总经办');CREATE TABLE tb_emp(id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID主键',name VARCHAR(20) NOT NULL COMMENT '姓名',age INT COMMENT '年龄',job VARCHAR(20) COMMENT '职位',salary INT COMMENT '薪资',entrydata DATE COMMENT '入职时间',managerid INT COMMENT '直属领导ID',dept_id INT COMMENT '部门ID'
) COMMENT '员工表';INSERT INTO tb_emp(id,`name`,age,job,salary,entrydata,managerid,dept_id) VALUES
(1, '金庸', 66, '总裁', 20000, '2000-01-01', NULL, 5),
(2, '张无忌', 20, '项目经理', 12500, '2005-12-05', 1, 1),
(3, '杨逍', 33, '开发', 8400, '2000-11-03', 2, 1),
(4, '韦一笑', 48, '开发', 11000, '2002-02-05', 2, 1),
(5, '常遇春', 43, '开发', 10500, '2004-09-07', 3, 1),
(6, '小招', 19, '程序员鼓励师', 6600, '2004-10-12', 2, 1);

3.2 添加外键

ALTER TABLE tb_emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES tb_dept(id);

3.3 删除外键

ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept_id;

3.4 增加外键约束

行为说明
NO ACTION删除、更新父表中的记录时,检查是否有关联的外键,如果有则不允许删除(与RESTRICT一致)
RESTRICT删除、更新父表中的记录时,检查是否有关联的外键,如果有则不允许删除(与NO ACTION一致)
CASCADE级联删除:删除、更新父表中的记录时,检查是否有关联的外键,如果有则一起删除
SET NULL删除、更新父表中的记录时,检查是否有关联的外键,如果有将外键置为NULL
SET DEFAULT父表变动时,子表设置成默认值(Innodb不支持)
ALTER TABLE tb_emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES tb_dept(id) ON UPDATE CASCADE ON INSERT CASCADE;

这篇关于MySQL:约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127783

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

MYSQL行列转置方式

《MYSQL行列转置方式》本文介绍了如何使用MySQL和Navicat进行列转行操作,首先,创建了一个名为`grade`的表,并插入多条数据,然后,通过修改查询SQL语句,使用`CASE`和`IF`函... 目录mysql行列转置开始列转行之前的准备下面开始步入正题总结MYSQL行列转置环境准备:mysq

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

Linux(Centos7)安装Mysql/Redis/MinIO方式

《Linux(Centos7)安装Mysql/Redis/MinIO方式》文章总结:介绍了如何安装MySQL和Redis,以及如何配置它们为开机自启,还详细讲解了如何安装MinIO,包括配置Syste... 目录安装mysql安装Redis安装MinIO总结安装Mysql安装Redis搜索Red

Mysql8.0修改配置文件my.ini的坑及解决

《Mysql8.0修改配置文件my.ini的坑及解决》使用记事本直接编辑my.ini文件保存后,可能会导致MySQL无法启动,因为MySQL会以ANSI编码读取该文件,解决方法是使用Notepad++... 目录Myhttp://www.chinasem.cnsql8.0修改配置文件my.ini的坑出现的问题

MySQL8.0找不到my.ini如何解决

《MySQL8.0找不到my.ini如何解决》在配置MySQL主从复制时,发现找不到my.ini配置文件,通过检查路径和打开隐藏文件夹,最终在C:ProgramDataMySQLMySQLSer... 目录问题描述解决方法总结问题描述今天在配置mysql主从复制的时候发现,找不到my.ini这个配置文件。

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件