SQL命令创建表

时间:2018-07-28 06:22:58

标签: sql

我正在尝试运行此查询,但无法正常工作。有人可以找出问题所在吗?

CREATE TABLE Hasagenre
(
    movieId INTEGER ,
    genreId INTEGER ,

    FOREIGN KEY (movieId) REFERENCES Movies ,
    FOREIGN KEY (genreId) REFERENCES Genres ,
    PRIMARY KEY movieId 
) ;

5 个答案:

答案 0 :(得分:1)

创建外键约束的语法是错误的。还应该在外键表上指定列名。

CREATE TABLE Hasagenre
(
    movieId INTEGER PRIMARY KEY,
    genreId INTEGER ,
    FOREIGN KEY (movieId) REFERENCES Movies(Column_name)
    FOREIGN KEY (genreId) REFERENCES Genres(column_name)
);

答案 1 :(得分:1)

在SQL中引用另一个表时,重要的是同时给出主表和被引用表的列名,您将使用它们绑定两个表。因此,连同表格电影,流派等的名称,也要提供公用的列名称。假设表movie和genre分别具有一列movieNo和genreNo,我们可以编写查询。

正确的查询将是:

create table hasagenre
(    movieId INTEGER, 
    genreId INTEGER,
    Foreign Key (movieId) references Movies (movieNo),
    Foreign Key (genreId) references Genre (genreNo),
    Primary Key (movieId)
)

答案 2 :(得分:0)

缺少外键约束中的列:

CREATE TABLE Hasagenre
(
    movieId INTEGER ,
    genreId INTEGER ,

    FOREIGN KEY (movieId) REFERENCES Movies(xxx) ,
    FOREIGN KEY (genreId) REFERENCES Genres(xxx) ,
    PRIMARY KEY movieId 
) ;

更多信息,请访问:https://www.w3schools.com/sql/sql_foreignkey.asp

答案 3 :(得分:0)

到目前为止,人们说您必须指定要引用的列名。好吧,这并不完全正确。我想这取决于您使用的数据库(未指定)。

这是一个基于Oracle的示例,它表明您当然不必这样做。当然,您要引用的列必须是主键或唯一键。

SQL> create table movies
  2    (movieno number primary key,        --> primary key, which can then be referenced ...
  3     name    varchar2(20));

Table created.

SQL> create table hasagenre
  2    (movieid number,
  3     foreign key (movieid) references movies   --> ... while creating a foreign key
  4    );

Table created.

SQL>

答案 4 :(得分:0)

您必须将这些列括在括号中的主键约束中。

CREATE TABLE HASAGENRE
             (MOVIEID INTEGER,
              ...
              PRIMARY KEY (MOVIEID));