目前MySQL没有子查询,你去看这里FAQ,版主有整理的。

解决方案 »

  1.   

    将 tA 的 id  字段设为自增然后你可以通过下面两个语句来实现INSERT INTO `tA` SET id = NULL;
    INSERT INTO `tB` SET id = LAST_INSERT_ID();
      

  2.   

    楼上的不太明白您的意思写一句insert不行吗?
      

  3.   

    不可以用一条语句来实现至于 LAST_INSERT_ID() 函数,
    可以查看 MySQL用户手册,
    并自已试验一下,同一个连接会话在向一个自增字段里插入一个数据后,
    用 LAST_INSERT_ID() 所得到的就是前一插入语句的自增值,
    这个值是在服务器端维护的,
    其它用户插入新数据不会影响到该连接用户使用该函数所得返回值,
      

  4.   

    呵呵,
    你可以运行两个 mysql.exe 来建立两个连接会话       A                                            B
     |     INSERT INTO `tA` SET id = NULL;  
     | 时  SELECT LAST_INSERT_ID();                     INSERT INTO `tA` SET id = NULL;
     | 间     ->  1
     | 顺  SELECT LAST_INSERT_ID();                     SELECT LAST_INSERT_ID(); 
     v 序     ->  1                                        ->  2
      

  5.   

    呵呵,
    你可以运行两个 mysql.exe 来建立两个连接会话       A                                     B
     |     INSERT INTO `tA` SET id = NULL;  
     | 时  SELECT LAST_INSERT_ID();              INSERT INTO `tA` SET id = NULL;
     | 间     ->  1
     | 顺  SELECT LAST_INSERT_ID();              SELECT LAST_INSERT_ID(); 
     v 序     ->  1                              ->  2 A 用户先插入一个记录
    查询 LAST_INSERT_ID() 返回值 1
    当 A 用户查询时,B 用户也插入了一个新记录,
    在 B 插入新记录后,A 查询 LAST_INSERT_ID() 还是得 1,
    而 B 用户查询 LAST_INSERT_ID() 得2
      

  6.   

    当 A 用户查询时,B 用户也插入了一个新记录,
    是A的动作在先还是B的?
    如果同一时刻B也插入数据,我怎么觉得A查询时得到的应该是2呢。(受java同步影响)
    那这个last_insert_id()有啥用呢?只是得到一个值啊?
      

  7.   

    呵呵,
    按时间 A 的先,所以 A 的为1
    LAST_INSERT_ID()  顾名思义就是上一条插入时的ID
    它不受其它用户的影响
    你可以用 MySQL 客户端试一试,
    方法如上