• 【数据库】之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
  • 相关阅读:
    java八股文_1
    2020java面试总结
    WMI使用学习笔记
    Navicat for MySQL 11软件下载及安装教程
    【ESP32】Arduino C语言语法总结
    python使用matplotlib可视化线图(line plot)、将可视化图像的图例(legend)放置在图像外部、左侧区域
    rpc简介
    触摸控件——键盘录入之ASCII录入
    [C++]vector遍历方式4种
    【JavaScript】video标签配置及相关事件:
  • 原文地址:https://blog.csdn.net/distant_Rove666/article/details/126494212