Простой внешний ключ / Создать Просмотр вопроса - PullRequest
0 голосов
/ 09 июля 2010

Что я делаю не так?Мне нужно создать внешний ключ, но код, начинающийся с 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 ]

1 голос
/ 10 июля 2010

Вам нужна запятая после «PRIMARY KEY (autoId)», и это REFERENCE S , а не REFERENCE.

Вот пример из документации: http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/clauses002.htm#i1036780

С уважением, Роб.

1 голос
/ 09 июля 2010

Движок Myisam по умолчанию не поддерживает внешние ключи. Укажите движок Innodb в операторах CREATE TABLE.

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;
1 голос
/ 10 июля 2010

Вам не хватает запятой между первичным ключом и внешним ключом:

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) - здесь задокументированы ограничения .Поэтому конвертируйте его, чтобы использовать вместо этого 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);
1 голос
/ 09 июля 2010

Полагаю, у вас нет дилерского идентификатора в таблице автомобилей.

И ваше представление не будет работать, поскольку вы можете включить только одно поле в свой вложенный запрос выбора.Возможно, вы могли бы переписать это, чтобы использовать INNER или OUTER JOIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...