MySQL设置编号自增(auto_increment)&& 触发器 - - Navicat Premium 12
auto_increment 的作用在数据库中,我们往往会遇见插入记录时要设置记录 id 自增的问题,那么我们如何做到呢?其实 auto_increment 就可以做到啦!!!使用方法首先它是创表时用到的用于主键的自增关于语句的话(当然只是一部分啦!!)id INT auto_increment PRIMARY KEY,敲重点!实战来啦创建员工employee表、部门变动历史dept_histor
·
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';
- 验证结果



更多推荐



所有评论(0)