作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] MySQL 栏位自动给值问题
时间Sun Sep 2 00:50:43 2012
※ 引述《herman602 (奸商)》之铭言:
: 我现在资料表中有个栏位叫做id
: 是AUTO_INCREMENT的
: 我想新增一个栏位叫做SORT
: 然後新增的时候就自动把值设成跟ID一样
: 请问要怎麽做呢
我的作法比较麻烦一点,而且因为使用到 Trigger 的缘故,限定在 MySQL 5.x
版之後才能执行。
首先,准备一个给号表(它的任务有一点点像 Oracle 的 Sequence 物件),该
资料表有一个 AUTO_INCREMENT 栏位,在我们在新增资料之後,可透过 MySQL 的
LAST_INSERT_ID() 查出新的序号是多少。
其次,针对我们的目标资料表,写一个 BEFORE 型的 Trigger,逻辑大致上是:
1. 在 Trigger 新增一笔资料到给号表。
2. 查出 LAST_INSERT_ID() 的值。
3. 将上个步骤的序号指定给 NEW.id 与 MEW.sort 栏位。
<Note> NEW 物件,指的是触发新增 Trigger 的那笔记录。
实际写法请参酌下列这段实验程式:
use test;
create table labSequence
(
num int auto_increment, primary key (num)
) auto_increment = 1;
create table lab
(
id int auto_increment,
data int,
sort int,
primary key (id)
);
drop trigger if exists SetSortValueOnLabInsert;
delimiter $$
create trigger SetSortValueOnLabInsert
before insert on lab
for each row
begin
insert into labSequence values (null);
set NEW.id = last_insert_id();
set NEW.sort = last_insert_id();
end;
$$
delimiter ;
insert into lab (data) values (100);
insert into lab (data) values (200);
insert into lab (data) values (300);
select * from lab;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.170.134.7
1F:推 herman602:感谢! 我来试试看! 09/02 00:53
2F:推 herman602:感谢! 的确可以! 谢谢! 09/04 18:56