De Oracle de base de datos tengo una tabla con una clave principal GAME_ID.
Tengo que insertar una copia de una fila donde game_name = «Texas holdem», pero me dice:

Una instrucción INSERT o UPDATE intentado insertar una clave duplicada.

Esta es la consulta que estoy usando:

INSERT INTO GAME (SELECT * FROM GAME WHERE NAME = 'Texas Holdem');
  • CLAVE PRIMARIA significa que la columna contiene valores únicos. y ahora que inserte una copia del mismo valor, lo que significa intentar duplicar. Intento de uso de una SECUENCIA o cosa similar en el PK Columna de expansión SELECCIONA para incluir los nombres de las columnas así,
  • ¿Cómo se puede generar valores únicos para GAME_ID? Estás utilizando una secuencia? Si sí, usted está utilizando de forma explícita o a través de un disparador?
InformationsquelleAutor Mark2 | 2014-01-03

4 Comentarios

  1. 12

    Asumiendo que su game_id es generado por una secuencia, se puede obtener una nueva, como parte de la instrucción select:

    INSERT INTO GAME (game_id, name, col_3)
    SELECT seq_game_id.nextval, name, col_3
    FROM GAME 
    WHERE NAME = 'Texas Holdem';
  2. 4

    Permítanme ofrecer un poco más abstracto punto de perspectiva…

    • En una base de datos relacional, la tabla es una representación física del concepto matemático de relación.
    • Relación es una conjunto (de tuplas, es decir, las filas de la tabla/registros).
    • Un conjunto contiene elemento determinado o no, no puede contener el mismo elemento varias veces (a diferencia de un conjunto múltiple).
    • Por lo tanto, usted nunca puede tener dos filas iguales en la mesa, y llamar a su base de datos «relacional».1

    Puede insertar un similar fila a través de, como otras respuestas han demostrado.


    1 a Pesar de que práctico gestor de base de datos (como Oracle) por lo general le permitirá crear una tabla sin clave, hacer duplicados idénticos físicamente posible. Sin embargo, consideran que es una gran bandera roja si alguna vez te encuentras haciendo eso.

  3. 2

    Sólo puede tener una fila con la misma clave. No duplicado de la llave. Especificar la lista de columnas que desea copiar y dejar la llave de salida (suponiendo que es proporcionada automáticamente).

    • Supongo que no, porque cuando yo no especificar la columna GAME_ID dice «NO se puede INSERTAR el valor NULL EN GAME_ID»
    • Proporcionar el ID de la misma manera que usted la proporcione normalmente. Usted tiene que saber cómo se generan Identificadores en su sistema.
  4. 0

    Intenta insertar una fila ya en su mesa.
    Así, por ejemplo, en la tabla se han

    GAME_ID Name
    1       Texas Holdem

    Intenta insertar en la tabla de esta línea, pero el game_id 1 ya está ahí
    Así que si usted desea insertar esto, usted necesita para crear una nueva línea como esta en el fin de generar una nueva game_id de este nombre en el juego :

    INSERT INTO GAME(Name) VALUES ('Texas Holdem')
    • el problema es que no se generan automáticamente… he puesto el número en la consulta como el tuyo: INSERTAR EN el JUEGO (Game_id, Nombre) VALUES (250, ‘Texas Holdem’)
    • trate de desencadenadores, si quieres incrementar automáticamente.
    • gracias

Dejar respuesta

Please enter your comment!
Please enter your name here