【问题标题】:Can you create a Primary Key Value that uses data from other columns?您可以创建一个使用其他列数据的主键值吗?
【发布时间】:2021-08-14 17:05:16
【问题描述】:

我是 MySQL 和数据库的新手。我的数据库是一个电影院管理。我的一张表 SALE 的 PK 为 sale_id。 sale_id 中存储的值是 VARCHAR(19),它是 customer_id(FK - VARCHAR(7)) 和 sale_datetime(DATETIME) 列的组合。是否可以在 MySQL 工作台中创建基于表中其他列的主键值?

SALE 表是这样创建的:

CREATE TABLE `sale` (
  `sale_id` varchar(19) NOT NULL,
  `customer_id` varchar(7) NOT NULL,
  `sale_datetime` datetime NOT NULL,
  `payment_type` varchar(4) NOT NULL,
  `ticket_quantity` int NOT NULL,
  `sale_total` decimal(5,2) NOT NULL,
  PRIMARY KEY (`sale_id`),
  KEY `fk_sale_customer_id_idx` (`customer_id`),
  CONSTRAINT `fk_sale_customer_id` FOREIGN KEY (`customer_id`) REFERENCES `customer`(`customer_id`)) 

在向此表添加数据时,我是否可以设置一些“约束”以根据 customer_id 和 sale_datetime 自动创建 sale_id?例如: 如果我在此表中添加一行,其中我的 customer_id 为 1111111,sales_date 为 2021-08-13 12:00:00,那么 sale_id 将自动设置为 1111111202108131200?

【问题讨论】:

  • 没有生成的列不能是主键,请使用插入触发器生成它,请参阅dbfiddle.uk/…

标签: mysql sql


【解决方案1】:

不建议将主键作为 VARCHAR 用于 MySQL 的存储引擎:InnoDB。

更多信息请查看:https://lefred.be/content/mysql-invisible-column-part-ii/

我建议将自动增量 PK 作为 sale_id。 这种非增量 PK 有什么好处? 我还建议应用程序生成该字段,包含客户和解析日期的字段,您也可以索引(唯一)它。 当然,该字段也可以由触发器生成,您更喜欢,请参阅https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2021-02-24
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多