A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Black_Y 初级黑马   /  2018-5-9 16:02  /  867 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

MySQL多表与事务
##外键约束
```html
添加外键约束

alter table employee add foreign key (dno) references dept (did);
```
```html
设置外键为非空

alter table employee modify dno int not null;
```
##表与表之间的关系
1.一对多的关系
```html
建表原则:在多的一方创建外键指向一的一方的主键.
```
2.多对多的关系
```html
需要创建中间表,中间表中至少两个字段,分别作为外键指向多对多双方的主键.
```

3.一对一的关系
```html
唯一外键对应
假设是一对多,在多的一方创建外键指向一的一方的主键,将外键设置为unique.
主键对应
将两个表的主键建立对应关系即可.
```
```html
实现一个网上商城案例,在商城中会有用户,商品,订单,商品分类。
```

##多表查询

###1.连接查询
```html

1.1交叉连接:cross join

语法:
    select * from 表1 cross join 表2;

    select * from 表1,表2;

1.2内连接:inner join(inner是可以省略的)

1.2.1显示内连接:在SQL中显示的调用inner join 关键字
    语法:select * from 表1 inner join 表2 on 关联条件;
例如:select * from classes c inner join student s on c.cid = s.cno;

1.2.2隐式内连接:在SQL中没有调用inner join 关键字
    语法:select * from 表1,表2 where 关联条件;
例如:SELECT * FROM classes c,student s WHERE c.cid = s.cno;

1.3外连接:outer join(outer是可以省略的)

1.3.1左外连接:
    语法:select * from 表1 left outer join 表2 on 关联条件;
例如:SELECT * FROM classes c LEFT OUTER JOIN student s ON c.cid = s.cno;

1.3.2右外连接:
    语法:select * from 表1 right outer join 表2 on 关联条件;
例如:select * from classes c right outer join student s on c.cid = s.cno;

```

###2.子查询
```html
    一个查询语句条件需要依赖另一个查询语句的结果.
带in的子查询
例如:查询学生生日在91年之后的班级的信息。
select * from classes where cid in (SELECT cno FROM student WHERE birthday > '1991-01-01');

带exists的子查询
例如:查询学生生日大于91年1月1日,如果记录存在,前面的SQL语句就会执行
select * from classes where exists (SELECT cno FROM student WHERE birthday > '1991-01-01');

带any的子查询
例如:SELECT * FROM classes WHERE cid > ANY (SELECT cno FROM student );

带all的子查询
例如:SELECT * FROM classes WHERE cid > ALL (SELECT cno FROM student);



```
###重置MySQL密码
1.停止MySQL服务
2.在cmd下启动MySQL服务
3.重新开启cmd的命令行
4.修改root的密码
5.结束MySQL的进程
6.重新启动MySQL的服务


##事务的概述
事物:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要摸全部成功,要摸全部失败.
##事务的特性:

```
原子性:事务的不可分割,组成事务的各个逻辑单元不可分割.
一致性:事务执行的前后,数据完整性保持一致.
隔离性:事务执行不应该受到其他事务的干扰.
持久性:事务一旦结束,数据就持久化到数据库中.
```
##事务的隔离级别
```
read uncommitted :脏读,不可重复读,虚读都有可能发生
read committed   :避免脏读.但是不可重复读和虚读是有可能发生.
repeatable read  :避免脏读和不可重复读,但是虚读有可能发生.
serializable     :避免脏读,不可重复读,虚读.
```







0 个回复

您需要登录后才可以回帖 登录 | 加入黑马