数据库—多表查询、事务

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;

(1).多表查询——内连接、外连接

2.事务
(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
posted @ 2024-10-21 15:58  茆伟昊  阅读(12)  评论(0编辑  收藏  举报