初学者 sql 缺少关键字和无效标识符

Posted

技术标签:

【中文标题】初学者 sql 缺少关键字和无效标识符【英文标题】:beginner sql missing keyword and invalid identifier 【发布时间】:2017-11-08 23:34:31 【问题描述】:
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-00905: 缺少关键字]

在发布者表中

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,
);

我来了

[ORA-00904: : 无效标识符]

【问题讨论】:

好的,我解决了 [ORA-00904: : invalid identifier] 问题 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 , 约束 writer__id_fk 外键 REFERENCES writer (writer_id), 约束 publisher__id_fk 外键 REFERENCES publisher (publisher_id) );我得到一个 ORA-00906:缺少左括号 所有问题都解决了。感谢您的帮助 【参考方案1】:

以下 SQL 在创建“Orders”表时在“PersonID”列上创建一个 FOREIGN KEY:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
    );

更多详情请参考此链接

https://www.w3schools.com/sql/sql_foreignkey.asp

希望这会有所帮助。

【讨论】:

【参考方案2】:

欢迎来到美妙的 SQL 世界! :-)

一般说明: 请告诉我们您使用的是哪种 DBMS。 mysql? SQL 服务器?甲骨文? SQLite?不同的系统使用不同种类的语法。

第一句话:

问题似乎出在FOREIGN KEY-部分。 通常,您会声明如下内容:

CONSTRAINT [constraint_name] FOREIGN KEY([column_in_this_table]) REFERENCES OTHER_TABLE([column_in_other_table])

编辑(添加):


[column_in_this_table] 必须存在于您的 DDL (CREATE TABLE-statement) 中,如下所示: CREATE TABLE Book ( book_title ... etc., publisher_id INT, CONSTRAINT FK_publ_id FOREIGN KEY(publisher_id) REFERENCES publisher(publisher_id));

在这里,您将在“publisher”表中拥有一个名为“publisher_id”的“原始”列。您可以在“Book”表中引用它,首先在“Book”表中添加一个“publisher_id”列(顺便说一下,它应该与原始列具有相同的 DDL) .接下来,您将向“Book”表添加FOREIGN KEY,该表被强加在 Book(publisher_id) 列上。请注意,您也可以对“Book”表中的列进行不同的命名,例如“Spongebob”或“Patrick”。但是为了将来的使用,您需要命名约定来说明您可能希望在列中找到什么。所以你会根据它们包含的内容来命名列。


第二个陈述:

问题出在语句的最后一部分,在publisher_address 列的NOT NULL 部分之后有一个逗号

(部分)您的陈述:

publisher_address varchar2(60) not null, );

尝试将其替换为:

publisher_address VARCHAR2(60) NOT NULL);


编辑(自我注释): VARCHAR2 原来是 Oracle 数据库中的有效数据类型(请参阅: Oracle documentation)

【讨论】:

谢谢。我正在使用甲骨文 感谢您提供的信息(专业提示:在您的问题中添加“oracle”作为标签)。另外,我之前没看到:首先在您的 Book 表中添加一个名为 'publisher_id' 的列。然后,在该列上添加一个外键。像这样(缩写示例):CREATE TABLE Book ( book_title ... etc. , publisher_id INT , CONSTRAINT FK_publ_id FOREIGN KEY(publisher_id) REFERENCES publisher(publisher_id) ); 或者: CREATE TABLE Book ( book_title ... etc. , publisher_id INT FOREIGN KEY(publisher_id) REFERENCES publisher(publisher_id) ); 但您无法控制 CONSTRAINT 名称。 太棒了!更新了我的答案以包含其他信息。接受任何给定答案作为首选答案,任何回答者也将不胜感激:-)【参考方案3】:

对于您的第一个表,外键不引用任何表。对于您的第二张表,我想您最后一列之后的逗号没有任何帮助。

【讨论】:

引用表格的正确方法是什么。我有一个名为 writer 的表和一个名为 publisher 的表【参考方案4】:

这就是答案。

创建表书 ( book_title varchar (100) not null , book_genre char(60) 不为空, Date_of_publish 日期不为空, user_code char(7) not null , publisher_id char (7) 不为空, writer_id char(7) 不为空, book_id char (7) 主键不为空, CONSTRAINT book_writer_id_fk FOREIGN KEY(writer_id) REFERENCES writer(writer_id), CONSTRAINT book_publisher_id_fk FOREIGN KEY(publisher_id) REFERENCES publisher(publisher_id) );

创建表发布者

( publisher_id char (7) 主键不为空, publisher_name char(20) 不为空, publisher_number char(10) 不为空, publisher_email varchar2(60) 不为空, 发布者地址 varchar2(60) 不为空 );

【讨论】:

以上是关于初学者 sql 缺少关键字和无效标识符的主要内容,如果未能解决你的问题,请参考以下文章

初学Python

万字文肝Java基础知识

Python初学总结

什么是arduino无效设置

(我是初学者)数据库连接

python 函数 初学