mysql学习⼿册
约束简述mvc三层架构
外键约束
为什么要有外键约束?
在我们以后开发项⽬的过程中,操作的肯定不⽌⼀张表数据,所以当表与表之间的数据有相关联性的时候,如果没有相关的数据约束,则⽆法保证数据的准确性!
外键约束的作⽤
让表和表之间产⽣关系,从⽽保证数据的准确性!
建表时添加外键约束
CREATE TABLE表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
CONSTRAINT外键名FOREIGN KEY (本表外键列名) REFERENCES主表名(主表主键列名)
);
建表后添加外键约束
ALTER TABLE表名ADD CONSTRAINT外键名FOREIGN KEY (本表外键列名) REFERENCES主表名(主键列名);
删除外键约束
ALTER TABLE表名DROP FOREIGN KEY外键名;
外键的级联更新和级联删除
什么是级联更新和级联删除?
如图:⽐如我有⼀张⽤户表,有⼀张订单表,订单表关联着⽤户表,⼀个⽤户可以有好⼏个订单,如果我要把⽤户表的某个⽤户的信息删掉或者更新,我也希望与该⽤户关联的数据表的数据会也随着删除或者更新。所以这就是及联删除和及联更新。
添加外键约束,同时添加级联更新
ALTER TABLE表名ADD CONSTRAINT外键名FOREIGN KEY (本表外键列名) REFERENCES主表名(主键列名) ON UPDATE CASCADE;
添加外键约束,同时添加级联删除
ALTER TABLE表名ADD CONSTRAINT外键名FOREIGN KEY (本表外键列名) REFERENCES主表名(主键列名) ON DELETE CASCADE;
添加外键约束,同时添加级联更新和级联删除
ALTER TABLE表名ADD CONSTRAINT外键名FOREIGN KEY (本表外键列名) REFERENCES主表名(主键列名) ON UPDATE CASCADE ON DELETE CASCADE;
提⽰:外键名你是可以根据⾃⼰的情况随便取的。
多表设计
多表的概念
说⽩了就是多张表数据,⽽表与表直接是有⼀定的关联关系,这种关联关系是通过外键约束实现。
⼀对⼀
应⽤场景:
⼈和⾝份证。⼀个⼈只有⼀个⾝份证,⼀个⾝份证只能对应⼀个⼈!
建表原则:
在任意⼀个表建⽴外键,去关联另外⼀个表的主键
图解:
⼀对多
应⽤场景:
⽤户和订单。⼀个⽤户可以有多个订单!商品分类和商品。⼀个分类下可以有多个商品!
建表原则:
在多的⼀⽅,建⽴外键约束,来关联⼀的⼀⽅主键
图解:
多对多
应⽤场景:
学⽣和课程。⼀个学⽣可以选择多个课程,⼀个课程也可以被多个学⽣选择!
建表原则:
需要借助第三张表中间表,中间表⾄少包含两个列,这两个列作为中间表的外键,分别关联两张表的主键图解:
多表查询
内连接查询
查询原理:
内连接查询的是两张表有交集的部分数据(有主外键关联的数据)
显式内连接查询语法:
SELECT列名FROM表名1 [INNER]JOIN表名2 ON条件;
隐式内连接查询语法:
SELECT列名FROM表名1,表名2 WHERE条件;
多表查询-外连接查询
左外连接
查询原理:
查询左表的全部数据,和左右两张表有交集部分的数据
左外连接查询语法:
SELECT列名FROM表名1 LEFT[OUTER]JOIN表名2 ON条件;
右外连接
查询原理:
查询右表的全部数据,和左右两张表有交集部分的数据右外连接查询语法:SELECT列名FROM表名1 RIGHT[OUTER]JOIN表名2 ON条件;
多表查询-⼦查询
什么是⼦查询?
查询语句中嵌套了查询语句。我们就将嵌套查询称为⼦查询!
⾃查询的三种结果:
1、结果是单⾏单列的可以作为条件,使⽤运算符进⾏判断!
语法:
SELECT列名FROM表名WHERE列名=(SELECT聚合函数(列名) FROM表名[WHERE 条件]);
2、结果是多⾏单列的可以作为条件,使⽤运算符in或not in进⾏判断!
语法:
SELECT列名FROM表名WHERE列名[NOT]IN (SELECT列名FROM表名[WHERE 条件]);洒水车按钮图解
3、结果是多⾏多列的可以作为⼀张虚拟表参与查询!
语法:
SELECT列名FROM表名[别名],(SELECT列名FROM表名[WHERE 条件]) [别名][WHERE 条件];
语法提⽰:带[ ]表⽰可要可不要。
多表查询练习
为了巩固⼤家对查询语句的掌握,还是需要多多联系
建表语句:
-- 创建user表
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT, -- ⽤户id
NAME VARCHAR(20), -- ⽤户姓名
age INT-- ⽤户年龄
);
-- 添加数据
INSERT INTO USER VALUES (1,'aa',23);
mysql语句多表查询INSERT INTO USER VALUES (2,'狗蛋',24);
INSERT INTO USER VALUES (3,'阿花',25);
INSERT INTO USER VALUES (4,'⼩明',26);
-- 订单表
CREATE TABLE orderlist(
id INT PRIMARY KEY AUTO_INCREMENT, -- 订单id
number VARCHAR(30), -- 订单编号
uid INT, -- 外键字段
CONSTRAINT ou_fk1 FOREIGN KEY (uid) REFERENCES USER(id) );
-- 添加数据
INSERT INTO orderlist VALUES (1,'javaxuexi001',1);
INSERT INTO orderlist VALUES (2,'javaxuexi002',1);
INSERT INTO orderlist VALUES (3,'javaxuexi003',2);
INSERT INTO orderlist VALUES (4,'javaxuexi004',2);
INSERT INTO orderlist VALUES (5,'javaxuexi005',3);
INSERT INTO orderlist VALUES (6,'javaxuexi006',3);
INSERT INTO orderlist VALUES (7,'javaxuexi007',NULL);
INSERT INTO orderlist VALUES (7,'javaxuexi008',NULL);
INSERT INTO orderlist VALUES (7,'javaxuexi009',NULL);
-- 商品分类表
CREATE TABLE category(
id INT PRIMARY KEY AUTO_INCREMENT, -- 商品分类id
NAME VARCHAR(10) -- 商品分类名称
);
intellij是什么软件-- 添加数据
INSERT INTO category VALUES (1,'⼿机数码');
INSERT INTO category VALUES (2,'电脑办公');
INSERT INTO category VALUES (3,'烟酒茶糖');
INSERT INTO category VALUES (4,'鞋靴箱包');
-- 商品表
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT, -- 商品id
NAME VARCHAR(30), -- 商品名称
cid INT, -- 外键字段
CONSTRAINT cp_fk1 FOREIGN KEY (cid) REFERENCES category(id) );
-- 添加数据
INSERT INTO product VALUES (1,'华为⼿机',1);
INSERT INTO product VALUES (2,'⼩⽶⼿机',1);
INSERT INTO product VALUES (3,'联想电脑',2);
INSERT INTO product VALUES (4,'苹果电脑',2);
INSERT INTO product VALUES (5,'中华⾹烟',3);
INSERT INTO product VALUES (6,'⽟溪⾹烟',3);
INSERT INTO product VALUES (7,'计⽣⽤品',NULL);
-- 中间表
CREATE TABLE us_pro(
upid INT PRIMARY KEY AUTO_INCREMENT, -- 中间表id
uid INT, -- 外键字段。需要和⽤户表的主键产⽣关联
pid INT, -- 外键字段。需要和商品表的主键产⽣关联
CONSTRAINT up_fk1 FOREIGN KEY (uid) REFERENCES USER(id), CONSTRAINT up_fk2 FOREIGN KEY (pid) REFERENCES product(id) );
-- 添加数据
INSERT INTO us_pro VALUES (NULL,1,1);
INSERT INTO us_pro VALUES (NULL,1,2);
INSERT INTO us_pro VALUES (NULL,1,3);
INSERT INTO us_pro VALUES (NULL,1,4);
INSERT INTO us_pro VALUES (NULL,1,5);
INSERT INTO us_pro VALUES (NULL,1,6);
INSERT INTO us_pro VALUES (NULL,1,7);
INSERT INTO us_pro VALUES (NULL,2,1);
INSERT INTO us_pro VALUES (NULL,2,2);
INSERT INTO us_pro VALUES (NULL,2,3);
INSERT INTO us_pro VALUES (NULL,2,4);
INSERT INTO us_pro VALUES (NULL,2,5);
INSERT INTO us_pro VALUES (NULL,2,6);
INSERT INTO us_pro VALUES (NULL,2,7);
INSERT INTO us_pro VALUES (NULL,3,1);
INSERT INTO us_pro VALUES (NULL,3,2);
INSERT INTO us_pro VALUES (NULL,3,3);
INSERT INTO us_pro VALUES (NULL,3,4);
INSERT INTO us_pro VALUES (NULL,3,5);
INSERT INTO us_pro VALUES (NULL,3,6);
INSERT INTO us_pro VALUES (NULL,3,7);
INSERT INTO us_pro VALUES (NULL,4,1);
INSERT INTO us_pro VALUES (NULL,4,2);
INSERT INTO us_pro VALUES (NULL,4,3);
INSERT INTO us_pro VALUES (NULL,4,4);
INSERT INTO us_pro VALUES (NULL,4,5);
INSERT INTO us_pro VALUES (NULL,4,6);
INSERT INTO us_pro VALUES (NULL,4,7);
多表查询语句练习
1.查询⽤户的编号、姓名、年龄。订单编号
/*
分析
⽤户的编号、姓名、年龄 user表订单编号 orderlist表
条件:user.id=orderlist.uid
*/
SELECT
u.id,
u.name,
u.age,
o.number
FROM
USER u,
orderlist o
WHERE
u.id=o.uid;
2.查询所有的⽤户。⽤户的编号、姓名、年龄。订单编号
/*
分析
⽤户的编号、姓名、年龄 user表订单编号 orderlist表
条件:user.id=orderlist.uid
查询所有的⽤户,左外连接
*/
SELECT
u.id,
u.name,
u.age,
o.number
FROM
USER u
LEFT OUTER JOIN
orderlist o
ON
u.id=o.uid;
matlab教程b站3.查询所有的订单。⽤户的编号、姓名、年龄。订单编号
/
*
分析
⽤户的编号、姓名、年龄 user表订单编号 orderlist表
条件:user.id=orderlist.uid
查询所有的订单,右外连接
*/
SELECT
u.id,
u.name,
python编程方向u.age,
o.number
FROM
USER u
RIGHT OUTER JOIN
orderlist o
ON
u.id=o.uid;
4.查询⽤户年龄⼤于21岁的信息。显⽰⽤户的编号、姓名、年龄。订单编号/*
分析
⽤户的编号、姓名、年龄 user表订单编号 orderlist表
条件:user.id=orderlist.uid AND user.age > 23
*/
SELECT
u.id,
u.name,
u.age,
o.number
FROM
USER u,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论