for example :A(id, name, ) 
-- 表A,主分键是id, 自增的
-- 现在要插入一条语句,里面的值要和id一样,怎么做到?insert A(name,)values('job',id); -- 我试了下,这样不行

解决方案 »

  1.   

    insert A(name)values('job');
    update A set mard=id where id =last_insert_id();
      

  2.   

    可以近似地用下面语句
    insert A(name,)values('job',last_insert_id()+1); 但:
    1) 并发问题
    2) insert ... values (1,2),(2,3),(3,4)... 这种一个语句插入多条记录时问题均无法处理。
      

  3.   


    同意 
    insert A(name,)values('job',last_insert_id()+1); 
    这个方法只能一条一条插入 LZ需要注意了~
      

  4.   

    我也考虑过用last_insert_id的并发问题,关于在这里有两点不清楚,请教一下大家。
    1. 实现last_insert_id函数时,基于在一个连接内多个插入的last id,还是整个数据库的 ?2. 为什么insert(name,)values('job', name); 这样写字段有值,而把后面的name换成id却没有,
       数据库在插入时不是生成自增主键的吗? 为什么不能调用?
    我想第二个问,应该是当values()传值时,自增主键还没生成,所以为空,当执行values()发现为空才自动生成
      

  5.   


    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;
      

  6.   

    1. 实现last_insert_id函数时,基于在一个连接内多个插入的last id,还是整个数据库的 ?
    整个,其实你自己做个试验就知道了。另外帮助手册中也有详细说明。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  7.   

    AUTO_INCREMENT 是提交后再生成的。
      

  8.   


    insert into a values(0,0,'3'),(0,0,'4');
    用触发器可解决一次插入多条的问题。