【问题标题】:Add unique constrains as date from datetime column in mysql将唯一约束添加为 mysql 中 datetime 列中的日期
【发布时间】:2021-08-02 13:47:00
【问题描述】:

我需要为具有日期时间的表创建一个唯一约束,但我需要将 createdttm 中的 mid 和 date 设为唯一。 这是我的表结构

CREATE TABLE IF NOT EXISTS `sampletable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mid` varchar(50) DEFAULT NULL,
  `category` varchar(50) DEFAULT NULL,
  `createdttm` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31826 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

【问题讨论】:

    标签: mysql unique


    【解决方案1】:

    您可以通过使用组合唯一索引来做到这一点。

    UNIQUE KEY `date key` (`mid`,`createdttm`),
    

    【讨论】:

      【解决方案2】:

      这可以通过为mid 添加唯一键和createdttm 的日期部分来轻松解决:

      ALTER TABLE `sampletable` ADD UNIQUE `un_idx`(`mid`, DATE(`createdttm`));
      

      但是,MySql 不允许在定义索引时使用函数。

      您可以做的是将virtual generated column 定义为createdttm 的日期部分,然后根据该列和mid 创建唯一索引:

      ALTER TABLE `sampletable` ADD COLUMN `created` DATE AS (DATE(`createdttm`));
      ALTER TABLE `sampletable` ADD UNIQUE `un_idx`(`mid`, `created`);
      

      请参阅demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 2010-11-16
        • 1970-01-01
        • 2017-11-30
        相关资源
        最近更新 更多