当前位置: 首页 > 知识库问答 >
问题:

在SQL中创建约束时,如何正确格式化从另一个表中提取的新表

鲁明知
2023-03-14

下面我创建了一个带有主键、外键和NOTNULL约束的表,但是我一直收到错误

"%s:无效的标识符"

创建表写入器((授权者VARCHAR2(4),名VARCHAR2(10),名VARCHAR2(10),isbnVARCHAR2(10),标题VARCHAR2(30)),
(约束wt_pk主键(授权者),约束wt_nn非空(标题),约束wt_fk外键(isbn)引用书籍(isbn)));

共有2个答案

松俊才
2023-03-14

Oracle不允许您将表定义指定为as。因此,首先创建表,然后添加约束:

CREATE TABLE writers as
    SELECT authorid, fname, lname, isbn, title
    FROM author JOIN
         bookauthor
         USING (authorid) JOIN
         books
         USING (isbn);

ALTER TABLE writers
    ADD CONSTRAINT wt_pk PRIMARY KEY (authorid);
ALTER TABLE writers
    ADD CONSTRAINT wt_nn NOT NULL (title);
ALTER TABLE writers
    ADD CONSTRAINT wt_fk FOREIGN KEY (isbn) REFERENCES books (isbn);

据推测,您实际上希望主键约束在(authorid,isbn)上,而不仅仅是authorid

阎裕
2023-03-14

首先创建表,然后尝试执行insert into select

CREATE TABLE writers
(
    authorid <datatype>, 
    last name <datatype>, 
    first name <datatype>, 
    isbn <datatype>, 
    title <datatype>,  
    CONSTRAINT wt_pk PRIMARY KEY (authorid),
    CONSTRAINT wt_nn NOT NULL (title),
    CONSTRAINT wt_fk FOREIGN KEY (isbn) REFERENCES books (isbn)
) ;

insert into writers (authorid, last name, first name, isbn, title)
SELECT authorid, fname, lname, isbn, title 
     FROM author 
     JOIN bookauthor USING (authorid)
     JOIN books USING (isbn);
 类似资料:
  • 为什么要回复laravel模式 [Illumb\Database\QueryException]SQLSTATE[HY000]:一般错误:1005无法创建表(错误号:150“外键约束格式不正确”)(sql:alter table添加结构

  • 我正在尝试用常规提取来提取强文本json,然后用格式化的json将其发布到下一个请求正文数据中。对于我提取的json,它们没有格式化,我只是想知道是否有任何功能或方法来格式化它? 使用正则表达式提取器获取请求(提取粗体部分) 在下一个请求中发布提取的数据(从上面的请求中提取的JSON数据用正则表达式显示为整个字符串,只是想知道如何在这个正文数据中格式化?)

  • 问题内容: 我创建了它们,但是我忘记了它们是哪个。 我只想 让他们看。 删除表上的所有约束。 问题答案:

  • 这是我的玩具装置。我有三张桌子。一张桌子是客人列表(姓、名,随便什么)、食物列表(豆类、糊类、米饭、蔬菜)和订单列表(客人id、食物id)。我感兴趣的是订单清单。我想对它进行以下条件的约束。 客人必须有3份订单。客人可以有一个空订单。每个客人的订单不能相同,除非该订单为空。 因此订单表将如下所示(使用字符串而不是fk ID): 如果唯一有效的答案是“使用PL/SQL或触发器”,我会确保将其标记为正

  • 问题内容: 是否可以使用其他数据库中的SELECT创建表(在我的开发数据库中)? 我想要类似的东西: 有没有执行此操作的语法,还是我需要首先创建一个数据库链接? 问题答案: 您必须首先创建一个数据链接 。 除非创建数据库链接,否则Oracle无法查询其他数据库。如前所述,如果存在数据库链接,则必须执行以下操作: