如何在 MySQL 中指定复合唯一约束
How do I specify a composite unique constraint in MySQL
我有一个 table daily_ward
条目,其中包含以下列
daily_ward
-------------
services integer
ipd_patient_id integer
date_time datetime
现在我想限制每天为服务 =1 的服务输入一次。
我的 date_time 字段也包含时间,服务包含许多服务。
因此我无法立即添加唯一索引。
我该怎么办?
哦,这太可悲了。您不能在 MySQL 中使用您拥有的数据类型执行此操作。这里有三种选择。
首先是将日期和时间分成两列:
- 日期日期
- 时间时间
(您应该提供更好的名称。)然后在 services
和 date
列上创建一个唯一索引。
第二种是以ISO标准格式存储date/time:"YYYY-MM-DD HH:MM:SS"通常就足够了:
- datetime_str 字符(19)
然后使用前缀建立索引:
create unique index idx_daily_ward_services_day on (services, left(datetime_str, 10));
最后,您可以添加另一个名为 date
的列并使用触发器填充它。
鉴于 table 的名称是 "daily_ward",我倾向于采用第一种解决方案。 "date" 似乎是实体所代表的重要部分。
我有一个 table daily_ward
条目,其中包含以下列
daily_ward
-------------
services integer
ipd_patient_id integer
date_time datetime
现在我想限制每天为服务 =1 的服务输入一次。
我的 date_time 字段也包含时间,服务包含许多服务。
因此我无法立即添加唯一索引。
我该怎么办?
哦,这太可悲了。您不能在 MySQL 中使用您拥有的数据类型执行此操作。这里有三种选择。
首先是将日期和时间分成两列:
- 日期日期
- 时间时间
(您应该提供更好的名称。)然后在 services
和 date
列上创建一个唯一索引。
第二种是以ISO标准格式存储date/time:"YYYY-MM-DD HH:MM:SS"通常就足够了:
- datetime_str 字符(19)
然后使用前缀建立索引:
create unique index idx_daily_ward_services_day on (services, left(datetime_str, 10));
最后,您可以添加另一个名为 date
的列并使用触发器填充它。
鉴于 table 的名称是 "daily_ward",我倾向于采用第一种解决方案。 "date" 似乎是实体所代表的重要部分。