首页 > 数据库 >MySQL基础-约束

MySQL基础-约束

时间:2023-02-02 11:57:22浏览次数:43  
标签:COMMENT -- 基础 外键 约束 dept MySQL employee id

1. 概念

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

2. 目的

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

3. 分类

注意:
  约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

根据需求,完成表结构的创建,需求如下图所示:

CREATE TABLE user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
--  age int check ( age > 0 && age <= 120 ) comment '年龄', -- 5.6.22CHECK 约束报错,百度提示MySQL 5.6不支持CHECK约束
    status char(1) default '1' comment '状态',
    gerder char(1) comment '性别'
)comment '用户表';

4. 外键约束

4.1 概念

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

 注意:
  目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的

4.2 准备数据

-- dept表
CREATE TABLE dept(
	id INT AUTO_INCREMENT COMMENT 'ID' PRIMARY KEY,
	name VARCHAR(50) NOT NULL COMMENT '部门名称'
)COMMENT '部门表';

INSERT INTO dept (id,name) VALUES(1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');


-- employee表
CREATE TABLE employee (
	id INT AUTO_INCREMENT COMMENT 'ID' PRIMARY KEY,
	name VARCHAR(50) NOT NULL COMMENT '姓名',
	age INT COMMENT '年龄',
	job VARCHAR(20) COMMENT '职位',
	salary INT COMMENT '薪资',
	entrydate DATE COMMENT '入职时间',
	managerid INT COMMENT '直属领导ID',
	dept_id INT COMMENT '部门ID'
)COMMENT '员工表';

INSERT INTO employee (id,name,age,job,salary,entrydate,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);  

4.3 添加外键

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

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

-- 案例:
ALTER TABLE employee ADD CONSTRAINT FK_employee_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id);

4.4 删除外键

-- 语法
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-- 案例 
ALTER TABLE employee DROP FOREIGN KEY FK_employee_dept_id;

4.5 删除/更新行为

-- 语法
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名) ON UPDATE CASCADE ON DELETE CASCADE;
-- 案例
-- 父表更新/删除行为时,子表跟随变更
ALTER TABLE employee ADD CONSTRAINT FK_employee_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE;
-- 父表更新/删除行为时,子表设置空值
ALTER TABLE employee ADD CONSTRAINT FK_employee_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id) ON UPDATE SET NULL ON DELETE SET NULL ;

标签:COMMENT,--,基础,外键,约束,dept,MySQL,employee,id
From: https://www.cnblogs.com/xmtxh/p/17085540.html

相关文章

  • Java基础-普通类、抽象类、接口类
    普通类和抽象类的区别普通类可以有普通方法,不能有抽象方法;抽象类可以有普通方法和抽象方法普通类可以实例化,抽象类不能实例化普通类必须实现抽象类的抽象方法抽象类......
  • 图文结合带你搞懂MySQL日志之General Query Log(通用查询日志)
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:KAiTO文章来源:GreatSQL社区原创往期......
  • 《区块链基础知识25讲》-第二十三讲-重构区块链
    区块链的主要冲突透明度与隐私(读取区块链数据的操作)一方面需要透明度来明确所有权,另一方面系统用户又需要有一定的隐私安全与速度(向区块链写入数据的操作)哈希难题的解决减......
  • 《区块链基础知识25讲》-第十七讲-点对点系统中数据的存储与分发
    目标区块链可看作纯粹用于实现所有权管理的分布式点对点系统,由独立的计算机组成,旨在维护存储着完整历史交易记录的账本本讲的目标就是确保组成这个点对点系统的独立计算机知......
  • python基础:sort和sorted排序
    记录下python中使用sort和sorted排序的方法 1、sortsort只能针对列表(list)进行排序,并且是对原列表进行排序,改变原列表内容>>>a=[5,6,1,2,0,8]>>>a.sort()>>>a......
  • WPF有用的最基础整理
    日常使用最多的控件有6类:1.布局控件:可以容纳多个控件或嵌套其他布局控件,例如Grid、StackPanel、DockPanel等,有共同的父类Panel2.内容控件:只能容纳一个其他控件或布局......
  • PostgreSQL学习笔记-7.基础知识:子查询、自增、PRIVILEGES 权限
    子查询子查询或称为内部查询、嵌套查询,指的是在PostgreSQL查询中的WHERE子句中嵌入查询语句。一个SELECT语句的查询结果能够作为另一个语句的输入值。子查询可以与......
  • Mysql事务
    事务的基本概念谈到事务,首先要谈到事务的ACID机制,ACID包括原子性,一致性,隔离性和永久性.原子性,分别概述一下这四个概念原子性要么全部成功,要么全部失败一致性一致性是......
  • Mysql索引相关的知识复盘一
    索引的作用和分类索引的优缺点优点:加快数据检索速率排序分组时候,使用索引将降低资源的消耗缺点:增加了索引维护的成本降低了更新的速度提高了数据维护的成本索引会占据更多的......
  • mysql命令
    一、权限1.授权grant[权限]on[库.表]to[用户名]@[IP]例:grantSYSTEM_VARIABLES_ADMINon*.*to'opsdev'@'%'2.刷新权限flushprivile......