如何为一个表引用多个表?
在作业中,我必须创建5个表,每个表都有INT id:
Owners, homes, home_owners, installation, house_type
。
业主可以拥有多个住宅,而住宅可以拥有多个住宅。
Home需要安装和house_type(两者都需要VARCHAR
类型)。
我把它写到了sql但它返回了一个
错误:错误:150"外键约束形成错误"
CREATE TABLE owners (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME
);
CREATE TABLE homes (
id INT AUTO_INCREMENT PRIMARY KEY,
created DATETIME,
modified DATETIME,
home_types_group VARCHAR(255) NOT NULL
);
CREATE TABLE home_owners (
id INT AUTO_INCREMENT PRIMARY KEY,
created DATETIME,
modified DATETIME,
owners_num INT NOT NULL,
FOREIGN KEY owners_num_key (owners_num) REFERENCES owners(id)
);
CREATE TABLE installation (
id INT AUTO_INCREMENT PRIMARY KEY,
brands VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME,
FOREIGN KEY brands_key (brands) REFERENCES homes(home_types_group)
);
CREATE TABLE types (
id INT AUTO_INCREMENT PRIMARY KEY,
types VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME,
FOREIGN KEY brands_key (types) REFERENCES homes(home_types_group)
);
答案 0 :(得分:0)
问题在于:
CREATE TABLE installation ( id INT AUTO_INCREMENT PRIMARY KEY, brands VARCHAR(255) NOT NULL, created DATETIME, modified DATETIME, FOREIGN KEY brands_key (brands) REFERENCES homes(home_types_group) )
REFERENCES homes(home_types_group):这是错误的,您只能引用某些表的主列或唯一列来制作外键。但 home_types_group 列既不是主要的也不是唯一的。将其更改为 id clumn of homes table
答案 1 :(得分:0)
试试这个
CREATE TABLE安装(id INT AUTO_INCREMENT PRIMARY KEY,品牌 int,创建DATETIME,修改DATETIME,FOREIGN KEY fk_id(品牌) 参考家园(id));
CREATE TABLE类型(id INT AUTO_INCREMENT PRIMARY KEY,类型int, 创建了DATETIME,修改了DATETIME,FOREIGN KEY brands_key(类型) 参考家园(id));
您可以在创建或修改表时通过定义FOREIGN KEY约束来创建外键。在外键引用中,当一个或多个表中的一个或多个列引用一个或多个表的一个或多个列时,会在两个表之间创建一个链接
这里REFERENCES homes(home_types_group)是错误的,所以你应该将它改为homes(id),你只能引用某个表的主列或唯一列来制作外键。两个键的数据类型应该是相同的< / p>
品牌VARCHAR(255)NOT NULL types VARCHAR(255)NOT NULL
错了它应该是int