1

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

有没有办法可以stringForTheDay为每天定义一个唯一的字符串myDate

就像是:

UNIQUE(stringForTheDay, day_in_mydate)

简而言之,不能允许这 2 行:

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

2 回答 2

1

你不能。

或者,您可以创建另一个数据类型为DATEonly 的列,并使用您的 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)

并使用时间戳字段中的值更新表。

UPDATE tableName
SET    dateOnlyColumn = DATE(timestampColumn)
于 2012-12-25T04:59:14.357 回答
1

我认为您最好的选择是将日期部分复制到单独的列中,并在其上添加唯一约束。您可以使用触发器使日期部分保持最新:

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);

(参见MySQL 5.6 参考手册中的第 18.3 节“使用触发器”。)

于 2012-12-25T05:04:52.220 回答