我的表创建中的 CONSTRAINT 语句

Posted

技术标签:

【中文标题】我的表创建中的 CONSTRAINT 语句【英文标题】:CONSTRAINT statements in my table creations 【发布时间】:2017-11-26 20:52:06 【问题描述】:

我正在为我的表创建中的这些 CONSTRAINT 语句寻求一些帮助。它看起来很简单,但由于某种原因我错过了它。当我尝试更改以在语句的不同区域添加左括号或右括号时,似乎没有任何变化。

错误代码:1064。您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 15 行的“REFERENCES (DISTRIBUTOR.DISTRIBUTOR_ID), CONSTRAINT VIDEO_DVD_FK2 FOREIGN KEY R”附近使用正确的语法

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 11 行的“CONSTRAINT DISTRIBUTOR_PK PRIMARY KEY (DISTRIBUTOR_ID), CONSTRAINT DISTRIBUTOR_”附近使用正确的语法

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 25 行的“REFERENCES (DISTRIBUTOR.DISTRIBUTOR_ID))”附近使用正确的语法

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 11 行的“REFERENCES (VIDEO_DVD.VIDEO_DVD_ID))”附近使用正确的语法

CREATE TABLE VIDEO_DVD(

VIDEO_DVD_ID   VARCHAR(100),
DISTRIBUTOR_ID   varchar(100),
MOVIE_ID   varchar(100),
CUSTOMER_ID   varchar(100),
FINE_AMT   numeric(14,0)   CHECK (FINE_AMT > 0),
DAMAGE_CHARGES   numeric(14,0)   CHECK (DAMAGE_CHARGES > 0),
TYPE   CHAR(1)   check(TYPE IN ('V','D')),
LEASE_DATE   DATE,   
RETURN_DATE   DATE   NOT NULL,

CONSTRAINT VIDEO_DVD_PK PRIMARY KEY (VIDEO_DVD_ID),

CONSTRAINT VIDEO_DVD_FK1 FOREIGN KEY REFERENCES   (DISTRIBUTOR.DISTRIBUTOR_ID),

CONSTRAINT VIDEO_DVD_FK2 FOREIGN KEY REFERENCES (MOVIE.MOVIE_ID),

CONSTRAINT VIDEO_DVD_FK3 FOREIGN KEY REFERENCES (CUSTOMER.CUST_ID));
CREATE TABLE DISTRIBUTOR(

DISTRIBUTOR_ID   VARCHAR(100) ,

MOVIE_ID   VARCHAR(100),

VIDEO_DVD_ID   VARCHAR(100),

NAME   VARCHAR(1000)   UNIQUE NOT NULL

CONSTRAINT DISTRIBUTOR_PK PRIMARY KEY (DISTRIBUTOR_ID),

CONSTRAINT DISTRIBUTOR_FK1 FOREIGN KEY REFERENCES (MOVIE.MOVIE_ID),

CONSTRAINT DISTRIBUTOR_FK2 FOREIGN KEY REFERENCES (VIDEO_DVD.VIDEO_DVD_ID));
CREATE TABLE MOVIE(

MOVIE_ID   VARCHAR(100),

DIRECTOR   VARCHAR(100) NOT NULL,

NAME   VARCHAR(100) UNIQUE NOT NULL,

TYPE   CHAR(1)   CHECK (TYPE IN ('C','H','S')),

DISTRIBUTOR_ID VARCHAR(100),

ACTOR_NAME   VARCHAR(100),  

LENGTH   NUMERIC(14,0)   CHECK (LENGTH > 0),

AWARDS   VARCHAR(1000),

RATINGS   NUMERIC(2,0)   CHECK (RATINGS IN (1,2,3,4,5,6,7,8,9,10)),

RELEASE_YEAR   NUMERIC(4,0),

CONSTRAINT MOVIE_PK PRIMARY KEY (MOVIE_ID),

CONSTRAINT MOVIE_FK FOREIGN KEY REFERENCES (DISTRIBUTOR.DISTRIBUTOR_ID));
CREATE TABLE CUSTOMER(

CUST_ID   VARCHAR(100),
VIDEO_DVD_ID   VARCHAR(100),
STREET   VARCHAR(1000),
ZIPCODE   NUMERIC(6,0),
ACC_NO   VARCHAR(20) UNIQUE NOT NULL,

CONSTRAINT CUSTOMER_PK PRIMARY KEY (CUST_ID),

CONSTRAINT CUSTOMER_FK FOREIGN KEY REFERENCES (VIDEO_DVD.VIDEO_DVD_ID));

我正在使用 MySQL 5.7...

我能够通过删除语句末尾的逗号来清除一些错误,所以我希望这仍然有效。我仍然有这些错误..

14:41:47 创建表 VIDEO_DVD(VIDEO_DVD_ID VARCHAR(100), DISTRIBUTOR_ID varchar(100), MOVIE_ID varchar(100), CUSTOMER_ID varchar(100), FINE_AMT numeric(14,0) 检查 (FINE_AMT > 0), DAMAGE_CHARGES numeric(14,0) CHECK (DAMAGE_CHARGES > 0), TYPE CHAR(1) check(TYPE IN ('V','D')), LEASE_DATE DATE, RETURN_DATE DATE NOT NULL, CONSTRAINT VIDEO_DVD_PK PRIMARY KEY (VIDEO_DVD_ID), CONSTRAINT VIDEO_DVD_FK1 FOREIGN KEY (DISTRIBUTOR_ID) REFERENCES DISTRIBUTOR.DISTRIBUTOR_ID) CONSTRAINT VIDEO_DVD_FK2 FOREIGN KEY REFERENCES (MOVIE.MOVIE_ID) CONSTRAINT VIDEO_DVD_FK3 FOREIGN KEY REFERENCES (CUSTOMER.CUST_ID) 错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 17 行 0.016 秒处的“CONSTRAINT VIDEO_DVD_FK2 FOREIGN KEY REFERENCES (MOVIE.MOVIE_ID) CONSTRAINT VID”附近使用正确的语法

14:41:47 创建表分配器(DISTRIBUTOR_ID VARCHAR(100),MOVIE_ID VARCHAR(100),VIDEO_DVD_ID VARCHAR(100),名称 VARCHAR(1000) 唯一非空约束 DISTRIBUTOR_PK 主键 (DISTRIBUTOR_ID),约束键 DISTRIBUTOR_FK1 FOREIGN REFERENCES (MOVIE.MOVIE_ID), CONSTRAINT DISTRIBUTOR_FK2 FOREIGN KEY REFERENCES (VIDEO_DVD.VIDEO_DVD_ID)) 错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,在第 11 行 0.000 秒的“CONSTRAINT DISTRIBUTOR_PK PRIMARY KEY (DISTRIBUTOR_ID), CONSTRAINT DISTRIBUTOR_”附近使用正确的语法

14:41:47 CREATE TABLE MOVIE(MOVIE_ID VARCHAR(100), DIRECTOR VARCHAR(100) NOT NULL, NAME VARCHAR(100) UNIQUE NOT NULL, TYPE CHAR(1) CHECK (TYPE IN ('C',' H','S')), DISTRIBUTOR_ID VARCHAR(100), ACTOR_NAME VARCHAR(100), LENGTH NUMERIC(14,0) CHECK (LENGTH > 0), AWARDS VARCHAR(1000), RATINGS NUMERIC(2,0) CHECK ( RATINGS IN (1,2,3,4,5,6,7,8,9,10)), RELEASE_YEAR NUMERIC(4,0), CONSTRAINT MOVIE_PK PRIMARY KEY (MOVIE_ID), CONSTRAINT MOVIE_FK FOREIGN KEY (MOVIE_ID) REFERENCES DISTRIBUTOR .DISTRIBUTOR_ID) 错误代码:1215。无法添加外键约束 1.109 秒

我遇到了最后 3 个错误,但我仍然无法开始工作。任何帮助将不胜感激!谢谢!

CONSTRAINT VIDEO_DVD_FK2 FOREIGN KEY (MOVIE_ID) REFERENCES (MOVIE.MOVIE_ID),  

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 17 行的“CONSTRAINT VIDEO_DVD_FK2 FOREIGN KEY (MOVIE_ID) REFERENCES (MOVIE.MOVIE_ID), CO”附近使用正确的语法

CONSTRAINT DISTRIBUTOR_PK PRIMARY KEY (DISTRIBUTOR_ID),  

错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 11 行的“CONSTRAINT DISTRIBUTOR_PK PRIMARY KEY (DISTRIBUTOR_ID), CONSTRAINT DISTRIBUTOR_”附近使用正确的语法

CREATE TABLE MOVIE(  MOVIE_ID   VARCHAR(100),  DIRECTOR   VARCHAR(100) NOT NULL,  NAME   VARCHAR(100) UNIQUE NOT NULL,  TYPE   CHAR(1)   CHECK (TYPE IN ('C','H','S')),  DISTRIBUTOR_ID VARCHAR(100),  ACTOR_NAME   VARCHAR(100),    LENGTH   NUMERIC(14,0)   CHECK (LENGTH > 0),  AWARDS   VARCHAR(1000),  RATINGS   NUMERIC(2,0)   CHECK (RATINGS IN (1,2,3,4,5,6,7,8,9,10)),  RELEASE_YEAR   NUMERIC(4,0),  CONSTRAINT MOVIE_PK PRIMARY KEY (MOVIE_ID),  CONSTRAINT MOVIE_FK FOREIGN KEY (DISTRIBUTOR_ID) REFERENCES DISTRIBUTOR.DISTRIBUTOR_ID) 

错误代码:1215。无法添加外键约束 0.453 秒

【问题讨论】:

【参考方案1】:

你还没有写外键的列名。你需要写例如:

CONSTRAINT VIDEO_DVD_FK1 FOREIGN KEY (DISTRIBUTOR_ID) REFERENCES (DISTRIBUTOR.DISTRIBUTOR_ID),

【讨论】:

以上是关于我的表创建中的 CONSTRAINT 语句的主要内容,如果未能解决你的问题,请参考以下文章

用SQL语句获得PostgreSQL表的主键

如何用SQL语句将数据库中的表的某一时间型字段的默认值设置为当前日期

JDBC操作MySQL中的表

oracle批量生成表主键及索引语句

Oracle修改一个已经存有数据的表的主键

无法从 SQLPLUS 中的 select 语句创建的表中选择数据