在Oracle数据库中,我有一个主键为GAME_ID的表。 我必须在game_name ='Texas holdem'中插入一行副本,但它告诉我:
UPDATE或INSERT语句尝试插入重复键。
这是我正在使用的查询:
INSERT INTO GAME (SELECT * FROM GAME WHERE NAME = 'Texas Holdem');
答案 0 :(得分:12)
假设您的game_id
是由序列生成的,您可以在select语句中获取一个新内容:
INSERT INTO GAME (game_id, name, col_3)
SELECT seq_game_id.nextval, name, col_3
FROM GAME
WHERE NAME = 'Texas Holdem';
答案 1 :(得分:4)
让我提一个稍微抽象的观点......
您可以插入类似的行,正如其他答案所示。
1 虽然实际的DBMS(包括Oracle)通常允许您创建没有任何密钥的表,但在物理上可以创建相同的重复项。但是,如果您发现自己这样做,请将其视为一个大红旗。
答案 2 :(得分:2)
您只能拥有一行具有相同的键。不要复制密钥。指定要复制的列列表并保留密钥(假设它是自动提供的)。
答案 3 :(得分:0)
您尝试在表格中插入一行。 例如,在您的表中,您有
GAME_ID Name
1 Texas Holdem
您尝试在此行中插入此行,但game_id 1已经存在 所以如果你想插入这个,你需要创建一个这样的新行,以便为这个游戏名称生成一个新的game_id:
INSERT INTO GAME(Name) VALUES ('Texas Holdem')