【mysql】约束、外键约束、多对多关系

1、约束

DROP TABLE IF EXISTS emp;-- 员工表
CREATE TABLE emp (id INT PRIMARY KEY auto_increment, -- 员工id,主键且自增长ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一joindate DATE NOT NULL, -- 入职日期,非空salary DOUBLE(7, 2) NULL, -- 工资,非空bonus DOUBLE(7, 2) DEFAULT 0 -- 奖金,如果没有奖金默认为0
);INSERT INTO emp(id, ename, joindate, salary, bonus) values (1, '张三', '1999-11-11', 8800, 5000);show databases;show tables;select * from emp;-- 演示主键约束:非空且唯一
INSERT INTO emp(id, ename, joindate, salary, bonus) values (null, '张三', '1999-11-11', 8800, 5000);INSERT INTO emp(id, ename, joindate, salary, bonus) values (1, '张三', '1999-11-11', 8800, 5000);INSERT INTO emp(id, ename, joindate, salary, bonus) values (2, '李四', '1999-11-11', 8800, 5000);-- 演示	非空约束
INSERT INTO emp(id, ename, joindate, salary, bonus) values (3, null, '1999-11-11', 8800, 5000);-- 演示	非唯一约束
select * from emp;
INSERT INTO emp(id, ename, joindate, salary, bonus) values (3, '李四', '1999-11-11', 8800, 5000);-- 演示	默认约束
INSERT INTO emp(id, ename, joindate, salary) values (3, '王五', '1999-11-11', 8800);-- 演示	主键自增
INSERT INTO emp(ename, joindate, salary) values ('张三', '1999-11-11', 8800);
INSERT INTO emp(ename, joindate, salary) values ('李四', '1999-11-11', 8800);
INSERT INTO emp(ename, joindate, salary) values ('王五', '1999-11-11', 8800);
INSERT INTO emp(ename, joindate, salary) values ('赵六', '1999-11-11', 8800);

2、外键约束

DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS emp;-- 部门表
CREATE TABLE dept (id int primary key auto_increment,dep_name varchar(20),addr varchar(20)
);-- 员工表
CREATE TABLE emp (id int primary key auto_increment,name varchar(20),age int,dep_id int,-- 添加外键 dep_id, 关联 dept 表的id主键CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)-- CONSTRAINT fk_emp_dept FOREIGN KEY (dep_id) REFERENCES dept(id)
);-- 添加 2 个部门
insert into dept (dep_name, addr) values
('研发部', '广州'), ('销售部', '深圳');-- 添加员工, dep_id 表示员工所在的部门
insert into emp (name, age, dep_id) values
('张三', 20, 1),
('李四', 20, 1),
('王五', 20, 1),
('赵六', 20, 2),
('孙七', 22, 2),
('周八', 18, 2);-- 查询
select * from emp;
select * from dept;-- 直接删不掉
delete from dept WHERE id = 1;-- 需要先删除对外键的依赖才能删除
delete from emp WHERE dep_id = 1;
delete from dept WHERE id = 1;-- 删除外键
alter table emp drop foreign key fk_emp_dept;desc emp;-- 创建完成表后, 添加外键
alter table emp add constraint fk_emp_dept foreign key(dep_id) REFERENCES dept(id);

3、多对多的关系

DROP TABLE IF EXISTS tb_order;
DROP TABLE IF EXISTS tb_goods;-- 订单表
CREATE TABLE tb_order (id int primary key auto_increment,payment double(10, 2),payment_type TINYINT,status TINYINT
);-- 商品表
CREATE TABLE tb_goods (id int primary key auto_increment,title varchar(100),price double(10, 2)
);-- 订单商品中间表
CREATE TABLE tb_order_goods (id int primary key auto_increment,order_id int,goods_id int,count int
);-- 建表完后,添加外键
alter table tb_order_goods add constraint fk_order_id foreign key(order_id) REFERENCES tb_order(id);
alter table tb_order_goods add constraint fk_goods_id foreign key(goods_id) REFERENCES tb_goods(id);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM+Netty项目结合思路

最近正忙于搬家,面试,整理团队开发计划等工作,所以没有什么时间登陆个人公众号,今天上线看到有粉丝想了解下Netty结合通用SSM框架的案例,由于公众号时间限制,我不能和此粉丝单独沟通,再此写一篇…

[6]Windows内核情景分析 --APC

APC:异步过程调用。这是一种常见的技术。前面进程启动的初始过程就是:主线程在内核构造好运行环境后,从KiThreadStartup开始运行,然后调用PspUserThreadStartup,在该线程的apc队列中插入一个APC:LdrInitial…

THYMELEAF 如何用TH:IF做条件判断

TestController 增加一个布尔值数据,并且放在model中便于视图上获取 package com.how2java.springboot.web; import java.util.ArrayList; import java.util.Date; import java.util.List;import org.springframework.stereotype.Controller; import org.springfr…

【mysql】多表查询、左外连接、内连接、练习题

多表查询 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FBdzXkoQ-1659581225088)(C:\Users\L00589~1\AppData\Local\Temp\1659337934641.png)] 左外连接&右外连接 -- 查询emp表所有数据和对应的部门信息 select * from emp left join dept o…

noi2018

day0 笔试没啥问题,基本都是100 day1 时间有点紧,念了2h题目,能写80848,第一题不会可持久化所以只能暴力。第二题感觉没第三个好做。第三题sa乱搞,随机串只hash长度小于20的。 最后几分钟才改过了所有小样例&#xff0…

Python自建collections模块

本篇将学习python的另一个内建模块collections,更多内容请参考:Python学习指南 collections是Python内建的一个集合模块,提供了许多有用的集合类。 namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维左边就可以表示成:…

Thymeleaf th:include、th:replace使用

最近做到页面数据展示分页的功能,由于每个模块都需要分页,所以每个页面都需要将分页的页码选择内容重复的写N遍,如下所示: 重复的代码带来的就是CtrlC,CtrlV ,于是了解了一下thymeleaf的fragment加载语法以及th:includ…

(OS X) OpenCV架构x86_64的未定义符号:错误(OpenCV Undefined symbols for architecture x86_64: error)...

原地址:http://www.it1352.com/474798.html 错误提示如下: Undefined symbols for architecture x86_64:"cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:_main in test-41a30e.o"cv::namedWindow(std::__1::basic…

【算法】大根堆

const swap (arr, i, j) > {const tmp arr[i];arr[i] arr[j];arr[j] tmp; } const heapInsert (arr , i) > { // 插入大根堆的插入算法while(arr[i] > arr[Math.floor((i - 1) / 2]) {swap(arr, i, Math.floor((i - 1) / 2);i Math.floor((i - 1) / 2; } } cons…

[CF1082E] Increasing Frequency

Description 给定一个长度为 \(n\) 的数列 \(a\) ,你可以任意选择一个区间 \([l,r]\) ,并给区间每个数加上一个整数 \(k\) ,求这样一次操作之后数列中最多有多少个数等于 \(c\)。 \(n,c,a_i\leq 10^5\) Solution 假设当前选择区间的右端点为 …

Thymeleaf select 使用 和多select 级联选择

1.使用select 并且回绑数据; 页面&#xff1a; 状态&#xff1a; <select name"status" th:field"*{status}" id"idstatus" class"input-select" th:value"*{status}"> <option value"">--请选择-…

Switch语句的参数是什么类型的?

在Java5以前&#xff0c;switch(expr)中&#xff0c;exper只能是byte&#xff0c;short&#xff0c;char&#xff0c;int类型。 从Java5开始&#xff0c;java中引入了枚举类型&#xff0c;即enum类型。 从Java7开始&#xff0c;exper还可以是String类型。 switch关键字对于多数…

【LOJ】#2184. 「SDOI2015」星际战争

题解 直接二分然后建图跑网络流看看是否合法即可 就是源点向每个激光武器连一条二分到的时间激光武器每秒攻击值的边 每个激光武器向能攻击的装甲连一条边 每个装甲向汇点连一条装甲值的边 代码 #include <bits/stdc.h> #define fi first #define se second #define pii …

表达式符号

Thymeleaf对于变量的操作主要有$*#三种方式&#xff1a; 变量表达式&#xff1a; ${…}&#xff0c;是获取容器上下文变量的值.选择变量表达式&#xff1a; *{…}&#xff0c;获取指定的对象中的变量值。如果是单独的对象&#xff0c;则等价于${}。消息表达式&#xff1a; #{……

Java学习的快速入门:10行代码学JQuery

生活在快速发展时代的我们&#xff0c;如果不提速可能稍不留神就被时代淘汰了。快节奏的时代成就了快餐&#xff0c;亦成就了速成教育。尤其是身处互联网行业的我们&#xff0c;更新换代的速度更是迅速&#xff0c;快速掌握一门技术已经成为潮流趋势。怎样才能快速入门学习java…

项目管理

项目先后衔接的各个阶段的全体被称为项目管理流程。项目管理流程对于一个项目能否高效的执行起到事半功倍的效果。接下来我会利用36张的ppt&#xff08;当然了这里我只用部分图片展示要不然就太多图片了&#xff09;&#xff0c;介绍项目管理的整体流程。 1.项目管理的五大过程…

docker——三剑客之Docker Machine

Docker Machine是Docker官方三剑客项目之一&#xff0c;负责使用Docker的第一步&#xff0c;在多种平台上快速安装Docker环境。它支持多种平台&#xff0c;让用户在很短时间内搭建一套Docker主机集群。Machine项目是Docker官方的开源项目&#xff0c;负责实现对Docker主机本身进…

egret:什么是脏矩形

脏矩形是2D图形性能优化一个重要的概念。Egret2.5开始脏矩形完全可以由引擎自动计算&#xff0c;即大名鼎鼎的"自动脏矩形"。 简单说脏矩形&#xff0c;就是画面刷新时&#xff0c;产生变化而需要重绘的舞台局部区域。 什么叫脏&#xff0c;即什么情况下会弄脏&#…

软件项目管理(一)

首先软件项目管理&#xff0c;什么是项目&#xff1f;什么是软件项目&#xff1f; 项目是唯一的&#xff0c;临时的&#xff0c;即在一定的时间内完成。 具体定义&#xff1a;项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。 项目的特征&#xff1a; …

strace参数

strace参数 strace参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. -F 尝试跟踪vfork调…