MYSQL全语法速查(含示例)

news2025/1/21 12:11:45

文章目录

  • 1.从简单的查询开始
    • 查找所有记录(SELECT *)
    • 查找记录中的所有登录名(SELECT)
    • 查找登录名为admin的密码(WHERE)
    • 查找电话号码非空的记录(IS NOT NULL)
    • 查找所在城市为北京或者用户名字是李四的记录(OR)
    • 查找所在城市为北京并且用户名字是张三的记录(AND)
    • 查找用户名字是李四或者王五的记录(IN)
    • 查找注册时间在2022年到2023年之间的记录(BETWEEN)
    • 查找姓张的用户记录(LIKE)
    • 查找所有记录并根据积分排序(ORDER BY)
    • 查找所有记录并根据积分降序排序(DESC)
    • 查找前两条记录(LIMIT)
    • 查找第两条记录(LIMIT a,b)
  • 2.表的连接
    • 查找用户所在城市、积分、是否是VIP(JOIN)
    • 查找ID对应的直接上级(如果有)的姓(自连接)
    • 查找ID(返回所有ID)对应的直接上级的姓(LEFT JOIN)
    • 查找ID对应的工作时间(USING)
    • 查找各员工的身份(UNION)
  • 3.增加、修改和删除
    • 添加一个测试用户(INSERT INTO)
    • 获取上一个插入数据的ID(LAST_INSERT_ID)
    • 创建employees的表复制(CREATE TABLE)
    • 更新表中ID为6的员工信息(UPDATE)
    • 删除员工ID为6的记录(DELETE)
  • 4.复杂查询
    • 聚合函数(MAX MIN AVG SUM COUNT)
    • 查找部门总工资(GROUP BY)
    • 查找总工资大于20000的部门(HAVING)
    • 查找部门工资并且汇总(WITH ROLLUP)
    • 查询工作时间为3年的员工薪水(IN)
    • 查找比所有姓张的员工工资高的工资(ALL)
    • 查找各部门大于部门平均工资的员工ID(相关子查询)
    • 查询工作时间为3年的员工薪水(EXISTS)
    • 查询ID不为1的员工工资、姓、以及平均工资(SELECT和FROM中的子查询)
    • 调整商品价格(ROUND TRUNCATE CEILING FLOOR ABS RAND)
    • 字符串处理(LENGTH UPPER LOWER LTRIM TRIM LEFT SUBSTRING LOCATE REPLACE CONCAT)
    • 日期处理(NOW CURRENT_DATE CURRENT_TIME YEAR EXTRACT)
    • 日期计算(DATE_FORMAT DATE_ADD DATE_SUB DATEDIFF TIME_TO_SEC)
    • 查找各ID员工和上级,标出无上级的员工(IFNULL)
    • 查找各ID员工和上级,标出无上级的员工部门(COALESCE)
    • 查找各ID员工工资水平(IF)
    • 查找各ID员工工资水平(CASE)
  • 5.视图、存储过程、触发器和事务
    • 创建视图(CREATE VIEW)
    • 删除或更改视图(DELETE REPLACE)
    • 对视图进行操作时不允许记录消失(WITH CHECK OPTION)
    • 创建并调用查询员工信息的存储过程(CREATE PROCEDURE、CALL)
    • 删除(如果存在)查询员工信息的存储过程(DROP PROCEDURE)
    • 查找指定部门的员工信息(带参存储过程)
    • 查找指定部门的员工信息(存储过程默认参数)
    • 更新ID为5的员工工作时间(存储过程参数验证)
    • 查找指定ID的员工工资(存储过程输出参数)
    • 将员工工资换算为美元(函数 FUNCTION)
    • 计算公司所发月工资(触发器TRIGGER)
    • 删除计算月工资的触发器(DROP TRIGGER)
    • 创建员工工龄记录事件(事件EVENT)
    • 查看、删除和更改事件
    • 加入新员工后更新月总工资(事务TRANSACTION)

1.从简单的查询开始

查找所有记录(SELECT *)

login表

userNamepassword
admin123456
user123
SELECT * FROM login;

在这里插入图片描述

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

login表

userNamepassword
admin123456
user123
SELECT userName FROM login;

在这里插入图片描述

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

login表

userNamepassword
admin123456
user123
SELECT password FROM login WHERE userName = "admin";

在这里插入图片描述

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

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
SELECT * FROM userinfo WHERE Phone IS NOT NULL;

在这里插入图片描述

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

userinfo 表

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

在这里插入图片描述

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

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16
SELECT * FROM userinfo WHERE City = "北京" AND Name = "张三";

在这里插入图片描述

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

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16
SELECT * FROM userinfo WHERE Name IN ("李四", "王五");

在这里插入图片描述

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

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-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 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16
SELECT * FROM userinfo WHERE Name LIKE "张%";

在这里插入图片描述

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

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo ORDER BY Point;

在这里插入图片描述

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

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo ORDER BY Point DESC;

在这里插入图片描述

查找前两条记录(LIMIT)

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo LIMIT 2;

在这里插入图片描述

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

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT * FROM pointinfo LIMIT 1,1;

在这里插入图片描述

2.表的连接

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

userinfo 表

NameCityPhoneTime
张三北京1234567892023-11-19 21:13:21
李四上海2022-03-26 11:30:02
王五深圳1111111112020-01-22 09:50:13
张二北京2222023-11-24 20:47:16

pointinfo表

UserNamePointVip
张三101
李四23000
王五1001
张二5010
SELECT
	Name, 
	City,
	Point,
	Vip 
FROM
	userinfo
	JOIN pointinfo ON userinfo.NAME = pointinfo.UserName;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	t1.ID,
	t2.FirstName AS SuperiorFirstName 
FROM
	employees t1
	JOIN employees t2 ON t1.Superior = t2.ID;

在这里插入图片描述

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

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

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	t1.ID,
	t2.FirstName AS SuperiorFirstName 
FROM
	employees t1
	LEFT JOIN employees t2 ON t1.Superior = t2.ID;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
SELECT
	employees.ID,
	worktimeinfo.WorkTime
FROM
	employees
	JOIN worktimeinfo USING(ID);

在这里插入图片描述

查找各员工的身份(UNION)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
6测试部门3000
UPDATE employees 
SET Department = "部门1",
	Superior = 3 
WHERE
	ID = 6;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
63部门13000
DELETE FROM employees WHERE ID = 6;

在这里插入图片描述

4.复杂查询

聚合函数(MAX MIN AVG SUM COUNT)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	MAX( Salary ),
	MIN( Salary ),
	AVG( Salary ),
	SUM( Salary ),
	COUNT( Salary ) 
FROM
	employees;

在这里插入图片描述

查找部门总工资(GROUP BY)

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

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Department,
	SUM( Salary ) 
FROM
	employees 
GROUP BY
	Department;

在这里插入图片描述

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

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

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Department,
	SUM( Salary ) AS total_salary 
FROM
	employees 
GROUP BY
	Department 
HAVING
	total_salary > 20000;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Department,
	SUM( Salary ) 
FROM
	employees 
GROUP BY
	Department WITH ROLLUP;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
SELECT
	Salary 
FROM
	employees 
WHERE
	ID IN ( SELECT ID FROM worktimeinfo WHERE WorkTime = 3 );

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT
	Salary 
FROM
	employees 
WHERE
	Salary > ALL ( SELECT Salary FROM employees WHERE FirstName LIKE "张%" );

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
SELECT
	Salary 
FROM
	employees 
WHERE
	EXISTS ( SELECT ID FROM worktimeinfo WHERE worktimeinfo.ID = employees.ID AND WorkTime = 3 );

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
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 表

IDNamePrice
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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT ID, IFNULL(Superior, "无上级") AS "上级ID" FROM employees;

在这里插入图片描述

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

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

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT ID, COALESCE(Superior, Department, "无上级") AS "上级ID或部门" FROM employees;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECT ID, IF(Salary >= 7000, "高工资", "普通工资") AS "工资级别", Salary FROM employees;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

worktimeinfo表

IDWorkTime
13
23
310
43
510
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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

带参的存储过程: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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

带参的存储过程: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表

IDWorkTime
13
23
310
43
510

带参的存储过程: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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

参数中的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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

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表

IDWorkTime
13
23
310
43
510

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表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000

salaryinfo表

TotalSalary
37500

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6个实用又好用的交互原型工具!

在 UI/UX 设计中&#xff0c;原型设计是至关重要的一步。正如用户体验中的其它环节一样&#xff0c;有无数的交互原型工具可以帮助你完成原型设计。市场上有太多的交互原型工具&#xff0c;如果你不知道选择哪一种&#xff0c;那么我们将为你介绍 6 个实用又好用的交互原型工具…

C++ day56 两个字符串的删除操作 编辑距离

题目1&#xff1a;583 两个字符串的删除操作 题目链接&#xff1a;两个字符串的删除操作 对题目的理解 返回使两个单词word1和word2相同的最少删除多少个元素&#xff0c;两个单词至少包含一个字母&#xff0c;且仅包含小写字母 思路1&#xff1a;这道题与昨天的不同子序列…

Dagger2使用

在android引入Dagger2库 //引入Dagger2implementation("com.google.dagger:dagger:2.48.1")annotationProcessor ("com.google.dagger:dagger-compiler:2.48.1") 构造器注入 创建一个类 public class Car {//在构造器上面添加dagger的Inject即可Injectp…

现代雷达车载应用——第2章 汽车雷达系统原理 2.1节

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.1 基本雷达功能 雷达系统通过天线或天线阵列向空间辐射电磁能量。辐射的电磁能量“照亮”周围的目标。“被照亮”的目标拦截一些辐射能量&#xff0…

二十章总结

20.1线程介绍 世间有很多工作都是可以同时完成的。例如&#xff0c;人体可以同时进行呼吸、血液循环、思考问题等活动&#xff1b;用户既可以使用计算机听歌&#xff0c;也可以使用它打印文件。同样&#xff0c;计算机完全可以将多种活动同时进行&#xff0c;这种思想放在 Jav…

配置主机与外网时间服务器同步时间

目录 NTP服务简介 时间管理命令 第一步&#xff1a;更改当前主机所在地的时间 方法一&#xff1a;使用tzselect命令查询需要的时区 1、使用tzselect命令查询需要的时区 2、添加变量到 ~/.bash_profile 文件中&#xff0c;即追加类似的内容&#xff1a; 3、重新连接一个…

Flink(九)【时间语义与水位线】

前言 2023-12-02-20:05&#xff0c;终于写完啦&#xff0c;最近状态不错。刚写完又收到了她的消息哈哈哈哈&#xff0c;开心。 再去全力打拼一次&#xff0c;奋战一场&#xff0c;就算最后打了败仗也无所谓&#xff0c;至少你留下了足迹。 《解忧杂货店》 1、时间语义 …

团队git操作流程

项目的开发要求&#xff1a;&#xff08;1&#xff09;项目组厉员代码提交不少于20次 &#xff08;2&#xff09;项目组厉员每天提交不少于20次 &#xff08;3&#xff09;企业项目开发代码的每天的提交一般提交3-5次 &#xff08;4&#xff09;代码仓库的管理 git的基础操作流…

【CSP】202305-1_重复局面Python实现

文章目录 [toc]试题编号试题名称时间限制内存限制题目背景问题描述输入格式输出格式样例输入样例输出样例说明子任务提示Python实现 试题编号 202305-1 试题名称 重复局面 时间限制 1.0s 内存限制 512.0MB 题目背景 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3…

会声会影2024软件还包含了视频教学以及模板素材

会声会影2024中文版是一款加拿大公司Corel发布的视频编软件。会声会影2024官方版支持视频合并、剪辑、屏幕录制、光盘制作、添加特效、字幕和配音等功能&#xff0c;用户可以快速上手。会声会影2024软件还包含了视频教学以及模板素材&#xff0c;让用户剪辑视频更加的轻松。 会…

【Linux 进度条小程序】缓冲区+回车换行

文章目录 回车与换行缓冲区举个栗子fflush函数倒计时小程序进度条小程序 回车与换行 回车和换行是不同的两个概念 回车&#xff1a;\r 使光标回到本行行首。 换行&#xff1a;\n使光标下移一格。 一般我们的键盘上的Enter键是回加换行键 在c语言中 \n 表示回车换行 效果和Ent…

iNet Network Scanner for Mac:简洁高效的WiFi网络扫描软件

随着无线网络的普及&#xff0c;WiFi网络已经成为我们日常生活中必不可少的一部分。无线网络的稳定性和速度对我们的工作和娱乐体验至关重要。因此&#xff0c;一款功能强大、简洁高效的WiFi网络扫描软件非常重要。今天&#xff0c;我们向大家推荐一款优秀的Mac平台WiFi网络扫描…

AI生成工具助力业界,黎万强投资。/微信支付和支付宝境外银行卡全面支持 | 魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 AI应用一年半&#xff0c;IBM HR部省12000小时 华为沉默中&#xff0c;何时…

提高工厂能源效率的关键:工厂能耗监测平台

工业做为能源消耗的重要场所&#xff0c;所以节能减排对工业来讲是一个亟需解决的问题。除了对设备进行更新换代外&#xff0c;还需要能源管理消耗监测平台&#xff0c;帮助企业实现节能减排的目标。 工厂能源消费量非常庞大&#xff0c;能源比较难以监测与控制。传统能源的管…

《微信小程序开发从入门到实战》学习四十二

4.3 云开发文件存储 文件存储功能支持将任意数量和格式的文件&#xff08;如图片和视频&#xff09;保存在云端&#xff0c;支持 以文件夹的形式将文件归类。 在云开发控制台中&#xff0c;可以对云端保存的文件进行管理。 也可以通过文件存储API对文件进行上传、删除、移动…

每日股票价格 - 华为机试真题题解

每日股票价格 - 华为机试真题题解 题目描述 ​ 给定某只股票连续N天的价格列表stockPrices&#xff0c;其中stockPricesi表示股票某天的价格&#xff0c;请生成一个新列表&#xff0c;对应位置输出为:要想等到股票价格上涨&#xff0c;至少需要等待的天数&#xff0c;如果股票…

一个容器中填值,值太多不换行,而是调小字体大小和行高

<!-- clampLineHeight 重计算行高 --> <!-- clampTextSize 重计算字体大小 --> <!-- 这里的div高8mm, 宽6cm, 文本为text --> <div style"height:8mm;width:6cm;text-align:left"><span :style"{ fontSize: clampTextSize(text, 6cm…

Redis——某马点评day03——part2:秒杀业务异步优化

异步秒杀思路 原本的流程是如下所示&#xff0c;必须从开始到创建订单成功才会返回响应。就像饭店里面从下单到上菜都是一个人在服务&#xff0c;就导致服务员利用率很低&#xff0c;后一个顾客要等到前一个顾客上完菜才可以下单。 最简单的优化就是加员工&#xff0c;一次性…

基于单片机自动饮料混合机控制系统设计

**单片机设计介绍&#xff0c;基于单片机自动饮料混合机控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机自动饮料混合机控制系统设计是一个涉及多个领域的复杂项目&#xff0c;包括单片机技术、传感器技术…

开发者的福音:TinyVue 组件库文档大优化!类型更详细,描述更清晰!

你好&#xff0c;我是 Kagol。 前言 从今年2月份开源以来&#xff0c;有不少朋友给我们 TinyVue 组件库提了文档优化的建议&#xff0c;这些建议都非常中肯&#xff0c;我们也在持续对文档进行优化&#xff0c;并且从中总结出了大家对于文档优化的一些共性问题&#xff0c;形…