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.hqwc.cn/news/253363.html

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

相关文章

组件的生命周期

目录​ 1&#xff1a;生命周期和生命周期函数的概念 2&#xff1a;组件创建的过程 3&#xff1a;组件创建阶段beforeCreate&#xff0c;created&#xff0c;beforeMount&#xff0c;mounted生命周期函数。 3.1&#xff1a;beforeCreate方法示例&#xff1a; 3.2&#xff1…

【数据结构】动态规划(Dynamic Programming)

一.动态规划&#xff08;DP&#xff09;的定义&#xff1a; 求解决策过程&#xff08;decision process&#xff09;最优化的数学方法。 将多阶段决策过程转化为一系列单阶段问题&#xff0c;利用各阶段之间的关系&#xff0c;逐个求解。 二.动态规划的基本思想&#xff1a; …

团队git操作流程

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

对于多台232modbus仪表低成本通讯的modbus转profinet网关

随着越来越多的仪表设备采用Modbus通信协议&#xff0c;其中又以232 Modbus仪表的应用最为广泛。而为了实现多台232 Modbus仪表低成本通信&#xff0c;Modbus转Profinet网关应运而生。Modbus转Profinet网关不仅能够实现多台仪表之间的数据传输&#xff0c;还能够保证通信的稳定…

【数据结构】——二叉树简答题模板

目录 一、树和二叉树的概念&#xff08;一&#xff09;二叉树的定义和性质&#xff08;二&#xff09;树和二叉树的区别 二、完全二叉树和满二叉树三、二叉树的遍历&#xff08;一&#xff09;由序列确定二叉树&#xff08;二&#xff09;不同遍历序列的关系 四、二叉树的性质&…

计算机操作系统3

1.虚拟机 VM 两类虚拟机的对比&#xff1a; 2.进程 进程的特征&#xff1a; 进程状态的转换&#xff08;五大状态&#xff09; 3.进程控制原语的作用 4.线程 ​​​​​线程的属性 实现方式 5.调度算法的评价指标

OpenCV-python下载安装和基本操作

文章目录 一、实验目的二、实验内容三、实验过程OpenCV-python的安装与配置python下载和环境配置PIP镜像安装Numpy安装openCV-python检验opencv安装是否成功 openCV-python的基本操作图像输入和展示以及写出openCV界面编程单窗口显示多图片鼠标事件键盘事件滑动条事件 四、实验…

【源码解析】聊聊阻塞队列之BlockingArrayQueue

阻塞队列 阻塞队列&#xff1a;顾名思义 首先它是一个队列&#xff0c;而一个阻塞队列在数据结构中所起的作用大致如下入所示。 当阻塞队列是空时&#xff0c;从队列中获取元素的操作将会被阻塞。当阻塞队列时满的时&#xff0c;往队列里添加元素的操作将会被阻塞。 试图从空的…

全球6G发展大会开幕,为什么我们需要6G

2023全球6G发展大会 由中国IMT-2030&#xff08;6G&#xff09;推进组、中国通信学会、重庆两江新区管理委员会联合主办的2023全球6G发展大会今天在重庆两江新区明月湖成功开幕&#xff0c;开幕式上发布了《6G网络架构展望》《6G无线系统设计原则和典型特征》白皮书。 《6G网络…

有向图的拓扑序列(拓扑排序)

给定一个 n 个点 m 条边的有向图&#xff0c;点的编号是 1 到 n&#xff0c;图中可能存在重边和自环。 请输出任意一个该有向图的拓扑序列&#xff0c;如果拓扑序列不存在&#xff0c;则输出 −1。 若一个由图中所有点构成的序列 A 满足&#xff1a;对于图中的每条边 (x,y)&a…

现货白银简单介绍

在贵金属投资领域&#xff0c;现货白银是当前国际上最为流行、交投最为活跃的白银投资方式&#xff0c;其交易市场遍布全球&#xff0c;包括伦敦、苏黎世、纽约、芝加哥及香港等主要市场&#xff0c;是一种以杠杆交易和做市商的形式进行的现货交易。 现货白银可以说是当下交易模…

对String类的深入理解

String类&#xff1a; String类相信大家对这个类并不陌生&#xff0c;这就是我们熟悉的字符串类型&#xff0c;但是我们一开始只知道它是用来定义字符串的&#xff0c;并不知道它的底层原理&#xff0c;这里我们就来简单的分析一下String的底层原理&#xff0c;首先我们来看一下…

Django回顾 - 6 Ajax

【1】Ajax 定义&#xff1a; 异步Javscript和XML 作用&#xff1a; Javascript语言与服务器(django)进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML,现在更多使用json数据&#xff09; 同步交互和异步交互&#xff1a; 1、同步交互&…

IO多路复用(新)

1.前景回顾 无论是阻塞IO还是非阻塞IO&#xff0c;用户应用在一阶段都需要调用recvfrom来获取数据&#xff0c;差别在于无数据时的处理方案&#xff1a; 如果调用recvfrom时&#xff0c;恰好内核没有数据&#xff0c;那么阻塞IO会使用户进程阻塞&#xff0c;非阻塞IO使CPU进行空…

Python通过 psd-tools 解析 PSD 文件

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com PSD&#xff08;Photoshop Document&#xff09;是Adobe Photoshop软件中使用的图像文件格式&#xff0c;包含图层、通道、蒙版等信息。在Python中&#xff0c;我们可以使用 psd-tools 库来解析和处理PSD文件。本…

180天Java从入门到就业-Day04-01Java程序流程控制介绍、Java分支结构if语句

1.程序流程控制介绍 1.1 流程控制结构介绍 流程控制语句是用来控制程序中各语句执行顺序的语句,可以将语句组合成完成一定功能的逻辑模块。 一个程序会包含三种流程控制结构:顺序结构、分支结构、循环结构 顺序结构在没有使用程序流程控制语句(if-else语句、switch-case语…

人体姿态估计算法

人体姿态估计算法 1 什么是人体姿态估计2 基于经典传统和基于深度学习的方法2.1 基于经典传统的人体姿态估计算法2.2 基于深度学习的人体姿态估计算法OpenPoseAlphaPose (RMPE) 3 算法应用4 Paper 人体姿态估计在现实中的应用场景很丰富&#xff0c;如下 动作捕捉&#xff1a;三…

AI Pika 生成进击的巨人动漫分镜案例

背景介绍 Pika 是一个使用 AI 生成和编辑视频的平台。它致力于通过 AI 技术使视频制作变得简单和无障碍。 Pika 1.0 是 Pika 的一个重大产品升级&#xff0c;包含了一个新的 AI 模型,可以在各种风格下生成和编辑视频,如 3D 动画&#xff0c;动漫&#xff0c;卡通和电影风格。…

一篇文章带你详细了解C++智能指针

一篇文章带你详细了解C智能指针 为什么要有智能指针内存泄漏1.什么是内存泄漏&#xff0c;它的危害是什么2.内存泄漏的分类3.如何避免内存泄漏 智能指针的使用及原理1.RAII2.智能指针的原理3.auto_ptr4.unique_ptr5.shared_ptr6.weak_ptr 为什么要有智能指针 C引入智能指针的主…

QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』

前文链接&#xff1a;QGraphicsView实现简易地图6『异步加载-单瓦片-无底图』 前一篇文章提到的异步单瓦片加载&#xff0c;是指线程每准备好一个瓦片数据后&#xff0c;立刻抛出信号让主线程加载。而本篇异步多瓦片加载是指线程准备好所有瓦片数据后&#xff0c;一起抛出信号让…