简单外键/创建查看问题

时间:2010-07-09 19:53:14

标签: mysql sql view

我做错了什么?我需要创建外键但是在CONSTRAINT处开始的代码在某种程度上是错误的,我也需要帮助我的观点我认为我做的子查询错了你能帮帮我吗?

CREATE TABLE dealer(
dealershipId CHAR(10),
phone CHAR(10),
dealershipName CHAR(10),
webAddress char (10),
street CHAR (10),
city char (10),
zip char (5),
mCapacity INT,
managerFName CHAR (10),
managerLName CHAR (10),
PRIMARY KEY (dealershipId));

CREATE TABLE automobiles(
autoId CHAR (4),
vehiclecode VARCHAR (15),
manufacturer VARCHAR(15),
model VARCHAR (20),
style VARCHAR (5),
color VARCHAR (10),
ownership VARCHAR (8),
PRIMARY KEY (autoId)
CONSTRAINT fkHasRep FOREIGN KEY (dealershipId)
REFERENCE dealer(dealershipId) ON DELETE RESTRICT
);

--7.
CREATE VIEW division AS
SELECT dealershipName, webAddress, phone
FROM dealer
WHERE  dealershipId IN
( SELECT  manufacturer, model, style, ownership
FROM automobiles);

--8.
SELECT phone, manufacturer, model
FROM division;

4 个答案:

答案 0 :(得分:1)

我的猜测是你的汽车桌上没有经销商ID。

并且,您的视图无效,因为您只能在嵌套的选择查询中包含一个字段。您可以重写它以使用INNER或OUTER JOIN。

答案 1 :(得分:1)

默认Myisam引擎不支持外键。 在CREATE TABLE语句中指定Innodb引擎。

CREATE TABLE dealer(
dealershipId CHAR(10),
phone CHAR(10),
dealershipName CHAR(10),
webAddress char (10),
street CHAR (10),
city char (10),
zip char (5),
mCapacity INT,
managerFName CHAR (10),
managerLName CHAR (10),
PRIMARY KEY (dealershipId)) ENGINE = Innodb;

答案 2 :(得分:1)

你错过了Primary Ked& amp;之间的逗号。外键:

CREATE TABLE automobiles(
autoId CHAR (4),
vehiclecode VARCHAR (15),
manufacturer VARCHAR(15),
model VARCHAR (20),
style VARCHAR (5),
color VARCHAR (10),
ownership VARCHAR (8),
PRIMARY KEY (autoId),
CONSTRAINT fkHasRep FOREIGN KEY (dealershipId)
REFERENCE dealer(dealershipId) ON DELETE RESTRICT
);

MySQL视图不允许视图中的子查询(错误#1349) - restrictions are documented here。因此,将其转换为使用JOIN:

CREATE VIEW division AS
   SELECT d.dealershipName, d.webAddress, d.phone, a.*
     FROM DEALER d
     JOIN AUTOMOBILES a ON d.dealershipid IN (a.manufacturer, 
                                              a.model, 
                                              a.style, 
                                              a.ownership);

答案 3 :(得分:1)

在“PRIMARY KEY(autoId)”之后需要一个逗号,它是REFERENCE S ,而不是REFERENCE。

以下是文档中的示例:http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/clauses002.htm#i1036780

此致 罗布。

相关问题