auto_increment 的作用

在数据库中,我们往往会遇见插入记录时要设置记录 id 自增的问题,那么我们如何做到呢?
其实 auto_increment 就可以做到啦!!!

使用方法
  • 首先它是创表时用到的
  • 用于主键的自增(默认基值为1,递增数1)

关于语句的话(当然只是一部分啦!!)

 id INT auto_increment PRIMARY KEY,

敲重点!实战来啦

创建员工employee表、部门变动历史dept_history表,工资变动历史sal_history表

  • 创建emp库
CREATE DATABASE emp DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  • 创建employee表
USE emp;
CREATE TABLE employee
(
 empid VARCHAR(5) PRIMARY KEY, -- 员工编号
 empname VARCHAR(10), -- 员工姓名
 dept VARCHAR(15), -- 所在部门
 salary INT, -- 工资
 uptime DATE, -- 修改时间
 stutus INT -- 状态(1表示在职,0表示离职)
);
  • 创建dept_history表
CREATE TABLE dept_history
(
 dhid INT auto_increment PRIMARY KEY, -- 部门变动编号(自动增长,无需赋值)
 empid VARCHAR(5), -- 员工编号
 olddept VARCHAR(15), -- 调动前的部门(新入职的员工old值记为NULL)
 newdept VARCHAR(15), -- 调动后的部门
 uptime DATE, -- 修改时间
 FOREIGN KEY (empid) REFERENCES employee(empid)
);
  • 创建sal_history表
CREATE TABLE sal_history
(
 shid INT auto_increment PRIMARY KEY, -- 工资变动编号(自动增长,无需赋值)
 empid VARCHAR(5), -- 员工编号
 oldsal INT, -- 变动前的工资
 newsal INT, -- 变动后的工资
 uptime DATE, -- 修改时间
 FOREIGN KEY (empid) REFERENCES employee(empid)
);
任务一:

当新职工入职时,员工信息表将插入1条数据。同时,触发器在部门变动历史中增加1条记录,其中olddept值为null;在工资变动历史中增加1条记录,其中oldsal值为0。

  • 创建insert触发器
DELIMITER $
CREATE TRIGGER emp_insert
AFTER INSERT ON employee
FOR EACH ROW
BEGIN
 INSERT INTO dept_history(empid,olddept,newdept,uptime) VALUES(new.empid,null,new.dept,new.uptime);
 INSERT INTO sal_history(empid,oldsal,newsal,uptime) VALUES(new.empid,0,new.salary,new.uptime);
END$
DELIMITER ;
  • 插入数据
INSERT INTO employee VALUES('101','李华','策划部',6000,'2001-02-18',1);
INSERT INTO employee VALUES('102','王梅','信息部',8000,'2001-04-18',1);
INSERT INTO employee VALUES('103','王刚','信息部',9000,'2001-04-19',1);
INSERT INTO employee VALUES('104','梅芳','宣传部',4000,'2001-03-19',1);
  • 验证结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
任务二

当新职工部门或工资发生变化时,触发器执行以下操作。若部门发生变动,则在变动历史中增加1条记录;若工资发生变动,则在工资变动历史中增加1条记录。

  • 创建update触发器
DELIMITER $
CREATE TRIGGER emp_update
AFTER UPDATE ON employee
FOR EACH ROW
BEGIN
 IF(new.dept!=old.dept OR new.stutus=0)
  THEN
   INSERT INTO dept_history(empid,olddept,newdept,uptime) VALUES(new.empid,old.dept,new.dept,new.uptime);
 END IF;
 IF(new.salary!=old.salary OR new.stutus=0)
  THEN
   INSERT INTO sal_history(empid,oldsal,newsal,uptime) VALUES(new.empid,old.salary,new.salary,new.uptime);
 END IF;
END$
DELIMITER ;
  • 更新数据
UPDATE employee
SET dept=null,salary=0,uptime='2002-02-18',stutus=0
WHERE empid='101';
UPDATE employee
SET dept='技术部',uptime='2002-09-18'
WHERE empid='102';
UPDATE employee
SET salary=6000,uptime='2002-02-20'
WHERE empid='104';
  • 验证结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐