MYSQL全语法速查(含示例)

文章目录

  • 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
SELECTName, City,Point,Vip 
FROMuserinfoJOIN pointinfo ON userinfo.NAME = pointinfo.UserName;

在这里插入图片描述

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

employees表

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

在这里插入图片描述

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

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

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECTt1.ID,t2.FirstName AS SuperiorFirstName 
FROMemployees t1LEFT 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
SELECTemployees.ID,worktimeinfo.WorkTime
FROMemployeesJOIN worktimeinfo USING(ID);

在这里插入图片描述

查找各员工的身份(UNION)

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECTID,FirstName,LastName,"主管" AS Identity 
FROMemployees 
WHERESuperior IS NULL UNION
SELECTID,FirstName,LastName,"普通员工" AS Identity 
FROMemployees 
WHERESuperior 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 
WHEREID = 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
SELECTMAX( Salary ),MIN( Salary ),AVG( Salary ),SUM( Salary ),COUNT( Salary ) 
FROMemployees;

在这里插入图片描述

查找部门总工资(GROUP BY)

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

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECTDepartment,SUM( Salary ) 
FROMemployees 
GROUP BYDepartment;

在这里插入图片描述

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

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

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECTDepartment,SUM( Salary ) AS total_salary 
FROMemployees 
GROUP BYDepartment 
HAVINGtotal_salary > 20000;

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECTDepartment,SUM( Salary ) 
FROMemployees 
GROUP BYDepartment WITH ROLLUP;

在这里插入图片描述

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

employees表

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

worktimeinfo表

IDWorkTime
13
23
310
43
510
SELECTSalary 
FROMemployees 
WHEREID IN ( SELECT ID FROM worktimeinfo WHERE WorkTime = 3 );

在这里插入图片描述

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

employees表

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

在这里插入图片描述

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

employees表

IDFirstNameLastNameSuperiorDepartmentSalary
13部门15000
25部门23500
3部门110000
43部门17000
5部门212000
SELECTt1.ID 
FROMemployees t1 
WHEREt1.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
SELECTSalary 
FROMemployees 
WHEREEXISTS ( 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
SELECTFirstName,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
SELECTID,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随机浮点数" 
FROMproductprice 
WHEREID = 1;

在这里插入图片描述

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

SELECTLENGTH( "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)

SELECTNOW( ) 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)

SELECTNOW( ) 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
SELECTID,
CASEWHEN Salary >= 8000 THEN "高工资" WHEN Salary >= 5000 AND Salary < 8000 THEN "中工资" WHEN Salary < 5000 THEN "普通工资" 
END AS "工资级别",Salary 
FROMemployees;

在这里插入图片描述

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 
SELECTemployees.ID,employees.FirstName,worktimeinfo.WorkTime
FROMemployeesJOIN worktimeinfo USING(ID);

在这里插入图片描述

删除或更改视图(DELETE REPLACE)

CREATE OR REPLACE VIEW work_time_info AS 
SELECTemployees.ID,employees.FirstName,worktimeinfo.WorkTime
FROMemployeesJOIN worktimeinfo USING(ID);
DROP VIEW work_time_info;

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

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

CREATE VIEW work_time_info AS 
SELECTemployees.ID,employees.FirstName,worktimeinfo.WorkTime
FROMemployeesJOIN 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()
BEGINSELECT * 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))
BEGINSELECT * 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))
BEGINIF 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)
BEGINIF 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)
BEGINSELECT 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
BEGINDECLARE 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_updateAFTER UPDATE ON employeesFOR EACH ROW
BEGINUPDATE 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 SCHEDULEEVERY 1 YEAR STARTS "2023-01-01"
DO BEGINUPDATE 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 SCHEDULEEVERY 1 YEAR STARTS "2023-01-01"
DO BEGINUPDATE 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.mzph.cn/news/202736.shtml

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

相关文章

强化学习第1天:强化学习概述

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 文章目录 介绍 强化学习要素 强化学习任务示例 环境搭建&#xff1a;gym 基本用法 环境信息查看 创建智能体 过程可视化 完整代码 结语…

有线传输介质

目录 1、双绞线 &#xff08;1&#xff09;无屏蔽双绞线 UTP(Unshielded Twisted Pair) &#xff08;2&#xff09;屏蔽双绞线 STP (Shielded Twisted Pair) &#xff08;3&#xff09;布线标准EIA/TIA-568-&#xff21; &#xff08;4&#xff09;双绞线的特点 2、同轴电…

变频电机的负载曲线核对

1.问题导入 月初偶然接触到一个很奇怪的现象&#xff0c;一款变频电机在各个档位下的输入线电流&#xff0c;如果负载不变&#xff0c;无论怎样切换变频器输出频率&#xff0c;电流会保持近乎恒定。这个特性让我感觉很好奇。直觉的理解&#xff0c;因为频率变化&#xff0c;而…

Linux指令学习

目录 1.ls指令 2.pwd命令 3.cd 指令 4. touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.find指令&#xff1a; -name 15.grep指令 16.zip/unzip指令&#xff1a; 17.tar…

Windows驱动中使用数字签名验证控制设备访问权限

1. 背景 在一般的驱动开发时&#xff0c;创建了符号链接后在应用层就可以访问打开我们的设备并进行通讯。 但我们有时候不希望非自己的进程访问我们的设备并进行交互&#xff0c;虽然可以使用 IoCreateDeviceSecure 来创建有安全描述符的设备&#xff0c;但大数的用户账户为了方…

二叉树的右视图[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个二叉树的 根节点root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出…

西工大计算机学院计算机系统基础实验一(函数编写11~14)

稳住心态不要慌&#xff0c;如果考试周冲突的话&#xff0c;可以直接复制这篇博客和上一篇博客西工大计算机学院计算机系统基础实验一&#xff08;函数编写1~10&#xff09;-CSDN博客最后的代码&#xff0c;然后直接提交&#xff0c;等熬过考试周之后回过头再慢慢做也可以。 第…

如何做好软文推广的选题?媒介盒子分享常见套路

选题是软文推广的重中之重&#xff0c;主题选得好&#xff0c;不仅能够戳到用户&#xff0c;提高转化率&#xff0c;还能让各位运营的写作效率大幅度提升&#xff0c;今天媒介盒子就来和大家分享软文选题的常见套路&#xff0c;助力各位品牌进行选题。 一、 根据产品选题 软文…

【AI-Fix】解决地图展示包leafmap在Jupyter NoteBook中地图不显示的问题

1. 问题描述 新创建的环境想使用leafmap在Jupyter中进行地图展示&#xff0c;结果发现运行完成之后不显示&#xff0c;不论怎么重启都没有办法显示出来&#xff0c;以经验来看&#xff0c;多半是缺了包了。 于是去leafmap的官方文档查找原因&#xff0c;一开始并没有发现什么问…

C++ 拷贝构造函数

目录 拷贝构造函数概述 拷贝构造函数特性 拷贝构造函数概述 当我们定义好一个类&#xff0c;不做任何处理时&#xff0c;编译器会自动生成以下6个默认成员函数&#xff1a; 默认成员函数&#xff1a;如果用户没有手动实现&#xff0c;则编译器会自动生成的成员函数。 同样&…

JavaWeb(十)

一、JavaWeb概述 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 JavaWeb&#xff1a;使用 Java技术进行web互联网开发。 二、JavaWeb 技术栈 2.1、B/S 架构 B/S 架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器…

解决找不到msvcr120.dll无法执行代码的4个方法,快来看看解决方法!

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“缺少xxx.dll文件”。而msvcr120.dll就是其中之一。那么&#xff0c;msvcr120.dll到底是什么呢&#xff1f;它又有什么作用呢&#xff1f;本文将从多个方面对msvcr120.dll进行详细的解析…

华为鸿蒙爆发真实力!原生应用媲美iOS,使用流畅度将提升20至30%

随着华为鸿蒙原生应用开发计划的启动&#xff0c;一场席卷全球的科技浪潮正在涌动。鸿蒙生态的快速发展&#xff0c;吸引了无数企业和开发者的关注&#xff0c;他们纷纷拥抱这个新兴的生态系统&#xff0c;共同构建一个更加繁荣的鸿蒙世界。 华为鸿蒙原生应用开发计划引爆全球…

【电路笔记】-交流电路中的电阻器

交流电路中的电阻器 文章目录 交流电路中的电阻器1、概述2、交流电路中的电阻器示例 13、交流电路中的电阻器示例2 电阻器也可用于交流电源&#xff0c;其中消耗的电压、电流和功率以有效值给出。 1、概述 在之前的文章中&#xff0c;我们研究了电阻器及其连接&#xff0c;并使…

Leetcode刷题笔记题解(C++):BM11 链表相加(二)

思路&#xff1a;先对两个链表进行反转&#xff0c;反转求和注意进位运算&#xff0c;求和完成之后再进行反转得到结果 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ #include <cstddef> class Soluti…

Excel 删除空白行

目录 一. 方式一: 筛选删除二. 方式二: 定位条件三. 方式三: 隐藏非空白行&#xff0c;删除空白行 一. 方式一: 筛选删除 选中空白行对应的列&#xff0c;按下Ctrl Shift L&#xff0c;给列添加过滤条件。过滤出空白行&#xff0c;然后删除即可。 二. 方式二: 定位条件 按下…

【Qt】QLineEdit显示输入十六进制,位数不足时按照规则填充显示及每两个字符以空格填充

问题 在实际开发中&#xff0c;有时候需要对输入进行限制&#xff0c;一是更加合理&#xff0c;二是防止出现误操作。 比如&#xff1a; 使用Qt进行应用程序开发时&#xff0c;对单行编辑框QLineEdit控件&#xff0c;设置只可输入十六进制。 限制输入的方式常用且经典的是使用…

Linux常用指令详解

目录 前言&#xff1a; Linux的目录结构 Linux常用指令简介 whoami指令 ls指令 pwd指令 cd指令 tree指令 touch指令 mkdir指令 rmdir指令与rm指令 man指令 cp&#xff08;copy&#xff09;指令 mv&#xff08;move&#xff09;指令 cat指令 重定向及重定向的类型…

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

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

6.1810: Operating System Engineering 2023 <Lab3: page tables>

一、本节任务 实验环境&#xff1a; 二、要点 如何防止程序破坏内核或其他进程空间&#xff1f;隔离地址空间&#xff0c;进程只能读写自己的内存空间。 在保证隔离的同时&#xff0c;如何将多个地址空间复用到一个物理内存上&#xff1f;虚拟内存/页表。操作系统通过页表来为…