MySQL-Significado de "CLAVE PRIMARIA"," CLAVE ÚNICA "y" CLAVE " cuando se usan juntos al crear una tabla


¿Puede alguien explicar el propósito de PRIMARY KEY, UNIQUE KEY y KEY, si se junta en una sola instrucción CREATE TABLE 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 convertir esta consulta a MSSQL?

Author: Philipp Maurer, 2012-06-06

3 answers

Una clave es solo un índice normal. Una manera de superar la simplificación es pensar en ello como un catálogo de tarjetas en una biblioteca. Apunta a MySQL en la dirección correcta.

También se usa una clave única 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 e x == y).

El manual lo explica de la siguiente manera:

Un índice ÚNICO crea una restricción tal que todos los valores en el índice debe ser distinto. Se produce un error si intenta agregar una nueva fila con un valor de clave que coincide con una fila existente. Esta restricción no se aplica a valores NULOS excepto para el motor de almacenamiento BDB. Para los demás motores, a Índice ÚNICO permite múltiples valores NULOS para columnas que pueden contener NULO. Si especifica un valor de prefijo para una columna en un índice ÚNICO, los valores de columna deben ser únicos dentro del prefijo.

Una clave primaria es una clave única 'especial'. Básicamente es una clave única, excepto que se usa para identificar algo.

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

En MSSQL, los conceptos son similares. Hay índices, restricciones únicas y claves principales.

No probado, pero creo que el equivalente de MSSQL 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);

Editar: el código anterior está probado para ser correcto; sin embargo, sospecho que hay una sintaxis mucho mejor para hacerlo. Ha pasado un tiempo desde que he utilizado SQL server, y al parecer me he olvidado bastante trozo :).

 81
Author: Corbin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-06 05:50:00

Solo para agregar a las otras respuestas, la documentación da esta explicación:

  • KEY es normalmente un sinónimo de INDEX. El atributo clave PRIMARY KEY puede también se especifica como solo KEY cuando se da en una definición de columna. Este se implementó para la compatibilidad con otros sistemas de bases de datos.

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

  • Un PRIMARY KEY es un índice único donde se deben definir todas las columnas clave as NOT NULL. Si no se declaran explícitamente como NOT NULL, MySQL las declara tan implícitamente (y silenciosamente). Una mesa puede tener solo uno PRIMARY KEY. El nombre de un {[2] } es siempre PRIMARY, que así no se puede utilizar como el nombre para cualquier otro tipo de Indice.

 24
Author: Paul Bellora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-06 05:39:51

Las claves únicas y primarias de MySQL sirven para identificar filas. Solo puede haber una clave primaria en una tabla, pero una o más claves únicas. La clave es sólo el índice.

Para más detalles puede consultar 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 pruebe esto y vea http://gathadams.com/2008/02/07/convert-mysql-to-ms-sql-server /

 3
Author: Wazan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-06 05:39:43