gpt4 book ai didi

mysql 外键到复合主键

转载 作者:行者123 更新时间:2023-11-29 11:39:24 25 4
gpt4 key购买 nike

我尝试使用 MySQL Server 5.x 实现以下目标。

我有一个名为 Customer 的表像这样创建:

CREATE TABLE Customer(
Title VARCHAR(30) NOT NULL,
Name VARCHAR(100) NOT NULL,
FirstName VARCHAR(100) NOT NULL,
Street VARCHAR(300) NOT NULL,
HouseNumber VARCHAR(30) NOT NULL,
ZipCode VARCHAR(30) NOT NULL,
City VARCHAR(100) NOT NULL,
Telephone VARCHAR(30) NOT NULL,
EMail VARCHAR(300) NULL,
CONSTRAINT PK_Customer PRIMARY KEY(Title,Name,FirstName),
INDEX Index_Name(Name));

第二个表名为 'Order'像这样创建:

CREATE TABLE `Order`(
Number BIGINT NOT NULL AUTO_INCREMENT,
Customer VARCHAR(230) NOT NULL,
Issued DATETIME NOT NULL,
PRIMARY KEY(Number),
CONSTRAINT FK_Customer FOREIGN KEY(Customer)
REFERENCES Customer(PK_Customer));

但是我收到号码错误:

ERROR 1005 (HY000): Can't create table 'SBZ.Order' (errno: 150)

innodb 引擎状态向我显示:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
160317 16:05:29 Error in foreign key constraint of table SBZ/Order:
FOREIGN KEY(Customer) REFERENCES Customer(PK_Customer)):
Cannot resolve column name close to:
))

是否可以使用约束创建复合主键的外键?

任何帮助。 :)

最佳答案

首先,第一个表中应该有一个 CustomerId 列。它应该是自动递增的。所以正确的定义是:

CREATE TABLE Customer (
CustomerId int auto_increment primary key,
. . .
unique (title, firstname, name)
);

然后您可以创建与 CustomerId 的正确外键关系:

CustomerId int,
. . .
CONSTRAINT FK_Customer FOREIGN KEY(CustomerId) REFERENCES Customer(CustomerId)

这是“正确的”,因为这种合成 key 有几个优点:

  • 外键引用要简单得多。
  • 您可以轻松更改组件(更改外键的一部分需要了解级联约束)。
  • 索引中的整数比字符串更有效。

当然,您可以对复合主键执行相同的操作。您只需要第二个表中的所有三列:

Title VARCHAR(30), 
Name VARCHAR(100),
FirstName VARCHAR(100),
CONSTRAINT FK_Customer FOREIGN KEY(Title, Name, Firstname) REFERENCES Customer(Title, Name, Firstname)

关于mysql 外键到复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36064572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com