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?
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 :).
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 deINDEX
. El atributo clavePRIMARY KEY
puede también se especifica como soloKEY
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, aUNIQUE
index permite múltiples valoresNULL
para columnas que pueden contenerNULL
.Un
PRIMARY KEY
es un índice único donde se deben definir todas las columnas clave asNOT NULL
. Si no se declaran explícitamente comoNOT NULL
, MySQL las declara tan implícitamente (y silenciosamente). Una mesa puede tener solo unoPRIMARY KEY
. El nombre de un {[2] } es siemprePRIMARY
, que así no se puede utilizar como el nombre para cualquier otro tipo de Indice.
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 /
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