向所有人致以問候。新手在這裏。關於防止在我的簡單網頁表單中重複輸入的問題。在指定日期的MySQL表中創建唯一密鑰
我的表格記錄來自網絡表格的用戶輸入,並按日期進行區分,例如,日期()。如何防止同名用戶在同一日期輸入兩次信息,例如同一用戶名不能在同一日期輸入兩次,但可以在其他日期輸入?
希望有人能就此提出建議。感謝提前。
向所有人致以問候。新手在這裏。關於防止在我的簡單網頁表單中重複輸入的問題。在指定日期的MySQL表中創建唯一密鑰
我的表格記錄來自網絡表格的用戶輸入,並按日期進行區分,例如,日期()。如何防止同名用戶在同一日期輸入兩次信息,例如同一用戶名不能在同一日期輸入兩次,但可以在其他日期輸入?
希望有人能就此提出建議。感謝提前。
你的表應該有這些:
create table tablename (
...
user_id bigint, -- or whatever
date_created date,
unique key(user_id, date_created)
...
);
您可以簡單的創建一個複合主鍵的唯一關鍵。對於你的情況,這意味着你的主鍵必須包含一個日期字段以及用戶名字段。
這也是可能的。但是,與該表格建立關係時,複合PKs存在問題。我認爲UNIQUE指數是更好的方法。 – 2010-07-13 10:04:08
我同意!不過,我只想說,唯一字段的「NOT NULL」選項是必需的(就像您在表創建代碼中那樣),因爲名稱或日期的NULL值破壞了唯一性(即可以添加如果日期爲NULL,則用戶'xxx'多次)。 – Javaguru 2010-07-13 10:20:11
以幾種方式。
首先,您可以在表格上創建索引。 (我使用簡單的表格作爲例子)。
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方式:))。
感謝您的所有建議:) 按照建議嘗試,它會阻止同一日期的同一條目。但是當我將日期更改爲下一個日期時,它會顯示'重複名稱'無法輸入記錄。如何在同一日期再次輸入同一個NAME? – cys 2010-07-14 03:41:44
也許你一個人的名字也有一個獨特的關鍵? 請運行這個:'show create table tablename'併發布結果。 – ceteras 2010-07-14 09:00:55
謝謝你,我設法讓它運行。我放入一個if..else語句來驗證DATE和NAME中是否有任何相同的行,然後不執行輸入記錄,否則輸入記錄。我從你們所有人那裏獲得了讓NAME和DATE獨一無二的想法。謝謝! :) – cys 2010-07-15 06:05:16