Определение ограничения внешнего ключа в H2 Базах данных
Я новичок в кодировании, поэтому я создал таблицы на SQL-сервере, и он сработал, поэтому я использовал ту же команду в H2 и сказал, что у меня проблемы с синтаксисом со второй таблицей, кто-то может помочь?
CREATE TABLE TOURISTINFO(
TOURISTINFO_ID INT PRIMARY KEY,
NAME VARCHAR(25) NOT NULL,
NATIONALITY VARCHAR(15) NOT NULL
)
CREATE TABLE PLANETICKETS(
DESTINATION VARCHAR(10) NOT NULL,
TICKETPRICE NUMERIC(8,2) NOT NULL,
TOURISTINFO_ID INT FOREIGN KEY REFERENCES TOURISTINFO
)
Ошибка
Syntax error in SQL statement "CREATE TABLE PLANETICKETS(
DESTINATION VARCHAR(10) NOT NULL,
TICKETPRICE NUMERIC(8,2) NOT NULL,
TOURISTINFO_ID INT FOREIGN[*] KEY REFERENCES TOURISTINFO
)"; expected "(, FOR, UNSIGNED, NOT, NULL, AS, DEFAULT, GENERATED, NOT, NULL, AUTO_INCREMENT, BIGSERIAL, SERIAL, IDENTITY, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, ,, )"; SQL statement:
CREATE TABLE PLANETICKETS(
DESTINATION VARCHAR(10) NOT NULL,
TICKETPRICE NUMERIC(8,2) NOT NULL,
TOURISTINFO_ID INT FOREIGN KEY REFERENCES TOURISTINFO
) [42001-173] 42001/42001
Ответы
Ответ 1
Двухэтапный процесс
- Создать таблицу без внешнего ключа
CREATE TABLE PLANETICKETS(
DESTINATION VARCHAR(10) NOT NULL,
TICKETPRICE NUMERIC(8,2) NOT NULL,
TOURISTINFO_ID INT
)
- Добавьте ограничение внешнего ключа
ALTER TABLE PLANETICKETS
ADD FOREIGN KEY (TOURISTINFO_ID)
REFERENCES TOURISTINFO(TOURISTINFO_ID)
Одностадийный процесс
CREATE TABLE PLANETICKETS(
DESTINATION VARCHAR(10) NOT NULL,
TICKETPRICE NUMERIC(8,2) NOT NULL,
TOURISTINFO_ID INT,
foreign key (TOURISTINFO_ID) references touristinfo(TOURISTINFO_ID)
)
Ответ 2
Я хотел бы улучшить ответ @Дэвид-Броссар:
CREATE TABLE PLANETICKETS(
DESTINATION VARCHAR(10) NOT NULL,
TICKETPRICE NUMERIC(8,2) NOT NULL,
TOURISTINFO_ID INT,
FOREIGN KEY(TOURISTINFO_ID) REFERENCES TOURISTINFO -- no need for touristinfo(TOURISTINFO_ID)
)
Когда вы определяете FOREIGN KEY
в этом случае, вы можете опустить явную ссылку на столбец TOURISTINFO_ID
потому что H2 знает, какой столбец является первичным ключом в PLANETICKETS
.