1. 多表查询简介:
    设计员工和部门两个表
点击查看代码
# 创建部门表
CREATE TABLE dept(
did INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(20)
);

# 创建员工表
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1), -- 性别
salary DOUBLE, -- 工资
join_date DATE, -- 入职日期
dep_id INT,
FOREIGN KEY (dep_id) REFERENCES dept(did) -- 外键,关联部门表(部门表的主键)
);

-- 添加部门数据
INSERT INTO dept (dNAME) VALUES ('研发部'),('市场部'),('财务部'),('销售部');

-- 添加员工数据
INSERT INTO emp(NAME,gender,salary,join_date,dep_id) VALUES
('孙悟空','男',7200,'2013-02-24',1),
('猪八戒','男',3600,'2010-12-02',2),
('唐僧','男',9000,'2008-08-08',2),
('白骨精','女',5000,'2015-10-07',3),
('蜘蛛精','女',4500,'2011-03-14',1),
('小白龙','男',2500,'2011-02-14',null);

如果多表查询使用:select * from emp , dept;
那么会查询到24条结果,其中包含错误无效的数据,原理:-- 笛卡尔积:从A,B两个集合取所有集合情况,也就是6条员工数据和4条部门数据的全部组合
因此查询时需要限制条件:select * from emp , dept where emp.dep_id = dept.did;
2.多表查询--内连接&&外连接


3.子连接

  • 事务
  1. 简介:
  • 数据库的事务是一种机制,一个操作序列,包含了一组数据库操作命令。
  • 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即一组数据库命令要么同时成功,要么同时失败。
    2.事务的操作语句-- 三个命令:

    (事务的操作是临时操作,只有当提交事务时之前的操作才会变为永久操作,否则回滚事务,之前的操作全部取消。)
    我的实例:(李四向张三转账)
点击查看代码
CREATE TABLE account(
id int PRIMARY KEY auto_increment,
name varchar(10),
money double(10,2)
);
-- 添加数据
INSERT INTO account(name,money) values('张三',1000),('李四',1000);

select * from account;
update account set money = 1000;

-- 转账操作
-- 开启事务
BEGIN;
-- 查询李四余额
select money from account where name = '李四';
-- 李四金额减500
update account set money = money - 500 where name = '李四';
-- 出错了... 
-- 张三金额加500
update account set money = money + 500 where name = '张三';
-- 提交事务
commit;
-- 回滚事务
ROLLBACK;
开始表中张三李四余额都为1000; 从begin开始事务,如果出现错误那么该表访问结果为张三余额1000,李四余额500 但是从另一个查询中发现数据没变(因为事务begin开始后的操作都为临时操作,只有遇到提交事务才会永久改变)张三李四都为1000 此时出错后进行回滚事务:rollback 表中数据变回都为1000 当把错误清除后进行提交事务:commit 发现两个查询中都已转账成功:张三余额1500,李四余额500 3.事务的四大特征: ![](https://img2024.cnblogs.com/blog/3475178/202410/3475178-20241010195658946-607263121.png)
posted on 2024-10-10 19:47  -MARIO  阅读(11)  评论(0编辑  收藏  举报