2014-09-24 60 views
0

我有這樣的MySQL語法:一些問題INSERT INTO語句

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

utilizatori是一個表,utilizator是一列,Mama是一種價值

這句法將表只有插入值它不存在。如果值存在它不會創建它,所以直到現在它工作正常,但如果沒有'媽媽'值,那麼它會插入它...唯一的問題是,它會插入多次。例如,如果我有4行,它會插入'媽媽'值4次,創建4行。任何想法?

+1

這是一個輸入? 'SELECT'Mama'' sidenote:如果它是一個標識符,它應該使用反引號 – Ghost 2014-09-24 07:57:25

+0

是的,這是一個輸入,當用戶創建一個帳戶時,我想檢查用戶名是否存在 – Memphistoles 2014-09-24 08:00:19

+2

你可以簡單地將'utilizator'字段設置爲'獨一無二「,所以你不需要每次檢查它是否已經存在,如果它沒有插入,這意味着它已經存在 – 2014-09-24 08:00:32

回答

2

我會做的工作更容易,通過使utilizatorunique清晰。

,當你在這種情況下,與現有的價值'Mama'添加新行的utilizator這樣的:mysql將返回錯誤的代碼:1062,不要讓用戶擁有多個行與表Mama

所以,當您運行查詢:

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

您可以檢查是否MySQL返回任何錯誤,但更好地檢查受影響的行數,如果插入成功,這將是等於1否則0

檢查機制取決於用於連接數據庫的語言和驅動程序。

既然你已經你可能會使用PDO

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

會給你想要的結果

最後簡單的例子PHP標籤選擇:

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

附近使用'EXISTS(SELECT'utilizator' FROM'utilizatori' WHERE utilizator ='Mama''')附近的語法,謝謝 – Memphistoles 2014-09-24 08:53:13

+0

歡迎隨時幫你 ;)) – 2014-09-24 08:54:03

1

嘗試通過使用組:

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

你也可以使用'SELECT DISTINCT'語法,而不是'GROUP BY' – 2014-09-24 08:04:11

1

你基本上是這樣做的:

SELECT ... WHERE NOT EXISTS 

...並在表中插入此。正如評論中所述,只需使您的utilizator字段具有唯一性,並從查詢中刪除整個SELECT部分。

+0

以及如何如果值存在以顯示「值已存在」錯誤,我可以放一個條件嗎? – Memphistoles 2014-09-24 08:04:07

+0

這是一個不同的故事。在這種情況下,您可能需要一些腳本(可能是PHP和JavaScript)一起工作,首先查詢數據庫以查看它是否存在,然後返回結果並將其呈現給用戶。在數據庫級別,'UNIQUE'約束將防止重複。 – kasimir 2014-09-24 08:06:17

1

where列缺...

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

你的SQL語法有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第1行 – Memphistoles 2014-09-24 08:05:52