MySQL多表
一、外键
1.外键:链接两张表的字段,通过主表的主键和从表的外键来描述主外键关系,呈现的是一对多的关系。例如:商品类别(一)对商品(多),主表:商品类别表,从表:商品表。
2.外键的特点:从表外键的值是对主表主键的引用、从表外键类型必须与主表主键类型一致
3.声明外键约束
语法:alter table (从表) add [constraint] (外键名称) foreign key (从表外键字段名) references 主表 (主表的主键)
例如:(1).ALTER TABLE product(从表) ADD CONSTRAINT cid(外键名称) FOREIGN KEY (cid)(从表外键字段名) REFERENCES category(主表) (cid)(主表的主键);
(2). ALTER TABLE product ADD FOREIGN KEY (cid) REFERENCES category (cid);
[外键名称]用于删除外键约束,一般建议”_fk”结尾
alter table 从表 drop foreign key 外键名称;
3. 使用外键的目的:保证数据完整性
4.注意事项:从表外键不能添加主表中不存在的记录、主表不能删除从表中已经引用的记录
二、表与表之间的关系
表与表之间的关系,就是表与表数据之间的关系。
1. 一对多关系:
常见实例:客户和订单,分类和商品,部门和员工
一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
语法:ALTER TABLE product ADD FOREIGN KEY (cid) REFERENCES category (cid);
2. 多对多关系:
常见实例:学生和课程,商品和订单,人和角色
多对多建表原则:需要创建第三张表,中间表至少要有两个字段,这两个字段分别作为外键指向各自一方的主键(就是将一个多对多拆分成两个一对多)
两张表分别都是主表,第三张表为从表,提供两个字段,都是外键。
语法:alter table 从表(stu_course) add foreign key(sno) references stu(sid);
alter table 从表(stu_course) add foreign key(cno) references course(cid);
3. 一对一关系:(了解)
在实际开发中应用不多,因为一对一可以创建成一张表
常见实例:公司和地址
两种原则:外键唯一,外键是主键
三、操作
1.多表查询
(1).交叉连接查询(得到两个表的乘积,基本不使用)
select * from A,B;
(2).内连接查询(使用关键字:inner join -- inner可以省略)
隐式内连接:select * from A,B where 条件;
例如:select * from category c,product p where c.cid=p.cid;
显式内连接:select * from A inner join B on 条件;
例如:select * from category as c inner join product as p on p.cid=c.cid;
(3).外连接查询(使用关键字outer join --outer可以省略)
左外连接:left outer join
select * from A left outer join B on 条件;
例如:select * from category c left join product p on p.cid=c.cid;
右外连接:right outer join
select * from A right outer join B on 条件;
例如:select * from category c right join product p on p.cid=c.cid;
内连接和外连接的区别:
左外连接:查询的是左表全部及两个表的交集
内连接:查询的是两个表的交集
右外连接:查询的是右表全部及两个表的交集
2.子查询
一条select语句结果作为另一条select语法的一部分(查询条件、查询结果、表等)
例如:查询化妆品分类上架商品详情
select * from product where cid =(select cid from category where cname='化妆品');
MySQL多表的更多相关文章
- mysql向表中某字段后追加一段字符串:
mysql向表中某字段后追加一段字符串:update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串update table_n ...
- oracle与mysql创建表时的区别
oracle创建表时,不支持在建表时同时增加字段注释.故采用以下方式: #创建表CREATE TABLE predict_data as ( id integer ), mid ), time dat ...
- mysql数据库表的自增主键号不规律,重新排列
mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...
- 基于表的数据字典构造MySQL建表语句
表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...
- 用户中心mysql数据库表结构的脚本
/* Navicat MySQL Data Transfer Source Server : rm-m5e3xn7k26i026e75o.mysql.rds.aliyuncs.com Source S ...
- MySQL InnoDB表--BTree基本数据结构
MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据. 我最开始是搞Or ...
- mysql数据库表结构导出
mysql数据库表结构导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localh ...
- Mysql连表之多对多
说明 这里的文章是接着前面 Mysql连表一对多 写的. 连表多对多 可以理解成一夫多妻和一妻多夫. 男人表: nid name 1 xxx 2 yyy 3 zzz 女人表: nid name 1 a ...
- 在MySQL向表中插入中文时,出现:incorrect string value 错误
在MySQL向表中插入中文时,出现:incorrect string value 错误,是由于字符集不支持中文.解决办法是将字符集改为GBK,或UTF-8. 一.修改数据库的默认字符集 ...
随机推荐
- mount: wrong fs type
# mount -t nfs -o nolock 192.168.1.84:/home/jason/filesys /mnt/nfsmount: wrong fs type, bad option, ...
- 2016/05/06 Sublime Text 3 常用插件以及安装方法(转)
http://www.cnsecer.com/460.html 安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手点下页面的广告吧, ...
- high-level operations on files and collections of files
11.10. shutil — High-level file operations — Python 3.6.5 documentation https://docs.python.org/3/li ...
- Flame Graphs
http://www.brendangregg.com/flamegraphs.html Flame graphs are a visualization of profiled software, ...
- CRM IFD 部署在同一台服务器上遇到的错误
为了学习Dynamics 365,在阿里去上部署一台Dynamics 365服务器.然后实现了IFD 部署.学习的路线还之前的CRM 版本大致一样,这里只是记录一下我遇到的问题及解决问题的思路. 学习 ...
- Buildroot構建指南--Overview【转】
本文转载自:http://www.unixlinux.online/unixlinux/linuxjc/gylinux/201703/65218.html Buildroot構建指南--Overvie ...
- 并不对劲的bzoj1861: [Zjoi2006]Book 书架
传送门-> 这题的正确做法是splay维护这摞书. 但是并不对劲的人选择了暴力(皮这一下很开心). #include<algorithm> #include<cmath> ...
- CodeForces-204E:Little Elephant and Strings (广义后缀自动机求出现次数)
The Little Elephant loves strings very much. He has an array a from n strings, consisting of lowerca ...
- AutoIT:为文件夹下面的文件批量改名
以前用Ruby脚本,对于中文,数字结合的文件名,修改名字也不是非常简单,需要修改字符集,可是用autoit来实现,也挺简单的,并且可以替换已有文件名中的汉字部分. $filepath = " ...
- Memcache存储大数据的问题(大于1m)
Memcached存储单个item最大数据是在1MB内,如果数据超过1M,存取set和get是都是返回false,而且引起性能的问题. 我们之前对排行榜的数据进行缓存,由于排行榜在我们所有sql se ...