Что я делаю неправильно? Мне нужно создать внешний ключ, но код, начинающийся на 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;
Вам не хватает запятой между основным кедом и внешним ключом:
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);
По умолчанию механизм 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;
Я предполагаю, что у вас нет идентификатора DealershipID на вашей таблице автомобилей.
И ваше представление не будет работать, поскольку вы можете включить только одно поле в свой вложенный запрос выбора. Возможно, вы могли бы переписать это для использования INNER или OUTER JOIN.
Вам нужна запятая после "PRIMARY KEY (autoId)", и это ССЫЛКИ, а не ССЫЛКА.
Вот пример из документации: http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/clauses002.htm#i1036780
С уважением, Роб.