Mysql 主键列值作为两个列值以不同格式组合

Mysql 主键列值作为两个列值以不同格式组合,mysql,sql,add,multiple-columns,Mysql,Sql,Add,Multiple Columns,所以我想制作一个主键,它将日期值的年份后跟-然后是一个外键值,它是一个订单号 基本上:2010-244 这就是我尝试的,我知道我应该解析日期字符串的一部分: ORDERNR int11不为空, 接收日期, RECEIPTNR作为RECEIPTDATE+-+ORDERNR INT不为空唯一, 外键ORDERNR引用ORDERNR, 主键接收器 引擎=INNODB MySQL不提供基于函数的索引,只对字符串中的前导字符进行索引。换句话说,您希望在表达式上创建索引,而MySQL不支持这一点 如果日期的

所以我想制作一个主键,它将日期值的年份后跟-然后是一个外键值,它是一个订单号

基本上:2010-244

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

ORDERNR int11不为空, 接收日期, RECEIPTNR作为RECEIPTDATE+-+ORDERNR INT不为空唯一, 外键ORDERNR引用ORDERNR, 主键接收器 引擎=INNODB


MySQL不提供基于函数的索引,只对字符串中的前导字符进行索引。换句话说,您希望在表达式上创建索引,而MySQL不支持这一点

如果日期的年份部分是唯一的,则数据每年只能有一个日期。因此,您可以在整个日期上有一个唯一的索引

这将被接受为主键:

unique (RECEIPTDATE, ORDERNR);
但这并不能在一年内给你独一无二的感觉

另一种选择是以YYYY-MM-DD格式的字符串存储日期,我不建议这样做,但我建议这样做,因为它可能会起作用。然后你可以做:

unique (RECEIPTDATESTRING(4), ORDERNR)
另一种方法是使用一个测试唯一性的触发器


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

主键可以由多个列组成。假设我创建一个复合键:主键RECEIPTDATE,ORDERNR as RECEIPTNR首先我希望它显示为RECEIPTNR此代码不起作用,第二,如何在键之间添加-从我的表中选择CONCAT_WS'-',col1,col2;谢谢你的信息和帮助!