我的MYSQL表中有一个TIMESTAMP myDate
字段。
我可以为stringForTheDay
中的每个日定义唯一字符串myDate
吗?
类似的东西:
UNIQUE(stringForTheDay, day_in_mydate)
简而言之,不得允许这两行:
2012-11-29 13:35:53 samestring
2012-11-29 20:39:09 samestring
答案 0 :(得分:1)
你做不到。
或者,您可以创建另一个仅具有DATE
数据类型的列,并使用dateOnly列和字符串列创建唯一的复合键,
例如
CREATE TABLE Table1
(
`day_in_mydate` datetime,
`stringForTheDay` varchar(10),
`dateControl` date,
UNIQUE (dateControl, stringForTheDay)
)
这里展示了一个完整的例子,
如果您有一个包含记录的现有表,但您仍然可以更改它。添加DATE
数据类型的列,然后执行此查询
ALTER TABLE tableName ADD CONSTRAINT tb_UQ UNIQUE (dateOnlyColumn, stringColumn)
并使用timestamp字段中的值更新表。
UPDATE tableName
SET dateOnlyColumn = DATE(timestampColumn)
答案 1 :(得分:0)
我认为最好的办法是将日期部分复制到一个单独的列中,并在其上添加一个唯一约束。您可以使用触发器使日期部分保持最新:
CREATE TRIGGER ins_tablename BEFORE INSERT ON tablename
FOR EACH ROW SET NEW.dateColumn = CAST(NEW.timestampColumn AS DATE);
CREATE TRIGGER upd_tablename BEFORE UPDATE ON tablename
FOR EACH ROW SET NEW.dateColumn = CAST(NEW.timestampColumn AS DATE);
(见§18.3 "Using Triggers" in the MySQL 5.6 Reference Manual。)