初学者sql缺少关键字和无效标识符
我要走了 [ORA-00905:缺少关键字] 在publisher表中初学者sql缺少关键字和无效标识符,sql,oracle,ora-00904,Sql,Oracle,Ora 00904,我要走了 [ORA-00905:缺少关键字] 在publisher表中 CREATE table Book ( book_title varchar (100) not null , book_genre char(60) not null, Date_of_publish date not null, user_code char(7) not null , book_id char (7) primary key not null , constraint writer__id_fk fo
CREATE table Book
(
book_title varchar (100) not null ,
book_genre char(60) not null,
Date_of_publish date not null,
user_code char(7) not null ,
book_id char (7) primary key not null ,
constraint writer__id_fk foreign key (writer_id),
constraint publisher__id_fk foreign key (publisher_id)
);
我要走了
[ORA-00904::无效标识符]
对于第一个表,外键不引用任何表。对于第二个表,我认为最后一列后面的逗号没有任何帮助。对于第一个表,外键不引用任何表。对于第二个表,我认为上一列后面的逗号没有任何帮助。欢迎来到奇妙的SQL世界!:-) 一般备注: 请告诉我们您使用的是哪种DBMS。MySQL?SQL Server?神谕SQlite?不同的系统使用不同种类的语法 第一句话: 问题似乎出在
外键部分。
通常,您会声明如下内容:
CONSTRAINT[CONSTRAINT\u name]外键([column\u in\u this\u table])引用其他表([column\u in\u OTHER\u table])
编辑(添加):
[此表中的列]
必须存在于DDL中(CREATE table
-语句),如下所示:
CREATE TABLE Book(Book_title…等,publisher_id INT,约束FK_publ_id外键(publisher_id)引用publisher(publisher_id))代码>
在这里,“publisher”表中有一个名为“publisher\u id”的“original”列。您可以从“Book”表中引用它,首先在“Book”表中有一个“publisher_id”列(顺便说一下,它应该与原始列具有相同的DDL)。接下来,您将向“Book”表中添加一个外键,该表将应用于Book(publisher_id)列。请注意,您也可以在“Book”表中对列进行不同的命名,比如说,“Spongebob”或“Patrick”。但为了将来的使用,您希望使用命名约定来告诉您在列中可能会找到什么。因此,您可以为列命名它们所包含的内容
第二句话:
问题在于语句的最后一部分,在列的notnull
部分之后有一个逗号
(部分)你的声明:
publisher_地址varchar2(60)不为空,)代码>
尝试将其替换为:
publisher_地址VARCHAR2(60)不为空)代码>
编辑(自我注释):
VARCHAR2
在Oracle数据库中是有效的数据类型(请参阅:
)欢迎来到SQL的精彩世界!:-)
一般备注:
请告诉我们您使用的是哪种DBMS。MySQL?SQL Server?神谕SQlite?不同的系统使用不同种类的语法
第一句话:
问题似乎出在外键部分。
通常,您会声明如下内容:
CONSTRAINT[CONSTRAINT\u name]外键([column\u in\u this\u table])引用其他表([column\u in\u OTHER\u table])
编辑(添加):
[此表中的列]
必须存在于DDL中(CREATE table
-语句),如下所示:
CREATE TABLE Book(Book_title…等,publisher_id INT,约束FK_publ_id外键(publisher_id)引用publisher(publisher_id))代码>
在这里,“publisher”表中有一个名为“publisher\u id”的“original”列。您可以从“Book”表中引用它,首先在“Book”表中有一个“publisher_id”列(顺便说一下,它应该与原始列具有相同的DDL)。接下来,您将向“Book”表中添加一个外键,该表将应用于Book(publisher_id)列。请注意,您也可以在“Book”表中对列进行不同的命名,比如说,“Spongebob”或“Patrick”。但为了将来的使用,您希望使用命名约定来告诉您在列中可能会找到什么。因此,您可以为列命名它们所包含的内容
第二句话:
问题在于语句的最后一部分,在列的notnull
部分之后有一个逗号
(部分)你的声明:
publisher_地址varchar2(60)不为空,)代码>
尝试将其替换为:
publisher_地址VARCHAR2(60)不为空)代码>
编辑(自我注释):
VARCHAR2
在Oracle数据库中是有效的数据类型(请参阅:
)创建“订单”表时,以下SQL在“PersonID”列上创建外键:
CREATE table publisher
(
publisher_id char (7) primary key not null,
publisher_name char(20) not null,
publisher_number char(10) not null,
publisher_email varchar2(60) not null,
publisher_address varchar2(60) not null,
);
有关更多详细信息,请参阅此链接
希望这能有所帮助。在创建“Orders”表时,以下SQL在“PersonID”列上创建一个外键:
CREATE table publisher
(
publisher_id char (7) primary key not null,
publisher_name char(20) not null,
publisher_number char(10) not null,
publisher_email varchar2(60) not null,
publisher_address varchar2(60) not null,
);
有关更多详细信息,请参阅此链接
希望这有帮助。这就是答案
创建表格簿
(
书名varchar(100)不为空,
book_流派字符(60)不为空,
发布日期的日期不为空,
用户代码字符(7)不为空,
发布者id字符(7)不为空,
writer_id char(7)不为空,
book_id char(7)主键不为空,
约束书\u writer\u id\u fk外键(writer\u id)引用writer(writer\u id),
约束书\u publisher\u id\u fk外键(publisher\u id)引用publisher(publisher\u id)
);
创建表发布器
(
publisher_id char(7)主键不为空,
发布者名称字符(20)不为空,
发布者编号字符(10)不为空,
发布者\u电子邮件varchar2(60)不为空,
发布者地址varchar2(60)不为空
); 这就是答案
创建表格簿
(
书名varchar(100)不为空,
book_流派字符(60)不为空,
发布日期的日期不为空,
用户代码字符(7)不为空,
发布者id字符(7)不为空,
writer_id char(7)不为空,
book_id char(7)主键不为空,
约束书\u writer\u id\u fk外键(writer\u id)引用writer(writer\u id),
约束书\u publisher\u id\u fk外键(publisher\u id)引用publisher