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='化妆品');
最新文章
- 详解:基于WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器功能
- Linux下不同机器之间拷贝文件
- CentOS卸载OpenJDK并安装Sun JDK
- SAP系统更改小数点显示问题
- The index also can be used for LIKE comparisons if the argument to LIKE is a constant string that does not start with a wildcard character.
- git的忽略文件和删除文件操作
- js实现对数据库的增删查改
- MVC-Html.ActionLink的几种写法
- win7 64位 VS2010调试提示“ORA-12154: TNS: 无法解析指定的连接标识符”的解决方法
- ajax大数据排队导出+进度条
- linux服务之NFS和SAMBA服务
- NSIS:静默释放文件并运行 制作绿色单文件软件
- hdu_5044_Tree(树链剖分)
- Java 垃圾回收机制学习
- 我的Java开发学习之旅------&;gt;Base64的编码思想以及Java实现
- python正则实现简单计算器
- 用java理解程序逻辑小结
- sublime text 3 ,React,html元素自动补全方法(用Emmet写法写jsx中的html)
- Java类库和常用类库介绍
- 多用StringBuilder,少用字符串拼接
热门文章
- debug找到source lookup path以及,debug跑到另外的解决办法
- POJ 1927 Area in Triangle(计算几何)
- ASP.NET MVC 原理
- Google Gson使用简介
- Node.js 101(2): Promise and async
- [10.27_P2] 统计损失 (简单树形DP)
- 数据库sqlite3的使用-代码实例应用
- bzoj 4753 最佳团体 —— 01分数规划+树形背包
- 洛谷 P3952 时间复杂度【模拟】
- P2210 Haywire(A*)