初学者 sql 缺少关键字和无效标识符
beginner sql missing keyword and 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 ,
constraint writer__id_fk foreign key (writer_id),
constraint publisher__id_fk foreign key (publisher_id)
);
我正在
[ORA-00905: missing keyword]
在发布者中 table
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: : invalid identifier]
对于您的第一个 table,外键不引用任何 table。对于你的第二个 table,我想你最后一列后面的逗号没有任何帮助。
欢迎来到SQL的精彩世界! :-)
一般备注:
请告诉我们您使用的是哪种 DBMS。 MySQL? SQL服务器?甲骨文?数据库?不同的系统使用不同种类的语法。
第一个语句:
问题似乎出在 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
语句)中,如下所示:
CREATE TABLE Book ( book_title ... etc., publisher_id INT, CONSTRAINT FK_publ_id FOREIGN KEY(publisher_id) REFERENCES publisher(publisher_id));
在这里,您将在 'publisher'-table 中有一个名为 'publisher_id' 的 'original' 列。您从 'Book'-table 中引用它,首先在 'Book'-table 中有一个 'publisher_id' 列(应该顺便说一下,与原始列具有相同的 DDL)。接下来,您将向 'Book'-table 添加一个 FOREIGN KEY
,它被强加到 Book(publisher_id) 列。请注意,您还可以对 'Book'-table 中的列进行不同的命名,例如 'Spongebob' 或 'Patrick'。但是为了将来的使用,您需要命名约定来说明您可能希望在列中找到什么。所以你会根据它们包含的内容来命名列。
第二条语句:
问题出在您语句的最后一部分,在第 publisher_address
列的 NOT NULL
部分之后有一个 逗号 。
您的陈述(部分):
publisher_address varchar2(60) not null, );
尝试将其替换为:
publisher_address VARCHAR2(60) NOT NULL);
编辑(自我注释):
VARCHAR2
原来是 Oracle 数据库中的有效数据类型(请参阅:
Oracle documentation)
以下 SQL 在创建 "Orders" table 时在 "PersonID" 列上创建一个外键:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
请参阅此 link 了解更多详情
https://www.w3schools.com/sql/sql_foreignkey.asp
希望对您有所帮助。
这就是答案。
创建table本书
(
book_title varchar (100) 不为空,
book_genre char(60) 不为空,
Date_of_publish 日期不为空,
user_code char(7) 不为空,
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)
);
创建 table 发布者
(
publisher_id char(7) 主键不为空,
publisher_name char(20) 不为空,
publisher_number char(10) 不为空,
publisher_email varchar2(60) 不为空,
publisher_address varchar2(60) 不为空
);
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: missing keyword]
在发布者中 table
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: : invalid identifier]
对于您的第一个 table,外键不引用任何 table。对于你的第二个 table,我想你最后一列后面的逗号没有任何帮助。
欢迎来到SQL的精彩世界! :-)
一般备注: 请告诉我们您使用的是哪种 DBMS。 MySQL? SQL服务器?甲骨文?数据库?不同的系统使用不同种类的语法。
第一个语句:
问题似乎出在 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
语句)中,如下所示:
CREATE TABLE Book ( book_title ... etc., publisher_id INT, CONSTRAINT FK_publ_id FOREIGN KEY(publisher_id) REFERENCES publisher(publisher_id));
在这里,您将在 'publisher'-table 中有一个名为 'publisher_id' 的 'original' 列。您从 'Book'-table 中引用它,首先在 'Book'-table 中有一个 'publisher_id' 列(应该顺便说一下,与原始列具有相同的 DDL)。接下来,您将向 'Book'-table 添加一个 FOREIGN KEY
,它被强加到 Book(publisher_id) 列。请注意,您还可以对 'Book'-table 中的列进行不同的命名,例如 'Spongebob' 或 'Patrick'。但是为了将来的使用,您需要命名约定来说明您可能希望在列中找到什么。所以你会根据它们包含的内容来命名列。
第二条语句:
问题出在您语句的最后一部分,在第 publisher_address
列的 NOT NULL
部分之后有一个 逗号 。
您的陈述(部分):
publisher_address varchar2(60) not null, );
尝试将其替换为:
publisher_address VARCHAR2(60) NOT NULL);
编辑(自我注释):
VARCHAR2
原来是 Oracle 数据库中的有效数据类型(请参阅:
Oracle documentation)
以下 SQL 在创建 "Orders" table 时在 "PersonID" 列上创建一个外键:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
请参阅此 link 了解更多详情
https://www.w3schools.com/sql/sql_foreignkey.asp
希望对您有所帮助。
这就是答案。
创建table本书 ( book_title varchar (100) 不为空, book_genre char(60) 不为空, Date_of_publish 日期不为空, user_code char(7) 不为空, 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) );
创建 table 发布者
( publisher_id char(7) 主键不为空, publisher_name char(20) 不为空, publisher_number char(10) 不为空, publisher_email varchar2(60) 不为空, publisher_address varchar2(60) 不为空 );