CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order` varchar(255) DEFAULT NULL,
`des` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;create trigger trigger_test before insert on test
for each row
begin
set new.order =concat('Ord',lpad(cast(new.id as char),5,'0'));
end;不行啊,得到的是00000想要如下效果
id order des
1 00001
2 00002
咋么才能做到啊SQL
解决方案 »
- 我的一个MySql数据库,每天数据库日志文件太大了,17G,能不能设置为不记录日志文件
- 求一个编写mysql存储过程的工具
- 生产库的主从复制报错,如何小心翼翼地一步步解决呢?
- 修改表名的问题
- 如何看tomcat的启动参数知道 java和mysql各自的内存占据比例
- 有没有人修改过(阅读过)MySQL全文检索(FELLTEXT)算法的大牛?
- mysql储存过程的问题
- unique对于数据插入的限制问题
- 在LINUX下,怎样设置最大连接数
- 批量查询B表(违禁品库)中的违禁品词库,返回A表,返回匹配的第一个词即可
- 求救odbc 连接 mysql5.0.95 无法通过认证
- 新手求教!如何将文本导入MYSQL数据库表中
试试
我需要的是order后面的数要和id保持一致
insert into test(des) values('中国');
select * from test;
create trigger trigger_test before insert on test
for each row
begin
set new.order =concat('Ord',right(concat('0000',new.id),5));
end;insert into test(des) values('中国');
select * from test;这样也不行哦,和原来一样的仍是ord00000
只有在insert into test(id) values(6); 这样才可以
而这样的insert into test(des) values('中国'); new.id好像就取不到id
create trigger trigger_test before insert on test
for each row
begin
declare n int;
select max(id) into n from test;
if n is null then
set n=1;
else
set n=n+1;
end if;
case
when n<10 && n>=0 then
set new.order=concat('ord','0000',cast(n as char));
when n<100 && n>=10 then
set new.order=concat('ord','000',cast(n as char));
when n<1000 && n>=100 then
set new.order=concat('ord','00',cast(n as char));
when n<10000 && n>=1000 then
set new.order=concat('ord','0',cast(n as char));
else
set new.order=concat('ord',cast(n as char));
end case;
end //
DELIMITER $$
CREATE TRIGGER trigger_test BEFORE INSERT ON testa
FOR EACH ROW BEGIN
SET new.order =CONCAT('Ord',RIGHT(CONCAT('0000',LAST_INSERT_ID()+1),5));
END$$
DELIMITER ;