INSERT INTO语句的一些问题

时间:2014-09-24 07:55:19

标签: mysql sql

我有这个mysql语法:

INSERT INTO `utilizatori`(
  utilizator
)
SELECT
  'Mama'
FROM
  `utilizatori`
WHERE
   NOT EXISTS (SELECT  `utilizator` FROM `utilizatori` WHERE utilizator='Mama')

utilizatori是一个表格,utilizator是一列,Mama是一个值

这个语法只有在它不存在的情况下才会在表中插入一个值。如果值存在则不会创建它,所以直到现在它工作正常,但是如果没有'Mama'值,那么它将插入它..唯一的问题是它会多次插入它。例如,如果我有4行,它将插入'妈妈'值4次,创建4行。任何想法??

4 个答案:

答案 0 :(得分:2)

通过utilizator字段unique,我可以更轻松,更清晰地完成任务。

在这种情况下,当你为'Mama'添加现有值utilizator的新行时:mysql会返回错误代码:1062,并且不允许用户拥有表中包含Mama的多行。

所以当你运行查询时:

INSERT INTO `utilizatori` (utilizator) VALUES ('Mama')

您可以检查MySQL是否返回任何错误,但最好检查受影响的行数,如果插入成功,则等于1,否则为0

检查机制取决于您用于连接数据库的语言和驱动程序。

由于您选择了PHP代码,因此您可能正在使用PDO而不是

$statement->rowCount(); // $statement = PDOStatement, I assume you know this thing well

会给你想要的结果

最后一个简单示例:

...
if ($statement->rowCount())
{
    echo "Cool! You have been added to database";
}
else 
{
    echo "Hmms! Are you trying to duplicate something?";
}

答案 1 :(得分:1)

尝试使用group by:

INSERT INTO `utilizatori`(
  utilizator
)
SELECT
  'Mama'
FROM
  `utilizatori`
WHERE
   NOT EXISTS (SELECT  `utilizator` FROM `utilizatori` WHERE utilizator='Mama')
group by utilizator

答案 2 :(得分:1)

你基本上是这样做的:

SELECT ... WHERE NOT EXISTS

...并将其插入您的表格中。如评论中所述,只需将您的utilizator字段设为唯一,然后从查询中删除整个SELECT部分。

答案 3 :(得分:1)

缺少列...

INSERT INTO `utilizatori`(
    utilizator
)
SELECT
  'Mama'
FROM
  `utilizatori`
WHERE
  'Mama'
   NOT EXISTS (SELECT  `utilizator` FROM `utilizatori` WHERE utilizator='Mama')