for example :A(id, name, )
-- 表A,主分键是id, 自增的
-- 现在要插入一条语句,里面的值要和id一样,怎么做到?insert A(name,)values('job',id); -- 我试了下,这样不行
-- 表A,主分键是id, 自增的
-- 现在要插入一条语句,里面的值要和id一样,怎么做到?insert A(name,)values('job',id); -- 我试了下,这样不行
update A set mard=id where id =last_insert_id();
insert A(name,)values('job',last_insert_id()+1); 但:
1) 并发问题
2) insert ... values (1,2),(2,3),(3,4)... 这种一个语句插入多条记录时问题均无法处理。
同意
insert A(name,)values('job',last_insert_id()+1);
这个方法只能一条一条插入 LZ需要注意了~
1. 实现last_insert_id函数时,基于在一个连接内多个插入的last id,还是整个数据库的 ?2. 为什么insert(name,)values('job', name); 这样写字段有值,而把后面的name换成id却没有,
数据库在插入时不是生成自增主键的吗? 为什么不能调用?
我想第二个问,应该是当values()传值时,自增主键还没生成,所以为空,当执行values()发现为空才自动生成
CREATE TABLE `a` (
`aa` int(11) NOT NULL AUTO_INCREMENT,
`bb` int(11) NOT NULL,
`cc` varchar(20) DEFAULT NULL,
PRIMARY KEY (`aa`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;drop trigger if exists trig1;
CREATE DEFINER=`cpc`@`localhost` TRIGGER `test`.`trig1` BEFORE INSERT ON test.a FOR EACH ROW
BEGIN
set new.bb=(select if(isnull(aa),1,aa+1) from (select max(aa) as aa from a) tmp);
END;insert into a (
aa
,bb
,cc
) VALUES (
0 -- aa
,0 -- bb
,'1' -- cc
)
select * from a;
整个,其实你自己做个试验就知道了。另外帮助手册中也有详细说明。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
insert into a values(0,0,'3'),(0,0,'4');
用触发器可解决一次插入多条的问题。