2010-07-13 55 views
7

向所有人致以問候。新手在這裏。關於防止在我的簡單網頁表單中重複輸入的問題。在指定日期的MySQL表中創建唯一密鑰

我的表格記錄來自網絡表格的用戶輸入,並按日期進行區分,例如,日期()。如何防止同名用戶在同一日期輸入兩次信息,例如同一用戶名不能在同一日期輸入兩次,但可以在其他日期輸入?

希望有人能就此提出建議。感謝提前。

回答

9

你的表應該有這些:

create table tablename (
... 
user_id bigint, -- or whatever 
date_created date, 
unique key(user_id, date_created) 
... 
); 
+0

感謝您的所有建議:) 按照建議嘗試,它會阻止同一日期的同一條目。但是當我將日期更改爲下一個日期時,它會顯示'重複名稱'無法輸入記錄。如何在同一日期再次輸入同一個NAME? – cys 2010-07-14 03:41:44

+0

也許你一個人的名字也有一個獨特的關鍵? 請運行這個:'show create table tablename'併發布結果。 – ceteras 2010-07-14 09:00:55

+0

謝謝你,我設法讓它運行。我放入一個if..else語句來驗證DATE和NAME中是否有任何相同的行,然後不執行輸入記錄,否則輸入記錄。我從你們所有人那裏獲得了讓NAME和DATE獨一無二的想法。謝謝! :) – cys 2010-07-15 06:05:16

1

您可以簡單的創建一個複合主鍵的唯一關鍵。對於你的情況,這意味着你的主鍵必須包含一個日期字段以及用戶名字段。

+1

這也是可能的。但是,與該表格建立關係時,複合PKs存在問題。我認爲UNIQUE指數是更好的方法。 – 2010-07-13 10:04:08

+0

我同意!不過,我只想說,唯一字段的「NOT NULL」選項是必需的(就像您在表創建代碼中那樣),因爲名稱或日期的NULL值破壞了唯一性(即可以添加如果日期爲NULL,則用戶'xxx'多次)。 – Javaguru 2010-07-13 10:20:11

1

以幾種方式。

首先,您可以在表格上創建索引。 (我使用簡單的表格作爲例子)。

CREATE TABLE `test` (
`id` INT NOT NULL , 
`name` VARCHAR(255) NOT NULL , 
`date` DATE NOT NULL , 
PRIMARY KEY (`id`) 
) ENGINE = MYISAM; 

ALTER TABLE `test` ADD UNIQUE (
`name` , 
`date` 
); 

這是MySQL方式。

您還應該在PHP中進行檢查,儘管您可以在插入時進行檢查(MySQL將返回錯誤並且可以檢查它)。但是在插入前(SELECT * from test WHERE name=USER AND date=DATE)並檢查記錄計數,您可以進行額外的SELECT。如果它大於0,則顯示錯誤。

保存時,你很少應該擔心一個額外的SQL。如果你應該,只需檢查MySQL語句是否有錯誤(MySQL方式:))。