时间:2021-07-01 10:21:17 帮助过:37人阅读
-- 张三转账 UPDATE my_account SET money = money - 1000 WHERE NAME = ‘张三‘;
-- 事务操作:1李四账户减少1000 UPDATE my_account SET money = money -1000 WHERE NAME = ‘李四‘;
SELECT * FROM my_account;
我们在开启一个客户端,会发现如下的状况。
-- 事务操纵:2张三账户增加1000 UPDATE my_account SET money = money +1000 WHERE NAME = ‘张三‘; SELECT * FROM my_account;
我们如果再开启一个客户端,会发生如下状况
-- 提交事务 COMMIT;
当提交完事务的时候,我们会发现再开启一个客户端,两边的数据是一样的。
-- 开启事务 START TRANSACTION; -- 事务处理1:张三发工资 UPDATE my_account SET money = money + 10000 WHERE NAME = ‘张三‘; -- 设置回滚点 SAVEPOINT sp1; -- 银行扣税 UPDATE my_account SET money = money - 10000 * 0.5 WHERE NAME = ‘李四‘; -- 回滚到回滚点 ROLLBACK TO sp1; -- 继续给张三扣税 UPDATE my_account SET money = money - 10000 * 0.5 WHERE NAME = ‘张三‘; -- 事务提交 COMMIT;
SHOW VARIABLES LIKE ‘autocommit‘;
SET autocommit = off;
-- 查看所有系统变量 SHOW VARIABLES;
select @@version,@@autocommit;
set 变量 = 值;
set global 变量名 = 值;
set @变量 = 值;
slect @变量;
select @变量名 := 字段名 from 数据源;-- 从字段中取值赋给变量名
select 字段名 from 数据源 [where 条件] into 变量列表
SELECT NAME FROM my_account WHERE id = 1 INTO @name; SELECT @name;
-- 临时修改语句结束符 DELIMITER 自定义符号:后续代码中只有碰到自定义符号才算结束 CREATE TRIGGER 触发器名字 触发时间 事件类型 ON 表名 FOR EACH ROW BEGIN -- 代表左大括号 开始 -- 里面就是触发器的内容:每行内容都必须使用;结束 END -- 代表右大括号 结束 -- 语句结束符 自定义符号 -- 将邻水修改修正过来 DELIMITER ;
CREATE TABLE goods( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, price DECIMAL(10,2) DEFAULT 1, inv INT COMMENT ‘库存数量‘ ); INSERT INTO goods VALUES (NULL,‘iphone6‘,2680,100); INSERT INTO goods VALUES (NULL,‘iphone6s‘,2880,100); CREATE TABLE `order`( id INT PRIMARY KEY AUTO_INCREMENT, g_id INT NOT NULL COMMENT ‘商品id‘, g_number INT COMMENT ‘商品数量‘ );
-- 触发器:订单生成一个,商品库存减少一个 -- 临时修改语句结束符 DELIMITER / CREATE TRIGGER after_order AFTER INSERT ON `order` FOR EACH ROW BEGIN UPDATE goods SET inv = inv -1 WHERE id = 2; END -- 结束触发器 /
-- 修改临时语句结束符 DELIMITER ;
show triggers like ‘pattern‘;
show create trigger after_order;
SELECT * FROM goods;
INSERT INTO `order` VALUES (NULL,1,2);
SELECT * FROM goods;
drop trigger 触发器名字;
DELIMITER $$ CREATE TRIGGER `after_order` AFTER INSERT ON `order` FOR EACH ROW BEGIN UPDATE goods SET inv = inv -new.g_number WHERE id = new.g_id; END; $$ DELIMITER ;
SELECT * FROM goods;
INSERT INTO `order` VALUES (NULL,1,2);
MySQL (八)
标签:color iphone6 sel 修改 类型 price 关闭 原来 表数据