所以我想创建一个主键,它结合日期值后跟的年份 - 然后是一个订单号的外键值。
基本上:2010-244
这是我试过的,(我知道我应该解析日期字符串的一部分):
ORDERNR int(11)NOT NULL,
收据日期,
RECEIPTNR为RECEIPTDATE +“ - ”+ ORDERNR INT NOT NULL UNIQUE,
外键(ORDERNR)参考命令(ORDERNR),
主要钥匙(RECEIPTNR)) ENGINE = INNODB;
答案 0 :(得分:1)
MySQL不提供基于函数的索引(除了索引字符串中的前导字符之外)。换句话说,您希望在表达式上创建索引,MySQL不支持该索引。
如果日期的“年份”组件是唯一的,则数据每年只能有一个日期。因此,您可以在整个日期拥有唯一索引。
这将被接受作为主键:
unique (RECEIPTDATE, ORDERNR);
但这并不能让你在一年内获得独特性。
另一个替代方案 - 我不建议,但我建议因为它可能有用 - 是将日期存储在YYYY-MM-DD格式的字符串中。然后你可以这样做:
unique (RECEIPTDATESTRING(4), ORDERNR)
另一种方法是使用触发器来测试唯一性。
进一步的建议。不要创建复合主键,尤其是当其中一个键只是列的一部分时。相反,在字段上使用unique
约束并具有自动递增的主键。