Mysql数据库设计和事务
一对一 在任意一方建立外键,关联另一方主键
一对多 在多的一方建立外键关联另一方的主键
多对多 1.建立中间表 2.中间表至少包含2个外键,分别关联双方主键
内连接 1. 隐式连接 select * from emp,dept where emp.dep_id=dept.did
2.显式连接 select * from emp(inner)join dept on emp.dep_id=dept.did
外连接 1. 左外连接 select * from emp left join dept on emp.dep_id=dept.did
2.右外连接 select * from emp right join dept on emp.dep_id=dept.did
子查询
- 单行单列
select 字段列表 from 表名 where 字段名=(子查询)
- 多行单列
select 字段列表 from 表名 where 字段名 in (子查询)
- 多行多列
select 字段列表 from (子查询) where 条件
select emp.id,emp.ename,emp.salary,job.jname,job.description from emp,job where emp.job_id=job.id
select emp.id,emp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc from emp,job,dept where emp.job_id=job.id and emp.dept_id=dept.id
select emp.ename,emp.salary,t1.grade,t1.losalary,t1.hisalary from emp,salarygrade t1 where emp.salary>=t1.losalary and emp.salary<t1.hisalary
select t1.ename,t1.salary,t1.jname,t1.description,t1.dname,t1.loc,t2.grade from (select emp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc from emp,job,dept where emp.job_id=job.id and emp.dept_id=dept.id) t1,salarygrade t2 where t1.salary>=t2.losalary and t1.salary<t2.hisalary
先查询部门编号,名称,位置,再子查询部门人数人数
5. select dept.id,count(*) from emp,dept where emp.dept_id=dept.id GROUP BY dept.id
6. select dept.id,dept.dname,dept.loc,t1.count from (select dept_id,count(*) count from emp GROUP BY dept_id) t1,dept where t1.dept_id=dept.id
事务 一组数据库操作命令(同时成功或同时失败)
一个不可分割的工作逻辑单元
开启事务 Begin
提交事务 commit
回滚事务 rollback
四大特征:(ACID)
原子性:事务要么同时成功,要么同时失败
一致性:事务完成时,所有数据保持一致状态
隔离性:多个事务之间,操作的可见性
持久性:事务一旦提交或回滚,对数据的改变是永久的