Синтаксическая ошибка с CONSTRAINT на MySQL, которая работала на postgres - PullRequest
0 голосов
/ 11 ноября 2018

Профессор дал файл .sql для выполнения некоторых упражнений, вот его фрагмент:

СОЗДАТЬ ТАБЛИЦУ DEPT

   (DEPTNO NUMERIC(2) CONSTRAINT PK_DEPT PRIMARY KEY, (error 1)
DNAME VARCHAR(14),
LOC VARCHAR(13) );

CREATE TABLE EMP

   (EMPNO NUMERIC(4) CONSTRAINT PK_EMP PRIMARY KEY, (error 2)
ENAME VARCHAR(10),
JOB VARCHAR(9),
HIREDATE DATE,
SAL NUMERIC(7,2),
DEPTNO NUMERIC(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT); (error 3)

Мы запустили файл в классе с помощью pgadmin 3, и все прошло нормально, но я скачал MySQL вместо postgres, чтобы продолжить упражнения дома, и он выдает ошибку: «неожиданное ограничение». Так как это работает с postgres, но не в MySQL, может быть, это синтаксическая ошибка с MySQL?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Допустимые форматы MySQL для внешних ключей описаны в их обширной документации.

Другие опции CONSTRAINT также указаны в документах

Например, ПЕРВИЧНЫЙ КЛЮЧ:

[CONSTRAINT [symbol]] PRIMARY KEY [index_type] (key_part,...)
      [index_option] ...

Как часть CREATE TABLE, это может идти в конце для проверок FOREIGN KEY.

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (col_name, ...)
    REFERENCES tbl_name (col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
0 голосов
/ 11 ноября 2018

Вы должны сделать больше многословия, и каждый rdbms отличается .. Вы не можете использовать оператор, который вы работаете в некоторых rdbms для других rdbms

Отдел стола

CREATE TABLE DEPT
(DEPTNO NUMERIC(2),
DNAME VARCHAR(14),
LOC VARCHAR(13), 
CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO));

Таблица Emp

CREATE TABLE EMP
(EMPNO NUMERIC(4),
ENAME VARCHAR(10),
JOB VARCHAR(9),
HIREDATE DATE,
SAL NUMERIC(7,2),
DEPTNO NUMERIC(2), 
CONSTRAINT PK_EMP PRIMARY KEY (EMPNO),
CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...