¿Alguien puede explicar acerca de la finalidad de PRIMARY KEY, UNIQUE KEY y KEY, si se colocan juntos en un solo CREATE TABLE declaración en MySQL?

CREATE TABLE IF NOT EXISTS `tmp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `tag` int(1) NOT NULL DEFAULT '0',
  `description` varchar(255),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uid` (`uid`),
  KEY `name` (`name`),
  KEY `tag` (`tag`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;

¿Cómo puedo convertir esta consulta a MSSQL?

InformationsquelleAutor sura2k | 2012-06-06

3 Comentarios

  1. 90

    Una de las claves es sólo un índice normal. Un camino a través de la simplificación es pensar en él como un catálogo de una biblioteca. Señala MySQL en la dirección correcta.

    Una única tecla también se utiliza para mejorar la velocidad de búsqueda, pero tiene la restricción de que no puede haber elementos duplicados (no hay dos x e y, donde x no es y y x == y).

    La manual lo explica de la siguiente manera:

    Un índice ÚNICO crea una restricción de tal manera que todos los valores en el índice de
    deben ser distintos. Se produce un error si intenta agregar una nueva fila con un
    valor de la clave que coincide con una fila existente. Esta restricción no se aplica
    para valores NULOS, excepto para el motor de almacenamiento BDB. Para otros motores, un
    Índice ÚNICO permite varios valores NULOS en las columnas que puede contener
    NULL. Si especifica un prefijo de valor para una columna en un índice ÚNICO,
    los valores de la columna debe ser único en el prefijo.

    Una clave principal es un «especial» de la clave única. Básicamente es una clave única, excepto que se utiliza para identificar algo.

    El manual se explica cómo se utilizan los índices en general: aquí.

    En MSSQL, los conceptos son similares. Hay índices, restricciones unique y las claves primarias.

    No ha sido probado, pero creo que la MSSQL equivalente es:

    CREATE TABLE tmp (
      id int NOT NULL PRIMARY KEY IDENTITY,
      uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
      name varchar(255) NOT NULL,
      tag int NOT NULL DEFAULT 0,
      description varchar(255),
    );
    
    CREATE INDEX idx_name ON tmp (name);
    CREATE INDEX idx_tag ON tmp (tag);

    Edit: el código anterior se ha probado ser la correcta; sin embargo, sospecho que hay un mucho mejor la sintaxis para hacerlo. Ha sido un tiempo desde que he utilizado SQL server, y al parecer me he olvidado un poco :).

    • Gran explicación! El código está funcionando muy bien. Muchas gracias!
    • No hay problema. Me alegra poder ayudar :).
    • Gracias por señalarme el lugar correcto en el manual!
    • Genial!!! Este enlace se refieren a la tipificación de MySQL y SQL en la Clave Primaria de la cosa. w3schools.com/sql/sql_primarykey.asp
  2. 27

    Sólo para añadir a las otras respuestas, la documentación da esta explicación:

    • KEY es normalmente sinónimo de INDEX. El atributo clave PRIMARY KEY puede
      también se puede especificar como se acaba de KEY cuando se administra en una definición de columna. Este
      se implementó para la compatibilidad con otros sistemas de base de datos.

    • Un UNIQUE índice crea una restricción de tal manera que todos los valores en el índice de
      deben ser distintos. Se produce un error si intenta agregar una nueva fila con un
      valor de la clave que coincide con una fila existente. Para todos los motores, un UNIQUE
      índice permite múltiples NULL valores para las columnas pueden contener NULL.

    • Un PRIMARY KEY es un índice único donde todas las columnas de clave debe ser definido
      como NOT NULL. Si no están explícitamente declarado como NOT NULL, MySQL
      declara así implícitamente (y en silencio). Una tabla sólo puede tener una
      PRIMARY KEY. El nombre de un PRIMARY KEY es siempre PRIMARY, lo que
      no puede ser utilizado como el nombre de cualquier otro tipo de índice.

    • Gracias a todos ustedes!
    • Compatibilidad con otros sistemas de base de datos? ¿Qué otros DBMS utiliza la palabra «CLAVE» para algo que no es una clave en todo (un índice)? Yo siempre había asumido que era sólo un poco de MySQL extrañeza – y que los autores de MySQL en realidad no saben lo que es una clave es 🙂
    • Cada definición posterior contienen todas las propiedades de la definición anterior. Por ejemplo: Es una «CLAVE ÚNICA» también de «la CLAVE»?
    • sí, eso es correcto.
  3. 3

    MySQL único y claves primarias sirven para identificar las filas. Sólo puede haber una clave Primaria en una tabla, pero uno o más de claves únicas. La clave es solo índice.

    para más detalles se puede comprobar http://www.geeksww.com/tutorials/database_management_systems/mysql/tips_and_tricks/mysql_primary_key_vs_unique_key_constraints.php

    para convertir mysql a mssql probar esto y ver http://gathadams.com/2008/02/07/convert-mysql-to-ms-sql-server/

    • Bellora , su explicación es más clara que la mía. Gran.
    • Bueno, yo acabo de citar los documentos, y no he visto la segunda parte acerca de la conversión. Creo Corbin respuesta lo resume bien.

Dejar respuesta

Please enter your comment!
Please enter your name here