约束

  • 概述
  • 约束展示
  • 外键约束

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

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



-- ---------------------------------------------------------------约束展示-------------------------------------
create table user(id     int key auto_increment             comment '主键',name   varchar(10) not null unique        comment '姓名',age    int check ( age > 0 && 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', '男'), ('Tom2', 25, '0', '男');
insert into user(name, age, status, gender) values ('Tom3', 19, '1', '男');insert into user(name, age, status, gender) values (null, 19, '1', '男');
insert into user(name, age, status, gender) values ('Tom4', 18, '1', '男');insert into user(name, age, status, gender) values ('Tom5', -1, '1', '男');
insert into user(name, age, gender) values ('Tom5', 18, '男');-- 约束
-- 1、概述
-- 2、约束演示
-- 3、外键约束
-- 约束是作用于表中字段上的队则,用于限制存储在表中的数据。
-- 目的:保证数据库中数据的正确,有效和完整性
-- 分类
-- 外键约束
-- 外键用来让两张表的数据之间建立联系,从而保证数据的一致性和完整性。
-- 外键的删除和更新行为-- ---------------------------------------------------------约束(外键)--------------------------------------
-- 准备数据
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, '总经办');create table emp(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 emp(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);-- 添加外键
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);alter table emp drop foreign key fk_emp_dept_id;-- 外键的删除和更新行为
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on UPDATE cascade on DELETE cascade ;alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on UPDATE set null on delete set null ;

多表查询

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  • 一对多
  • 多对多
  • 一对一



-- 多表查询
-- 多表关系
-- 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,
-- 基本上分为三种:
-- 一对多
-- 多对多
-- 一对一
-- 1、一对多
-- 2、多对多
-- 3、一对一
-- ----------------------------------------------------多表关系演示-------------------------
create table student(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',no varchar(10) comment '学号'
) comment '学生表';
insert into student values (null, '黛绮丝', '2000100101'), (null, '谢逊', '2000100102'), (null, '殷天正', '2000100103'),(null, '韦一笑', '2000100104');create table ccourse(id int auto_increment primary key comment '主键ID',name varchar(10) comment '课程名称'
) comment '课程表';
insert into ccourse values (null, 'Java'), (null, 'PHP'), (null, 'MySQL'), (null, 'Hadoop');create table student_course(id int auto_increment comment '主键' primary key ,studentid int not null comment '学生ID',courseid int not null comment '课程ID',constraint fk_courseid foreign key (courseid) references ccourse(id),constraint fk_studentid foreign key (studentid) references student(id)
) comment '学生课程中间表';
insert into student_course values (null, 1, 1),(null, 1, 3), (null, 2, 2),(null, 2, 3),(null, 3, 4);-- ----------------------------------------一对一------------------------------------------------------------------------
create table tb_user(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',age int comment '年龄',gender char(1) comment '1: 男,2:女',phone char(11) comment '手机号'
) comment '用户基本信息表';create table tb_user_edu(id int auto_increment primary key comment '主键ID',degree varchar(20) comment '学历',major varchar(50) comment '专业',primaryschool varchar(50) comment '小学',middleschool varchar(50) comment '中学',university varchar(50) comment '大学',userid int unique comment '用户ID',constraint fk_userid foreign key (userid) references tb_user(id)
) comment '用户教育表';insert into tb_user(id, name, age, gender, phone) values(null, '黄渤', 45, '1', '18800001111'),(null, '冰冰', 35, '2', '18800002222'),(null, '码云', 55, '1', '18800008888'),(null, '李彦宏', 50, '1', '18800009999');insert into tb_user_edu(id, degree, major, primaryschool, middleschool, university, userid) values(null,'本科','舞蹈','静安区第一小学','静安区第一中学','北京舞蹈学院',1),(null,'硕士','表演','朝阳区第一小学','朝阳区第一中学','北京电影学院',2),(null,'本科','英语','杭州市第一小学','杭州市第一中学','杭州师范大学',3),(null,'本科','应用数学','阳泉区第一小学','阳泉区第一中学','清华大学',4);-- 多表查询
-- 指从多张表中查询数据-- 数据准备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, '总经办'), (6, '人事部');create table emp(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 emp(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),(7, '灭绝', 60, '财务总监', 8500, '2002-09-12', 1,3),(8, '周芷若', 19, '会计', 48000, '2006-06-02', 7,3),(9, '丁敏君', 23, '出纳', 5250, '2009-05-13', 7,3),(10, '赵敏', 20, '市场部总监', 12500, '2004-10-12', 1,2),(11, '鹿杖客', 56, '职员', 3750, '2006-10-13', 10,2),(12, '鹤笔翁', 19, '职员', 3750, '2007-05-09', 10,2),(13, '方东白', 19, '职员', 5500, '2009-02-12', 10,2),(14, '张三丰', 88, '销售总监', 14000, '2004-10-12', 1,4),(15, '俞莲舟', 38, '销售', 4600, '2004-10-12', 14,4),(16, '宋远桥', 40, '销售', 4600, '2004-10-12', 14,4),(17, '陈友谅', 42, null, 2000, '2011-10-12', 1,null);-- 查询
select * from emp;
select * from emp, dept;
-- 多表查询,查到的是102条数据(17*6=102)笛卡尔积
-- 笛卡尔积指的是在数学中,两个集合,集合A和集合B的所有组合情况。(在多表查询时,需要消除笛卡尔积)已截图!
-- 使用以下语句消除笛卡尔积
select * from emp, dept where emp.dept_id = dept.id;

MySQL学习第三弹——约束与多表查询详解相关推荐

  1. MySQL学习记录04where条件子句、联表查询、子查询

    文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...

  2. Mysql 多表查询详解

    Mysql 多表查询详解 一.前言  二.示例 三.注意事项 一.前言  上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...

  3. mysql多表查询详解_MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  4. 小汤学编程之MySQL(三)——约束、多表查询、事务和数据库其他操作

    一.约束 1.主键约束     2.自动增长     3.非空约束     4.唯一约束     5.默认约束     6.外键约束     7.级联删除和级联更新     8.null删除和null ...

  5. mysql 三个表内连接查询_MySQL多表查询详解

    多表查询 1. 表与表之间的关系 <1> 一对一 用户表和身份信息表,用户表是主表 男人表.女人表 create table man( mid int primary key auto_i ...

  6. mysql多表查询详解

    在mysql中把查询结果去除重复记录[distinct] 如:select distinct job from emp;// 去除员工表工作字段中的重复记录 需要注意的是distinct只能出现在所有 ...

  7. 七、MySQL 多表查询详解(附练习题及答案----超详细)

    文章目录 一.笛卡尔积(或交叉连接)的理解 二.多表查询分类讲解 2.1 分类1:等值连接 vs 非等值连接 2.2 分类2:自连接 vs 非自连接 2.3 分类3:内连接 vs 外连接 2.4 SQ ...

  8. mysql单表查询详解

    文章目录 一.单表查询 1.1 创建数据库 1.2 单表查询 1.2.1 查询所有字段 1.2.2 使用通配符*查询所有字段 1.2.3 查询指定字段 1.2.4 去重distinct的使用 1.2. ...

  9. 【mysql的设计与优化专题(5)】慢查询详解

    查询mysql的操作信息 show status -- 显示全部mysql操作信息show status like "com_insert%"; -- 获得mysql的插入次数;s ...

  10. mysql 联表详解_MySQL多表查询详解

    多表查询 1. 表与表之间的关系 <1> 一对一用户表和身份信息表,用户表是主表 男人表.女人表 create table man(mid int primary key auto_inc ...

最新文章

  1. 如何在Ubuntu Linux上开采以太坊?
  2. [编程技巧] 巧用CPU缓存优化代码:数组 vs. 链表
  3. 蓝桥杯-9-1九宫格(java)
  4. HttpServlet类简介和简单用法
  5. SSH服务的渗透测试
  6. 修改 MySQL 自增ID的起始值
  7. 分布式服务下的关键技术(转)
  8. 模拟网页行为之实践四
  9. 标定精度_【杰瑞课堂】工业机器人运动精度
  10. nginx之206异常
  11. 【NOIP2016】【Luogu2010】回文日期(枚举,可以计算出部分值)
  12. I2C 时序、速率计算及intel I2C驱动
  13. 2017全国省市区县 json数据
  14. 这个双十一,我被淘宝“套娃”游戏整懵了
  15. 在未来税制下个人所得税信息管理系统建设设想
  16. tampermonkey(油猴)——去除烦人的百度搜索广告
  17. 在一起盗窃案中,法官对涉及到的四名犯罪嫌疑人A,B,C,D进行了审问.
  18. 关于出现Merge remote-tracking branch ‘origin/develop‘ into develop这种commit记录的原因
  19. 职场新人如何招架同事倚老卖老?
  20. 蓝鲸智云实现虚拟机交付(四)-配置平台自定义(CMDB)

热门文章

  1. android srgb模式,一加3固件官方更新:加入屏幕边缘防误触和sRGB显示模式功能
  2. 三星Note3开发者模式
  3. 使用http://rap2.taobao.org/写测试接口文档
  4. mplay readme
  5. MYSQL时间函数之NOW()
  6. 计算机与宽带路由的连接步骤,宽带拨号和设置路由器步骤【图】
  7. 失意的互联网人拼命叩开Web3大门
  8. 关键词排名查询-各大搜索引擎批量实时关键词排名查询
  9. 晶圆做成芯片的工艺流程
  10. 大学生做校园快递跑腿项目前景分析