主键列值作为两个列值结合不同的格式

时间:2014-01-28 12:56:22

标签: mysql sql add multiple-columns

所以我想创建一个主键,它结合日期值后跟的年份 - 然后是一个订单号的外键值。

基本上:2010-244

这是我试过的,(我知道我应该解析日期字符串的一部分):

  

ORDERNR int(11)NOT NULL,
    收据日期,
  RECEIPTNR为RECEIPTDATE +“ - ”+ ORDERNR INT NOT NULL UNIQUE,
  外键(ORDERNR)参考命令(ORDERNR),
    主要钥匙(RECEIPTNR))   ENGINE = INNODB;

1 个答案:

答案 0 :(得分:1)

MySQL不提供基于函数的索引(除了索引字符串中的前导字符之外)。换句话说,您希望在表达式上创建索引,MySQL不支持该索引。

如果日期的“年份”组件是唯一的,则数据每年只能有一个日期。因此,您可以在整个日期拥有唯一索引。

这将被接受作为主键:

unique (RECEIPTDATE, ORDERNR);

但这并不能让你在一年内获得独特性。

另一个替代方案 - 我不建议,但我建议因为它可能有用 - 是将日期存储在YYYY-MM-DD格式的字符串中。然后你可以这样做:

unique (RECEIPTDATESTRING(4), ORDERNR)

另一种方法是使用触发器来测试唯一性。

进一步的建议。不要创建复合主键,尤其是当其中一个键只是列的一部分时。相反,在字段上使用unique约束并具有自动递增的主键。