【数据库】之MYSQL基本语法

实验2-用户权限及角色

 1.创建一个数据库用户myuser_201911074,密码为123
 CREATE USER myuser_201911074 IDENTIFIED WITH mysql_native_password BY '123';
 2.将数据库mydb_201911074上所有权限授予题1创建的用户
 GRANT ALL ON mydb_201911074 TO myuser_201911074;
 3.查询题1创建的用户拥有哪些权限
 SHOW GRANTS FOR myuser_201911074;
 4.撤销题1创建的用户拥有的权限
 REVOKE ALL ON mydb_201911074 FROM myuser_201911074;
 5.创建一个角色role_201911074
 CREATE  ROLE role_201911074;
 6.将数据库mydb_201911074上所有权限授予题5创建的角色
 GRANT ALL ON mydb_201911074 TO role_201911074;
 7.将角色role_201911074 授予题2创建的用户
 GRANT ALL ON role_20191074 TO myuser_201911074;
 8. 修改题1创建的用户,将所有角色设置为默认角色
 ALTER USER myuser_201911074 DEFAULT ROLE role_201911074;
 9.修改题1创建的用户的口令为pwd123,
 ALTER USER myuser_201911074 IDENTIFIED WITH mysql_native_password BY 'pwd123';
 10.以题1创建的用户访问数据库,并创建表( CREATE TABLE test(id INT); )
 CREATE TABLE test(id INT);
 11.删除题5创建的角色
 DROP ROLE role_201911074;
 12.删除题1创建的用户
 DROP USER myuser_201911074;

实验3-数据库和表

 创建数据库mydb_201911074,并切换到该数据库
 CREATE DATABASE mydb_201911074;
 USE mydb_201911074;
 创建一个员工表emp_201911074,包含员工编号(empid),员工姓名(empname),员工性别(empgender)
 USE mysql;
 CREATE TABLE emp_201911074(empid INT,empname VARCHAR(20),empgender VARCHAR(1));
 创建一个表空间mytbs_201911074,对应磁盘文件mytbs_201911074.ibd
 CREATE TABLESPACE mytbs_201911074 ADD DATAFILE'mytbs_201911074.ibd';
 显示表格emp_201911074
 DESC emp_201911074;
 修改表emp_201911074,将其存储在表空间mytbs_201911074
 ALTER TABLE emp_201911074 TABLESPACE=mytbs_201911074;
 修改表emp_201911074,将其表空间修改为file_per_table
 ALTER TABLE emp_201911074 TABLESPACE=innodb_file_per_table;
 修改表emp_201911074,增加列empage,放在empname后面
 ALTER TABLE emp_201911074 ADD COLUMN empage INT AFTER empname;
 修改表emp_201911074,将empname放在第一列
 ALTER TABLE emp_201911074 MODIFY empname VARCHAR(20) FIRST;
 修改表emp_201911074,将empname的类型修改为varchar(100)
 ALTER TABLE emp_201911074 MODIFY empname VARCHAR(100);
 修改表emp_201911074,删除列empage
 ALTER TABLE emp_201911074 DROP COLUMN empage;
 删除表emp_201911074,删除表空间mytbs_201911074,删除数据库database
 DROP TABLE emp_201911074;
 DROP TABLESPACE mytbs_201911074;
 DROP DATABASE mydb_201911074;

实验4-表数据操作

 1.创建一个员工表emp_201911074,包含员工编号(empid),员工姓名(empname),员工性别(empgender),
 员工入职日期(startdate),员工工资(salary),要求empid自增,同时设为主键PRIMARY KEY
 CREATE TABLE emp_201911074(empid INT AUTO_INCREMENT PRIMARY KEY,empname VARCHAR(20),
 empgender VARCHAR(10),startdate DATETIME,salary NUMERIC(10,2));
 2.将下表数据插入题1创建的表中
 empid   empname empgender   startdate   salary
 1         李飞    男         1999-07-01    8000
 2        赵美琪    女         2000-10-01    6000
 3        齐凌凌    女         1992-08-10    12000
 4         朱凯    男           2005-06-01  4500
 INSERT INTO emp_201911074 VALUES(1,'李飞','男','1999-07-01',8000),
 (2,'赵美琪','女','2000-10-01',6000),
 (3,'齐凌凌','女','1992-08-10',12000),
 (4,'朱凯','男','2005-06-01',4500);
 3.修改题1创建的表,增加一列员工年龄empage,放在empname后
 ALTER TABLE emp_201911074 ADD COLUMN empage INT AFTER empname;
 4.修改题1创建表的数据,将 齐凌凌 的年龄设为50
 UPDATE emp_201911074 SET empage=50 WHERE empname='齐凌凌';
 5.修改题1创建表的数据,将 李飞 的年龄设为45
 UPDATE emp_201911074 SET empage=45 WHERE empname='李飞';
 6.修改题1创建表的数据,将 赵美琪 的年龄设为40
 UPDATE emp_201911074 SET empage=40 WHERE empname='赵美琪';
 7.修改题1创建表的数据,将 朱凯 的年龄设为35
 UPDATE emp_201911074 SET empage=35 WHERE empname='朱凯';
 8.修改题1创建表的数据,将工资较低的两名员工工资上调500,要求使用order by和limit语句
 UPDATE emp_201911074 SET salary=salary+500 ORDER BY salary LIMIT 2;
 9.修改题1创建表的数据,将年龄较大的两名员工工资上调800,要求使用order by和limit语句
 UPDATE emp_201911074 SET salary=salary+800 ORDER BY empage DESC LIMIT 2;
 10.修改题1创建表的数据,将性别“男”修改成“male”,“女”修改成“female”
 UPDATE emp_201911074 SET  empgender='male' WHERE empgender='男';
 UPDATE emp_201911074 SET  empgender='female' WHERE empgender='女';
 11.修改题1创建表的数据,按年龄上调所有人工资,每1岁增加10元,例如某员工50岁,那么工资就增加50*10一共500元
 UPDATE emp_201911074 SET salary=salary+empage*10;
 12.从题1创建的表中删除年龄大于50且工资大于10000的员工
 DELETE FROM emp_201911074 WHERE empage>50 AND salary>10000;

实验5-表约束

 1. 创建院系表dept_201911074,包含院系编号dno,院系名dname,其中dno为主键,且院系名不能为空
 CREATE TABLE dept_201911074(dno INT PRIMARY KEY,dname VARCHAR(20) NOT NULL);
 2. 在院系表中插入两行数据
 dno dname
 1   计算机
 2   外语
 INSERT INTO dept_201911074 VALUES(1,'计算机'),(2,'外语');
 3. 创建教师表teacher_201911074,包含教师编号tno 主键,教师姓名tname 非空,教工身份证号 tid 唯一,教师性别tgender,教工年龄 tage,所属院系编号 deptid
 CREATE TABLE teacher_201911074(tno INT PRIMARY KEY,tname VARCHAR(20) NOT NULL,tid VARCHAR(18) UNIQUE,tgender VARCHAR(4),tage INT,deptid INT);
 4. 在表teacher_201911074的列deptid上增加外键约束,引用dept_201911074 表的dno列
 ALTER TABLE teacher_201911074 ADD FOREIGN KEY (deptid) REFERENCES dept_201911074(dno);
 5. 在教师表teacher_201911074 插入如下数据
 tno tname         tid            tgender tage   deptid
 101 张潇      210204198008111234  男       40      1
 102 李大明     211220197809101235  女      42       2
 INSERT INTO teacher_201911074 VALUES(101,'张潇','210204198008111234','男',40,1),
 (102,'李大明','211220197809101235','女',42,2);
 6. 查询教师表teacher_201911074 上的约束
 SHOW CREATE TABLE teacher_201911074;
 7. 删除教师表teacher_201911074 上的外键约束
 ALTER TABLE teacher_201911074 DROP FOREIGN KEY teacher_201911074_ibfk_1;
 8.在教师表teacher_201911074 上增加外键约束,当院系表dept_201911074 修改主键列值时级联更新教师表teacher_201911074,当院系表dept_201911074删除数据时将教师表teacher_201911074中对应教师的所属院系编号置成null。
 ALTER TABLE teacher_201911074 ADD FOREIGN KEY (deptid) REFERENCES dept_201911074(dno)
 ON UPDATE CASCADE
 ON DELETE SET NULL;

实验6-单表数据查询

基于如下员工表:

eid员工编号ename员工姓名age年龄startdate入职日期gender性别salary工资dname所属部门
101王明302012-07-104800财务
102李飞302012-07-314800财务
103朱启亮352008-10-016000后勤
104朱菲菲362009-07-015800后勤
105李丽2012-01-015000财务
106李晓451998-07-019000财务
 CREATE TABLE emp_201911074(eid INT PRIMARY KEY,ename VARCHAR(20),age INT,startdate DATETIME,gender VARCHAR(10),salary INT,dname VARCHAR(20));
 INSERT INTO emp_201911074 VALUES
 (101,'王明',30,'2012-07-10','男',4800,'财务'),
 (102,'李飞',30,'2012-07-31','男',4800,'财务'),
 (103,'朱启亮',35,'2008-10-01','男',6000,'后勤'),
 (104,'朱菲菲',36,'2009-07-01','女',5800,'后勤'),
 (105,'李丽',NULL,'2012-01-01','女',5000,'财务'),
 (106,'李晓',45,'1998-07-01','男',9000,'财务');
 ​
 1. 查询所有员工信息
 SELECT * FROM emp_201911074;
 2. 查询所有姓李的员工姓名、所属部门和工资
 SELECT ename,dname,salary FROM emp_201911074 WHERE ename LIKE '朱%';
 3. 查询工资介于5000~8000的员工信息
 SELECT * FROM emp_201911074 WHERE salary BETWEEN 5000 AND 8000;
 4. 查询财务部门的男员工信息
 SELECT * FROM emp_201911074 WHERE dname='财务' AND gender='男';
 5. 查询2000年前入职的员工信息
 SELECT * FROM emp_201911074 WHERE startdate<'2000-01-01';
 6. 查询后勤部门年龄低于40的女员工信息
 SELECT * FROM emp_201911074 WHERE dname='后勤' AND age<40 AND gender='女';
 7. 查询男员工中工资较高的两个员工信息
 SELECT * FROM emp_201911074 WHERE gender='男' ORDER BY  salary DESC LIMIT 2;
 8. 查询员工信息,按工资从高到低排序,分页显示,每页显示5行,写出显示第一页数据的语句
 SELECT * FROM emp_201911074 ORDER BY salary DESC LIMIT 0,5;
 9. 统计员工人数、最高工资、最低工资和平均工资
 SELECT COUNT(*),MAX(salary),MIN(salary),AVG(salary) FROM emp_201911074;
 10. 统计每个部门的员工人数、最高工资、最低工资和平均工资
 SELECT COUNT(*),MAX(salary),MIN(salary),AVG(salary) FROM emp_201911074 GROUP BY dname;
 11. 统计每个部门工资大于5000的员工人数、最高工资、最低工资和平均工资
 SELECT COUNT(*),MAX(salary),MIN(salary),AVG(salary) FROM emp_201911074 WHERE salary>5000 GROUP BY dname;
 12. 统计每个姓氏的人数(使用substr函数取姓名中的姓)
 SELECT SUBSTR(ename,1,1),COUNT(*) FROM emp_201911074 GROUP BY SUBSTR(ename,1,1);
 13. 按入职年份统计人数(使用year函数取入职日期中的年份)
 SELECT YEAR(startdate),COUNT(*) FROM emp_201911074 GROUP BY YEAR(startdate);
 14. 统计每个姓氏的人数,显示人数大于2人的姓氏和人数
 SELECT SUBSTR(ename,1,1),COUNT(*) FROM emp_201911074 GROUP BY SUBSTR(ename,1,1) HAVING COUNT(*)>2;

实验7-连接查询和子查询

基于部门表dept和员工表emp完成题目

部门表 dept

字段类型说明
dnoint部门编号,主键
dnamevarchar(30)部门名称

员工表 emp

字段名类型说明
enoint员工编号,主键
enamevarchar(20)姓名
eageint年龄
egendervarchar(10)性别
salaryint工资
dnoint部门编号,外键,引用dept(dno)
 CREATE TABLE dept(
     dno INT PRIMARY KEY,
     dname VARCHAR(20)
 );
 CREATE TABLE emp(
     eno INT PRIMARY KEY,
     ename VARCHAR(20),
     eage INT,
     egender VARCHAR(20),
     salary INT,
     dno INT,
     FOREIGN KEY(eno) REFERENCES dept(dno)
 );
 INSERT INTO dept VALUES(1,'财务'),(2,'研发'),(3,'销售');
 ​
 INSERT INTO emp VALUES(101,'李敏', 30,'男',3000,1),(102,'赵一铭',32,'男',3500,1),(103,'李巧凤',40,'女',4000,1);  
 INSERT INTO emp VALUES(104,'朱阳爱',45,'男',5500,1),(105,'蔡敏敏',40,'女',4500,1),(106,'吴大刚',42,'男',4800,1);  
 INSERT INTO emp VALUES(107,'王晓红',36,'女',4000,1),(108,'滕格格',48,'男',6000,1),(109,'朱琳娜',55,'女',8000,1);  
 INSERT INTO emp VALUES(201,'郑琦',  40,'男',5000,2),(202,'牟琦',  50,'男',6000,2),(203,'杨薇',  52,'女',7000,2);  
 INSERT INTO emp VALUES(204,'张鸿鹄',26,'男',3000,2),(205,'李丽',  30,'女',3500,2),(206,'赵曼莎',35,'女',4200,2);  
 INSERT INTO emp VALUES(301,'赵鹏',  28,'男',3000,3),(302,'李丽芬',45,'女',5000,3),(303,'朱琳琳',50,'女',7000,3);
 1. 查询员工信息,要求输出 员工编号、姓名、性别、年龄以及所在部门名称
 SELECT eno,ename,egender,eage,dname FROM emp,dept WHERE dept.dno=emp.dno;
 2. 查询每个部门的信息,输出信息包括部门名称、员工人数、工资总额、最大工资、最小工资和平均工资
 SELECT dname,COUNT(eno),COUNT(salary),MAX(salary),MIN(salary),AVG(salary) FROM emp,dept WHERE dept.dno=emp.dno GROUP BY dname;
 3. 统计每个部门不同性别人数,输出信息包括部门名称、性别、人数
 SELECT dname,egender,COUNT(eno) FROM emp,dept WHERE dept.dno=emp.dno GROUP BY dname,egender;
 4. 查询每个部门的最小员工年龄,输出信息包括部门名称、最小年龄
 SELECT dname,MIN(eage) FROM emp,dept WHERE dept.dno=emp.dno GROUP BY dname;
 5. 查询每个部门每种性别的最小员工年龄,输出信息包括部门名称、最小年龄
 SELECT dname,MIN(eage) FROM emp,dept WHERE dept.dno=emp.dno GROUP BY dname,egender;
 6. 查询年龄大于所有员工平均年龄的员工信息,要求输出 员工编号、姓名、性别、年龄
 SELECT eno,ename,egender,eage FROM emp WHERE eage>(SELECT AVG(eage) FROM emp);
 7. 查询年龄最小的员工信息,要求输出 员工编号、姓名、性别、年龄
 SELECT eno,ename,egender,eage FROM emp WHERE eage=(SELECT MIN(eage)FROM emp);
 8. 查询年龄最小的员工信息,要求输出员工编号、姓名、性别、年龄以及所在部门名称
 SELECT eno,ename,egender,eage,dname FROM emp,dept WHERE dept.dno=emp.dno AND
 eage=(SELECT MIN(eage)FROM emp);
 9. 查询每个部门年龄最小的员工信息,要求输出 员工编号、姓名、性别、年龄和所属部门编号
 SELECT eno,ename,egender,eage,dno FROM emp e WHERE eage=(SELECT MIN(eage) FROM emp WHERE dno=e.dno);
 10. 查询每个部门年龄最小的员工信息,要求输出员工编号、姓名、性别、年龄以及所在部门名称
 SELECT eno,ename,egender,eage,dname FROM emp e,dept d WHERE e.dno=d.dno AND eage=(SELECT MIN(eage) FROM emp WHERE dno=e.dno);

实验8-索引和视图

基于部门表dept和员工表emp完成题目

部门表 dept

字段类型说明
dnoint部门编号,主键
dnamevarchar(30)部门名称

员工表 emp

字段名类型说明
enoint员工编号,主键
enamevarchar(20)姓名
eageint年龄
egendervarchar(10)性别
salaryint工资
dnoint部门编号,外键,引用dept(dno)
 CREATE TABLE dept(
     dno INT PRIMARY KEY,
     dname VARCHAR(20)
 );
 CREATE TABLE emp(
     eno INT PRIMARY KEY,
     ename VARCHAR(20),
     eage INT,
     egender VARCHAR(20),
     salary INT,
     dno INT,
     FOREIGN KEY(dno) REFERENCES dept(dno)
 );
 ​
 INSERT INTO dept VALUES(1,'财务'),(2,'研发'),(3,'销售');
 ​
 INSERT INTO emp VALUES(101,'李敏', 30,'男',3000,1),(102,'赵一铭',32,'男',3500,1),(103,'李巧凤',40,'女',4000,1);  
 INSERT INTO emp VALUES(104,'朱阳爱',45,'男',5500,1),(105,'蔡敏敏',40,'女',4500,1),(106,'吴大刚',42,'男',4800,1);  
 INSERT INTO emp VALUES(107,'王晓红',36,'女',4000,1),(108,'滕格格',48,'男',6000,1),(109,'朱琳娜',55,'女',8000,1);  
 INSERT INTO emp VALUES(201,'郑琦',  40,'男',5000,2),(202,'牟琦',  50,'男',6000,2),(203,'杨薇',  52,'女',7000,2);  
 INSERT INTO emp VALUES(204,'张鸿鹄',26,'男',3000,2),(205,'李丽',  30,'女',3500,2),(206,'赵曼莎',35,'女',4200,2);  
 INSERT INTO emp VALUES(301,'赵鹏',  28,'男',3000,3),(302,'李丽芬',45,'女',5000,3),(303,'朱琳琳',50,'女',7000,3);
 1. 查看部门表dept有哪些索引。
 SHOW INDEX FROM dept;
 2. 查看员工表emp有哪些索引。
 SHOW INDEX FROM emp;
 3. 在员工表emp的年龄列eage上增加一个索引emp_eage_idx(要求使用alter table语句进行增加)
 ALTER TABLE emp ADD INDEX emp_eage_idx(eage);
 4. 在员工表emp的姓名列ename上增加一个索引emp_ename_idx(要求使用create index语句进行增加)
 CREATE UNIQUE INDEX emp_ename_idx ON emp(ename);
 5.删除员工表emp上外键约束
 ALTER TABLE emp DROP FOREIGN KEY emp_ibfk_1;
 6.删除员工表emp的dno列上的索引
 ALTER TABLE emp DROP INDEX emp_ename_idx;
 7.创建视图v1,显示员工中年龄大于40的男员工姓名
 CREATE VIEW v1 AS SELECT ename FROM emp WHERE egender='男' AND eage>40;
 8.创建视图v2,显示员工中工资较高的前3名女员工信息
 CREATE VIEW v2 AS SELECT * FROM emp WHERE egender='女' ORDER BY salary DESC LIMIT 3;
 9.创建视图v3,显示工资最低的员工信息
 CREATE VIEW v3 AS SELECT * FROM emp WHERE salary=(SELECT MIN(salary) FROM emp);
 10.创建视图v4,显示男员工中年龄最小的员工信息
 CREATE VIEW v4 AS SELECT * FROM emp WHERE egender='男' and eage=(SELECT MIN(eage) FROM emp);
 11.创建视图v5,显示每个部门工资最高的员工姓名、工资和所在部门名
 CREATE VIEW v5 AS SELECT ename,salary,dname FROM emp e,dept d WHERE e.dno=d.dno 
 AND eage=(SELECT Max(salary) FROM emp WHERE dno=e.dno);
 12.删除视图v1、v2、v3、v4、v5
 DROP VIEW v1,v2,v3,v4,v5;

实验9-内置函数

基于员工表emp完成测试题目

字段名类型说明
enoint员工编号,主键
enamevarchar(20)姓名
eageint年龄
startdatedatetime入职日期
egendervarchar(10)性别
salaryint工资
dnameint部门名称
 CREATE TABLE emp(
     eno INT PRIMARY KEY,
     ename VARCHAR(20),
     eage INT,
     startdate DATETIME,
     egender VARCHAR(20),
     salary INT,
     dname VARCHAR(20)
 );
 INSERT INTO emp VALUES
 (101,'王 明',30,'2012-07-10','男',4800,'财务'),
 (102,'李 飞',30,'2012-07-31','男',4800,'财务'),
 (103,'朱启亮',35,'2008-10-01','男',6000,'后勤'),
 (104,'朱菲菲',36,'2009-07-01','女',5800,'后勤'),
 (105,'李 丽',NULL,'2012-01-01','女',5000,'财务'),
 (106,'李 晓',45,'1998-07-01','男',9000,'财务');
 ​
 1.查询姓名长度超过10个字符的员工信息。
 SELECT * FROM emp WHERE CHAR_LENGTH(ename)<10;
 2.查询入职年份是2012年的员工信息。
 SELECT * FROM emp WHERE YEAR(startdate)=2012;
 3.将员工姓名中的空格去掉
 UPDATE emp SET ename=REPLACE(ename,' ','');
 4.查询员工编号是101的姓氏
 SELECT SUBSTR(ename,1,1)FROM emp WHERE eno=101;
 5.查询员工姓名、所属部门以及工龄
 SELECT ename,dname,FLOOR(DATEDIFF(NOW(),startdate)/365)FROM emp;
 6.修改员工表增加工龄列workage
 ALTER TABLE emp ADD COLUMN worage INT;
 7.计算每个员工工龄并更新到workage列
 UPDATE emp SET worage=FLOOR(DATEDIFF(NOW(),startdate)/365) WHERE eno=eno;
 8.查询入职月份是1~6月的员工信息
 SELECT * FROM emp WHERE MONTH(startdate) BETWEEN 1 AND 6;
 9.查询入职月份正好是本月的员工信息
 SELECT * FROM emp WHERE MONTH(startdate)=MONTH(NOW());
 10.查询入职日期恰好是当时月末的员工信息
 SELECT * FROM emp WHERE LAST_DAY(startdate)=DATE(startdate);

实验10-过程函数

 1.编写一个函数func_add_201911074,完成两个数相加,函数带两个输入参数(相加的两个数),返回值返回两个数的和。
 DELIMITER $$
 DROP FUNCTION IF EXISTS func_add_201911074$$
 CREATE FUNCTION func_add_201911074(m INT,n INT) 
 RETURNS INT
 DETERMINISTIC
 BEGIN
 RETURN m+n;
 END $$
 DELIMITER ;
 ​
 SELECT func_add_201911074(1,2);
 2.编写一个函数func_jc_201911074,函数带1个输入参数n,返回值为1~n的累乘积。
 DELIMITER$$
 DROP FUNCTION IF EXISTS func_jc_201911074$$
 CREATE FUNCTION func_jc_201911074(n INT)
 RETURNS INT  
 DETERMINISTIC
 BEGIN
 DECLARE r INT DEFAULT 1;
 WHILE n>0 DO
 SET r=r*n;
 SET n=n-1;
 END WHILE;
 RETURN r;
 END$$
 DELIMITER ;
 ​
 SELECT func_jc_201911074(4);
 3.编写一个存储过程sp_add_201911074,完成两个数相加,过程带两个输入参数(相加的两个数),一个输出参数(两个数的和,输出参数定义时在参数名前添加关键字OUT)。
 DELIMITER$$
 DROP PROCEDURE IF EXISTS sp_add_201911074$$
 CREATE PROCEDURE sp_add_201911074(m INT,n INT,OUT r INT)
 BEGIN
 SET r=m+n;
 END$$
 DELIMITER ;
 CALL sp_add_201911074(4,5,@r);
 SELECT @r;

4.编写一个存储过程sp_split,完成文件全路径名的拆分,函数带一个输入参数(全路径文件名,比如“c:\doc\course\db\text.txt”),两个输出参数分别返回路径和文件名(“c:\doc\course\db”, “text.txt”)。

 

实验11-触发器

 1.假设表
     CREATE TABLE emp(id INT,NAME VARCHAR(20),salary INT,dname VARCHAR(20),startdate DATE);
     编写一个触发器emp_trig,当在表上执行insert时触发器被触发,插入员工数据时根据入职年份以及入职顺序自动生成员工编号id。
 INSERT INTO emp VALUES(NULL,'张三',5000,'财务','2020-10-01'),(2,'张三峰',6000,'财务','2020-6-01'),(23,'张四峰',8000,'财务','2001-6-20');
 触发器会根据入职日期取入职年份2020,如果是2020年入职的第一个员工,则员工编号为2020001
 DELIMITER $$
 DROP TRIGGER IF EXISTS emp_trig$$
 CREATE TRIGGER emp_trig
 BEFORE INSERT 
 ON emp FOR EACH ROW
 BEGIN
 DECLARE maxid INT;
 SELECT IFNULL(MAX(id),YEAR(new.startdate)*1000)+1 INTO maxid FROM emp WHERE YEAR(startdate)=YEAR(new.startdate);
 SET new.id=maxid;
 END$$
 DELIMITER ;
 ​
 SELECT * FROM emp;
 SHOW CREATE TRIGGER emp_trig;
 2.创建一个事件,每月月末最后一天的晚上23点59分59秒运行一次,清除日志表log中的三个月前的数据。
 CREATE TABLE applog(msgdate DATE,msg VARCHAR(100));
 INSERT INTO applog VALUES
 ('2019-06-01','this is test log message.'),
 ('2020-08-01','this is test log message.'),
 ('2020-09-01','this is test log message.'),
 ('2020-10-01','this is test log message.');
 ​
 DELIMITER$$
 DROP EVENT IF EXISTS clearlog$$
 CREATE EVENT clearlog 
 ON SCHEDULE EVERY 1 MONTH STARTS '2020-12-31 23:59:59' DO
 BEGIN
 DELETE FROM applog WHERE msgdate<ADDDATE(NOW(),INTERVAL -3 MONTH);
 END $$
 DELIMITER ;
 SELECT * FROM applog;
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程远泊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值