【问题标题】:MySQL - Insert statement fails when entering into a table with only foreign keysMySQL - 插入只有外键的表时插入语句失败
【发布时间】:2015-07-17 01:31:24
【问题描述】:

所以我的表看起来像这样(来自"Show Create Table <table>" 查询):

CREATE TABLE stars_in_movies(
star_id int NOT NULL,
movie_id int NOT NULL,
KEY 'star_id' ('star_id'),
KEY 'movie_id' ('movie_id'),
CONSTRAINT 'stars_in_movies_ibfk_1' FOREIGN KEY('star_id') REFERENCES 'stars'('id'),
CONSTRAINT 'stars_in_movies_ibfk_2' FOREIGN KEY('movie_id') REFERENCES 'movies'('id'),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我正在尝试简单地在此表中输入一个新条目:

INSERT INTO stars_in_movies (907010, 834410);

我收到如下错误:

ERROR 1064 (4200): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to user near '907010, 834410)' at line 1

现在我知道这个错误只是一个语法错误,但为什么我会收到这样一个简单的 INSERT 查询的错误?网上到处都建议这将是一个有效的声明,特别是如果两个输入字段是来自其他两个引用表的 ACTUAL id。

编辑:

好的,对于这个简单的示例,我只是缺少VALUES 关键字。补充一点,这个查询怎么会返回同样的错误?

INSERT INTO stars_in_movies
VALUES
(693109, m.id)
SELECT m.id
FROM movies m
WHERE m.title='Inception';

【问题讨论】:

  • 回复:编辑,你不能合并INSERT ... VALUESINSERT ... SELECT

标签: mysql syntax


【解决方案1】:

您好像缺少 VALUES 关键字。

INSERT INTO stars_in_movies (star_id, movie_id) VALUES (907010, 834410)
                                                ^^^^^^

【讨论】:

  • 好吧,这真是微不足道,那么这个问题here 怎么会建议我可以在没有 VALUES 关键字的情况下使用 INSERT 呢?
  • @LeoVannini:- 如果我错了,请纠正我,但是link 是如何与这个链接的?
  • @RahulTripathi 我很抱歉,错了link
  • @LeoVannini:- 是的,那是不同的。如果您使用 select 语句来添加值,那么您不必添加 VALUES 关键字。
  • @LeoVannini:- 更新了我的答案
【解决方案2】:

试试这个:

INSERT INTO stars_in_movies values (907010, 834410);

您缺少关键字values

SQL FIDDLE DEMO

编辑:

评论后,您还可以像这样插入表格中的另一种选择

INSERT INTO stars_in_movies 
select 907010, 834410;

编辑:

这个查询不起作用

INSERT INTO stars_in_movies
VALUES
(693109, m.id)
SELECT m.id
FROM movies m
WHERE m.title='Inception';

您需要在VALUES 中指定特定值。在

INSERT INTO stars_in_movies
    VALUES
    (693109, m.id)

m.id 未定义,因此分析器未知。所以你得到了错误。

您可能正在寻找这个:

INSERT INTO stars_in_movies
SELECT 693109, m.id
FROM movies m
WHERE m.title='Inception';

【讨论】:

  • 是的!非常感谢拉胡尔,最后一个例子是完美的!再次感谢您,特别是对它为什么不起作用的解释。
猜你喜欢
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
相关资源
最近更新 更多