Mysql - CAST的唯一约束(TIMESTAMP为DATE)

时间:2012-12-25 04:51:26

标签: mysql sql unique-constraint

我的MYSQL表中有一个TIMESTAMP myDate字段。

我可以为stringForTheDay中的每个定义唯一字符串myDate吗?

类似的东西:

UNIQUE(stringForTheDay, day_in_mydate)

简而言之,不得允许这两行:

2012-11-29 13:35:53      samestring
2012-11-29 20:39:09      samestring

2 个答案:

答案 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。)