当MySql中的表为空时,无法插入行

时间:2011-08-24 11:00:39

标签: mysql

我想在表格中不存在名称时插入一行。

当桌子为空时,它不能插入任何东西,任何人都可以帮助我吗?

这是我的代码:

INSERT INTO `ediftpdb`.`users`(
      name
      ,passwd
      ,vendor
    )
    SELECT
      'L001'
      ,'12345678a'
      ,'MKTPLS'
    FROM `ediftpdb`.`users`
    WHERE NOT EXISTS (SELECT * FROM `ediftpdb`.`users` WHERE name='L001' AND vendor = 'MKTPLS' ) LIMIT 1;

P.S。 我找到了一些有趣的东西,当ediftpdbusers为空时,代码如下所示不返回任何内容。

SELECT
  'L001'
  ,'12345678a'
  ,'MKTPLS'
FROM `ediftpdb`.`users`

2 个答案:

答案 0 :(得分:2)

正如@Martin Smith指出的,当表ediftpdb.users为空时,FROM ediftpdb.users 结果没有行。如果它有100行,那么你的语句会尝试将INSERT 100条(相同的)记录放入表中。

试试这个:

INSERT INTO
     ...
    SELECT
      'L001'
      ,'12345678a'
      ,'MKTPLS'
    FROM (SELECT 1) AS dummy
    WHERE NOT EXISTS ...

答案 1 :(得分:2)

更好的方法是在名称和供应商列上创建唯一的多部分索引:

CREATE UNIQUE INDEX name_vendor ON ediftpdb.users( name, vendor )

然后:

INSERT IGNORE INTO ediftpdb.users ( name, passwd, vendor )
  VALUES ( 'L001', '12345678a', 'MKTPLS' )

将完全按照您的意愿行事。