2012-12-25 76 views
0

我在我的MYSQL表中有一個TIMESTAMP myDate字段。Mysql - CAST上的唯一約束(TIMESTAMP as DATE)

有沒有一種方法可以定義一個唯一的字符串stringForTheDaymyDate

喜歡的東西:

UNIQUE(stringForTheDay, day_in_mydate) 

總之,這2行絕不允許:

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

難道你們就不能使用日期,而不是TIMESTAMP? – 2012-12-25 04:59:26

+0

不幸的是,我不能:( – th3an0maly

回答

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) 

,並與來自時間戳字段其值更新表。

UPDATE tableName 
SET dateOnlyColumn = DATE(timestampColumn) 
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