MYSQL全语法速查(含示例)

文章目录

1.从简单的查询开始

查找所有记录(SELECT *)

login表

userName password
admin 123456
user 123
SELECT * FROM login;

在这里插入图片描述

查找记录中的所有登录名(SELECT)

login表

userName password
admin 123456
user 123
SELECT userName FROM login;

在这里插入图片描述

查找登录名为admin的密码(WHERE)

login表

userName password
admin 123456
user 123
SELECT password FROM login WHERE userName = "admin";

在这里插入图片描述

查找电话号码非空的记录(IS NOT NULL)

userinfo 表

Name City Phone Time
张三 北京 123456789 2023-11-19 21:13:21
李四 上海 2022-03-26 11:30:02
王五 深圳 111111111 2020-01-22 09:50:13
SELECT * FROM userinfo WHERE Phone IS NOT NULL;

在这里插入图片描述

查找所在城市为北京或者用户名字是李四的记录(OR)

userinfo 表

Name City Phone Time
张三 北京 123456789 2023-11-19 21:13:21
李四 上海 2022-03-26 11:30:02
王五 深圳 111111111 2020-01-22 09:50:13
SELECT * FROM userinfo WHERE City = "北京" OR Name = "李四";

在这里插入图片描述

查找所在城市为北京并且用户名字是张三的记录(AND)

userinfo 表

Name City Phone Time
张三 北京 123456789 2023-11-19 21:13:21
李四 上海 2022-03-26 11:30:02
王五 深圳 111111111 2020-01-22 09:50:13
张二 北京 222 2023-11-24 20:47:16
SELECT * FROM userinfo WHERE City = "北京" AND Name = "张三";

在这里插入图片描述

查找用户名字是李四或者王五的记录(IN)

userinfo 表

Name City Phone Time
张三 北京 123456789 2023-11-19 21:13:21
李四 上海 2022-03-26 11:30:02
王五 深圳 111111111 2020-01-22 09:50:13
张二 北京 222 2023-11-24 20:47:16
SELECT * FROM userinfo WHERE Name IN ("李四", "王五");

在这里插入图片描述

查找注册时间在2022年到2023年之间的记录(BETWEEN)

userinfo 表

Name City Phone Time
张三 北京 123456789 2023-11-19 21:13:21
李四 上海 2022-03-26 11:30:02
王五 深圳 111111111 2020-01-22 09:50:13
张二 北京 222 2023-11-24 20:47:16
SELECT * FROM userinfo WHERE Time BETWEEN "2022-01-01 00:00:00" AND "2023-12-31 23:59:59";

在这里插入图片描述

查找姓张的用户记录(LIKE)

userinfo 表

Name City Phone Time
张三 北京 123456789 2023-11-19 21:13:21
李四 上海 2022-03-26 11:30:02
王五 深圳 111111111 2020-01-22 09:50:13
张二 北京 222 2023-11-24 20:47:16
SELECT * FROM userinfo WHERE Name LIKE "张%";

在这里插入图片描述

查找所有记录并根据积分排序(ORDER BY)

pointinfo表

UserName Point Vip
张三 10 1
李四 2300 0
王五 100 1
张二 501 0
SELECT * FROM pointinfo ORDER BY Point;

在这里插入图片描述

查找所有记录并根据积分降序排序(DESC)

pointinfo表

UserName Point Vip
张三 10 1
李四 2300 0
王五 100 1
张二 501 0
SELECT * FROM pointinfo ORDER BY Point DESC;

在这里插入图片描述

查找前两条记录(LIMIT)

pointinfo表

UserName Point Vip
张三 10 1
李四 2300 0
王五 100 1
张二 501 0
SELECT * FROM pointinfo LIMIT 2;

在这里插入图片描述

查找第两条记录(LIMIT a,b)

pointinfo表

UserName Point Vip
张三 10 1
李四 2300 0
王五 100 1
张二 501 0
SELECT * FROM pointinfo LIMIT 1,1;

在这里插入图片描述

2.表的连接

查找用户所在城市、积分、是否是VIP(JOIN)

userinfo 表

Name City Phone Time
张三 北京 123456789 2023-11-19 21:13:21
李四 上海 2022-03-26 11:30:02
王五 深圳 111111111 2020-01-22 09:50:13
张二 北京 222 2023-11-24 20:47:16

pointinfo表

UserName Point Vip
张三 10 1
李四 2300 0
王五 100 1
张二 501 0
SELECT
	Name, 
	City,
	Point,
	Vip 
FROM
	userinfo
	JOIN pointinfo ON userinfo.NAME = pointinfo.UserName;

在这里插入图片描述

查找ID对应的直接上级(如果有)的姓(自连接)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	t1.ID,
	t2.FirstName AS SuperiorFirstName 
FROM
	employees t1
	JOIN employees t2 ON t1.Superior = t2.ID;

在这里插入图片描述

查找ID(返回所有ID)对应的直接上级的姓(LEFT JOIN)

哪边要保留全表就往哪个方向连接
employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	t1.ID,
	t2.FirstName AS SuperiorFirstName 
FROM
	employees t1
	LEFT JOIN employees t2 ON t1.Superior = t2.ID;

在这里插入图片描述

查找ID对应的工作时间(USING)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

worktimeinfo表

ID WorkTime
1 3
2 3
3 10
4 3
5 10
SELECT
	employees.ID,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID);

在这里插入图片描述

查找各员工的身份(UNION)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	ID,
	FirstName,
	LastName,
	"主管" AS Identity 
FROM
	employees 
WHERE
	Superior IS NULL 
	UNION
SELECT
	ID,
	FirstName,
	LastName,
	"普通员工" AS Identity 
FROM
	employees 
WHERE
	Superior IS NOT NULL;

在这里插入图片描述

3.增加、修改和删除

添加一个测试用户(INSERT INTO)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
INSERT INTO employees ( FirstName, LastName, Department, Salary )
VALUES
	( "赵", "一", "测试部门", 3000 );

在这里插入图片描述

获取上一个插入数据的ID(LAST_INSERT_ID)

在执行了上面的INSERT语句后使用,需要设置主键和自动递增
在这里插入图片描述

SELECT LAST_INSERT_ID();

在这里插入图片描述

创建employees的表复制(CREATE TABLE)

CREATE TABLE employees_backup AS 
SELECT * FROM employees;

在这里插入图片描述
在这里插入图片描述

更新表中ID为6的员工信息(UPDATE)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
6 测试部门 3000
UPDATE employees 
SET Department = "部门1",
	Superior = 3 
WHERE
	ID = 6;

在这里插入图片描述

删除员工ID为6的记录(DELETE)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
6 3 部门1 3000
DELETE FROM employees WHERE ID = 6;

在这里插入图片描述

4.复杂查询

聚合函数(MAX MIN AVG SUM COUNT)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	MAX( Salary ),
	MIN( Salary ),
	AVG( Salary ),
	SUM( Salary ),
	COUNT( Salary ) 
FROM
	employees;

在这里插入图片描述

查找部门总工资(GROUP BY)

一般情况下GROUP BY的字段就是SELECT里面选择的非聚合函数的字段
employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	Department,
	SUM( Salary ) 
FROM
	employees 
GROUP BY
	Department;

在这里插入图片描述

查找总工资大于20000的部门(HAVING)

HAVING就是GROUP BY后的WHERE(条件)
employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	Department,
	SUM( Salary ) AS total_salary 
FROM
	employees 
GROUP BY
	Department 
HAVING
	total_salary > 20000;

在这里插入图片描述

查找部门工资并且汇总(WITH ROLLUP)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	Department,
	SUM( Salary ) 
FROM
	employees 
GROUP BY
	Department WITH ROLLUP;

在这里插入图片描述

查询工作时间为3年的员工薪水(IN)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

worktimeinfo表

ID WorkTime
1 3
2 3
3 10
4 3
5 10
SELECT
	Salary 
FROM
	employees 
WHERE
	ID IN ( SELECT ID FROM worktimeinfo WHERE WorkTime = 3 );

在这里插入图片描述

查找比所有姓张的员工工资高的工资(ALL)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	Salary 
FROM
	employees 
WHERE
	Salary > ALL ( SELECT Salary FROM employees WHERE FirstName LIKE "张%" );

在这里插入图片描述

查找各部门大于部门平均工资的员工ID(相关子查询)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	t1.ID 
FROM
	employees t1 
WHERE
	t1.Salary > ( 
		SELECT 
			AVG( Salary ) 
		FROM 
			employees t2 
		GROUP BY Department 
		HAVING t1.Department = t2.Department 
);

在这里插入图片描述

查询工作时间为3年的员工薪水(EXISTS)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

worktimeinfo表

ID WorkTime
1 3
2 3
3 10
4 3
5 10
SELECT
	Salary 
FROM
	employees 
WHERE
	EXISTS ( SELECT ID FROM worktimeinfo WHERE worktimeinfo.ID = employees.ID AND WorkTime = 3 );

在这里插入图片描述

查询ID不为1的员工工资、姓、以及平均工资(SELECT和FROM中的子查询)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	FirstName,
	Salary,
	( SELECT AVG( Salary ) FROM employees ) AS Average 
FROM
	( SELECT FirstName, Salary FROM employees WHERE ID <> 1 ) AS select_table;

在这里插入图片描述

调整商品价格(ROUND TRUNCATE CEILING FLOOR ABS RAND)

productprice 表

ID Name Price
1 炒饭 10.36
SELECT
	ID,
	NAME,
	Price,
	ROUND( Price ) AS "四舍五入",
	ROUND( Price, 1 ) AS "四舍五入保留一位小数",
	TRUNCATE ( Price, 1 ) AS "截断保留一位小数",
	CEILING( Price ) AS "大于该数的最小整数",
	FLOOR( Price ) AS "小于该数的最大整数",
	ABS( Price ) AS "绝对值",
	RAND( ) AS "0-1随机浮点数" 
FROM
	productprice 
WHERE
	ID = 1;

在这里插入图片描述

字符串处理(LENGTH UPPER LOWER LTRIM TRIM LEFT SUBSTRING LOCATE REPLACE CONCAT)

SELECT
	LENGTH( "test" ) AS "字符数",
	UPPER( "test" ) AS "大写",
	LOWER( "TEST" ) AS "小写",
	LTRIM( "     test   " ) AS "左边去掉空格",
	TRIM( "   test    " ) AS "去掉空格",
	LEFT ( "test", 2 ) AS "前2个字符",
	SUBSTRING( "test", 2, 2 ) AS "位置2长度2的子字符串",
	LOCATE( "st", "test" ) AS "匹配字符串的位置",
	REPLACE ( "test", "st", "xt" ) AS "字符串替换",
	CONCAT( "FirstName", " ", "LastName" ) AS "字符串拼接";

在这里插入图片描述

日期处理(NOW CURRENT_DATE CURRENT_TIME YEAR EXTRACT)

SELECT
	NOW( ) AS "当前日期时间",
	CURRENT_DATE ( ) AS "当前年份",
	CURRENT_TIME ( ) AS "当前时间",
	YEAR ( NOW( ) ) AS "获取年份",
	EXTRACT( MONTH FROM NOW( ) ) AS "从当前格式中提取月份";

在这里插入图片描述

日期计算(DATE_FORMAT DATE_ADD DATE_SUB DATEDIFF TIME_TO_SEC)

SELECT
	NOW( ) AS "当前时间",
	DATE_FORMAT( NOW( ), "%Y %m %d" ) AS "格式化日期",
	DATE_ADD( NOW( ), INTERVAL 1 HOUR ) AS "增加一小时",
	DATE_SUB( NOW( ), INTERVAL 1 HOUR ) AS "减少一小时",
	DATEDIFF( "2023-12-1", "2023-12-3" ) AS "日期间隔",
	TIME_TO_SEC( "22:25" ) - TIME_TO_SEC( "22:00" ) AS "时间间隔(s)";

在这里插入图片描述

查找各ID员工和上级,标出无上级的员工(IFNULL)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT ID, IFNULL(Superior, "无上级") AS "上级ID" FROM employees;

在这里插入图片描述

查找各ID员工和上级,标出无上级的员工部门(COALESCE)

从前往后返回非空的查找值
employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT ID, COALESCE(Superior, Department, "无上级") AS "上级ID或部门" FROM employees;

在这里插入图片描述

查找各ID员工工资水平(IF)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT ID, IF(Salary >= 7000, "高工资", "普通工资") AS "工资级别", Salary FROM employees;

在这里插入图片描述

查找各ID员工工资水平(CASE)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000
SELECT
	ID,
CASE
	WHEN Salary >= 8000 THEN "高工资" 
	WHEN Salary >= 5000 AND Salary < 8000 THEN "中工资" 
	WHEN Salary < 5000 THEN "普通工资" 
END 
	AS "工资级别",
	Salary 
FROM
	employees;

在这里插入图片描述

5.视图、存储过程、触发器和事务

创建视图(CREATE VIEW)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

worktimeinfo表

ID WorkTime
1 3
2 3
3 10
4 3
5 10
CREATE VIEW work_time_info AS 
SELECT
	employees.ID,
	employees.FirstName,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID);

在这里插入图片描述

删除或更改视图(DELETE REPLACE)

CREATE OR REPLACE VIEW work_time_info AS 
SELECT
	employees.ID,
	employees.FirstName,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID);
DROP VIEW work_time_info;

对视图进行操作时不允许记录消失(WITH CHECK OPTION)

避免因为修改后记录不符合某一条件而被从视图中移除的情况,可以在创建视图时添加WITH CHECK OPTION

CREATE VIEW work_time_info AS 
SELECT
	employees.ID,
	employees.FirstName,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID)
WITH CHECK OPTION;

创建并调用查询员工信息的存储过程(CREATE PROCEDURE、CALL)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

DELIMITER:修改分隔符(通常使用$$,可以改成其他的),目的是把CREATE到END的整个语句视为一体,最后把分隔符再改回分号

DELIMITER $$
CREATE PROCEDURE get_employee()
BEGIN
	SELECT * FROM employees;
END$$
DELIMITER ;

调用

CALL get_employee();

在这里插入图片描述

删除(如果存在)查询员工信息的存储过程(DROP PROCEDURE)

DROP PROCEDURE IF EXISTS get_employee;

查找指定部门的员工信息(带参存储过程)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

带参的存储过程:CHAR(3)表示有三个字符的字符串,名字为DepartmentName

DELIMITER $$
CREATE PROCEDURE get_employee_from_Department(DepartmentName CHAR(3))
BEGIN
	SELECT * FROM employees WHERE Department = DepartmentName;
END$$
DELIMITER ;
CALL get_employee_from_Department("部门1");

在这里插入图片描述

查找指定部门的员工信息(存储过程默认参数)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

带参的存储过程:CHAR(3)表示有三个字符的字符串,名字为DepartmentName

DELIMITER $$
CREATE PROCEDURE get_employee_from_Department(DepartmentName CHAR(3))
BEGIN
	IF DepartmentName IS NULL 
	THEN SET DepartmentName = "部门2";
	END IF;
	SELECT * FROM employees WHERE Department = DepartmentName;
END$$
DELIMITER ;

即使有默认参数,在调用的时候也需要传入空值,否则会报错.

CALL get_employee_from_Department(NULL);

更新ID为5的员工工作时间(存储过程参数验证)

worktimeinfo表

ID WorkTime
1 3
2 3
3 10
4 3
5 10

带参的存储过程:CHAR(3)表示有三个字符的字符串,名字为DepartmentName

DELIMITER $$
CREATE PROCEDURE update_work_time(time INT)
BEGIN
	IF time <= 0 
	THEN SIGNAL SQLSTATE "22003"
	SET MESSAGE_TEXT = "错误的工作时间";
	END IF;
	UPDATE worktimeinfo SET WorkTime = time WHERE ID = 5;
END$$
DELIMITER ;

SQLSTATE各种数字代表的具体意义可自行搜索,在这里22003表示数值异常

CALL update_work_time(-2);

在这里插入图片描述

查找指定ID的员工工资(存储过程输出参数)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

参数中的OUT表示这是输出参数,需要传入变量

DELIMITER $$
CREATE PROCEDURE get_salary_from_employee(ID INT, OUT find_salary INT)
BEGIN
	SELECT Salary INTO find_salary FROM employees t1 WHERE t1.ID = ID;
END$$
DELIMITER ;

注意此处变量find_salary 需要加前缀@

SET @find_salary = 0;
CALL get_salary_from_employee(3, @find_salary);
SELECT @find_salary AS "工资";

在这里插入图片描述

将员工工资换算为美元(函数 FUNCTION)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

READS SQL DATA表示函数选项:函数体中包含SELECT查询语句,但不包含更新语句
DECLARE:在函数中定义一个变量.DEFAULT是默认值

CREATE FUNCTION dollar_salary(ID INT)
RETURNS DECIMAL(10, 2)
READS SQL DATA
BEGIN
	DECLARE dollar DECIMAL(10, 2) DEFAULT 0;
	DECLARE iSalary INT;
	
	SELECT Salary INTO iSalary FROM employees t1 WHERE t1.ID = ID;
	SET dollar = iSalary / 7;
	
	RETURN dollar;
END

创建完函数就可以当成函数来用了

SELECT ID, Salary, dollar_salary(ID) AS "美元工资" FROM employees;

在这里插入图片描述

计算公司所发月工资(触发器TRIGGER)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

salaryinfo表

TotalSalary
37500

NEW指更新后行的数据,OLD指更新前行的数据,可以用来取其中的字段

DELIMITER $$
CREATE TRIGGER totalSalary_after_update
	AFTER UPDATE ON employees
	FOR EACH ROW
BEGIN
	UPDATE salaryinfo SET TotalSalary = TotalSalary + NEW.Salary - OLD.Salary;
END$$
DELIMITER ;
UPDATE employees SET Salary = 8000 WHERE ID = 1;

在这里插入图片描述
我们再把数据改回来

UPDATE employees SET Salary = 5000 WHERE ID = 1;

在这里插入图片描述
创建好的触发器是无法直接看到的,我们可以使用命令查看,大概是这样

SHOW TRIGGERS;

在这里插入图片描述
查找特定名称的触发器,information_schema是触发器所在的数据库的数据表triggers ,触发器都存储在里面,触发器使用特定命名方式可以方便地查找表或者操作对应的触发器

SELECT * FROM information_schema.triggers WHERE trigger_name LIKE "totalSalary%";

删除计算月工资的触发器(DROP TRIGGER)

DROP TRIGGER IF EXISTS totalSalary_after_update;

创建员工工龄记录事件(事件EVENT)

查看事件管理器是否打开,只有打开才能相应事件

SHOW VARIABLES LIKE "event%";

这里自动关闭了,把它打开

SET GLOBAL event_scheduler = ON;

在这里插入图片描述

worktimeinfo表

ID WorkTime
1 3
2 3
3 10
4 3
5 10

EVERY指多次执行,单次执行用AT

DELIMITER $$
CREATE EVENT yearly_update_worktimeinfo
ON SCHEDULE
	EVERY 1 YEAR STARTS "2023-01-01"
DO BEGIN
	UPDATE worktimeinfo SET WorkTIme = WorkTIme + 1;
END$$
DELIMITER ;

查看、删除和更改事件

SHOW EVENTS;
#或者筛选特定名字的事件
SHOW EVENTS LIKE "yearly%";

在这里插入图片描述
删除事件

DROP EVENT IF EXISTS yearly_update_worktimeinfo;

更改事件,使用ALTER代替CREATE即可

DELIMITER $$
ALTER EVENT yearly_update_worktimeinfo
ON SCHEDULE
	EVERY 1 YEAR STARTS "2023-01-01"
DO BEGIN
	UPDATE worktimeinfo SET WorkTIme = WorkTIme - 1;
END$$
DELIMITER ;

禁用或启用事件

ALTER EVENT yearly_update_worktimeinfo DISABLE;

在这里插入图片描述

ALTER EVENT yearly_update_worktimeinfo ENABLE;

在这里插入图片描述

加入新员工后更新月总工资(事务TRANSACTION)

employees表

ID FirstName LastName Superior Department Salary
1 3 部门1 5000
2 5 部门2 3500
3 部门1 10000
4 3 部门1 7000
5 部门2 12000

salaryinfo表

TotalSalary
37500

注意表结构,此时插入数据失败,salaryinfo表也不会更新

START TRANSACTION;
UPDATE salaryinfo SET TotalSalary = TotalSalary + 8000;
INSERT INTO employees (ID, FirstName, LastName, Salary) VALUES(2, "赵", "四", 8000);
COMMIT;

在这里插入图片描述
在这里插入图片描述

仍然是37500
在这里插入图片描述

相关推荐

  1. 数据库SQL语句手册

    2023-12-07 02:16:01       18 阅读
  2. Mysql mybatis 语法示例

    2023-12-07 02:16:01       41 阅读
  3. MYSQL窗口函数详解和实战(内示例)

    2023-12-07 02:16:01       31 阅读
  4. Git

    2023-12-07 02:16:01       33 阅读
  5. QML手册

    2023-12-07 02:16:01       14 阅读
  6. tcpdump

    2023-12-07 02:16:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 02:16:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 02:16:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 02:16:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 02:16:01       20 阅读

热门阅读

  1. 基于python和定向爬虫的商品比价系统

    2023-12-07 02:16:01       38 阅读
  2. 关于数据劫持原理(vue2和vue3)

    2023-12-07 02:16:01       36 阅读
  3. Docker在实际应用开发中的应用-AI生成

    2023-12-07 02:16:01       31 阅读
  4. mysql-binlog,redolog 和 undolog区别

    2023-12-07 02:16:01       40 阅读
  5. 深度学习常用指令(Anaconda、Python)

    2023-12-07 02:16:01       42 阅读
  6. 力扣 572. 另一棵树的子树

    2023-12-07 02:16:01       40 阅读
  7. rabbitmq技术

    2023-12-07 02:16:01       45 阅读