在MySQL表中创建指向日期的唯一键

时间:2010-07-13 09:55:10

标签: php sql mysql

在我的简单网络表单中防止重复输入的问题。

我的表记录了来自网络表单的用户输入,并按日期区分,例如日期()。如何防止具有相同名称的用户在一个日期内输入两次信息,例如相同的用户名不能在同一天输入两次,但可以在其他日期输入吗?

4 个答案:

答案 0 :(得分:9)

你的桌子应该有这些:

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

答案 1 :(得分:1)

您可以简单地创建复合主键。对于您的情况,这意味着您的主键必须包含日期字段和用户名字段。

答案 2 :(得分: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方式:))。

答案 3 :(得分:0)

在用户和日期列上创建唯一键

http://dev.mysql.com/doc/refman/5.1/en/create-table.html