{"id":15984,"date":"2024-07-29T14:27:12","date_gmt":"2024-07-29T10:57:12","guid":{"rendered":"https:\/\/www.itpiran.net\/blog\/?p=15984"},"modified":"2024-07-29T14:27:12","modified_gmt":"2024-07-29T10:57:12","slug":"how-to-use-primary-keys-in-sql","status":"publish","type":"post","link":"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-primary-keys-in-sql\/","title":{"rendered":"C\u00f3mo usar las claves primarias en SQL"},"content":{"rendered":"<h2 id=\"%d9%85%d9%82%d8%af%d9%85%d9%87\">Introducci\u00f3n<\/h2>\n<p>Una de las caracter\u00edsticas valiosas de las bases de datos relacionales es el formato de los datos en una estructura bien definida. Esta estructura se logra mediante el uso de tablas con columnas fijas, el uso de tipos de datos bien definidos y la garant\u00eda de que cada fila tenga el mismo formato. Al almacenar datos como filas en tablas, es igualmente importante poder encontrarlos y hacer referencia a ellos sin ambig\u00fcedades. En el Lenguaje de Consulta Estructurado (SQL), esto se puede lograr mediante claves primarias, que act\u00faan como identificadores de filas individuales en las tablas de una base de datos relacional.<\/p>\n<p>En este tutorial, aprender\u00e1 sobre las claves primarias y a usar diferentes tipos para identificar filas \u00fanicas en las tablas de bases de datos. Con algunos conjuntos de datos de ejemplo, crear\u00e1 claves primarias en columnas individuales, columnas m\u00faltiples y claves secuenciales autoincrementales.<\/p>\n<h5 id=\"%d9%be%db%8c%d8%b4-%d9%86%db%8c%d8%a7%d8%b2%d9%87%d8%a7\">Requisitos previos<\/h5>\n<p>Para seguir esta gu\u00eda, necesita un ordenador con un sistema de gesti\u00f3n de bases de datos relacionales (SGBDR) basado en SQL. Las instrucciones y los ejemplos de esta gu\u00eda se han validado en el siguiente entorno:<\/p>\n<ul>\n<li>Un servidor con Ubuntu 20.04, con un usuario sin privilegios de administrador pero con privilegios administrativos y un cortafuegos configurado con UFW.<\/li>\n<li>MySQL est\u00e1 instalado y protegido en el servidor.<\/li>\n<li>Introducci\u00f3n b\u00e1sica a la ejecuci\u00f3n de consultas SELECT para recuperar datos de la base de datos.<\/li>\n<\/ul>\n<p><span style=\"color: #ff0000;\">Nota: Tenga en cuenta que muchos RDBMS utilizan su propia implementaci\u00f3n de SQL. Si bien los comandos mencionados en este tutorial funcionan en la mayor\u00eda de los RDBMS y las claves primarias forman parte del est\u00e1ndar SQL, algunas funciones son espec\u00edficas de cada base de datos y, por lo tanto, la sintaxis o el resultado exactos pueden variar si se prueban en un sistema distinto de MySQL.<\/span><\/p>\n<p>Tambi\u00e9n necesitar\u00e1 una base de datos vac\u00eda para crear las tablas usando claves primarias. Le recomendamos consultar la secci\u00f3n &quot;Conectarse a MySQL y configurar una base de datos de ejemplo&quot; a continuaci\u00f3n para obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo conectarse al servidor MySQL y crear la base de datos de prueba utilizada en los ejemplos de esta gu\u00eda.<\/p>\n<h2 id=\"%d8%a7%d8%aa%d8%b5%d8%a7%d9%84-%d8%a8%d9%87-mysql-%d9%88-%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%db%8c%da%a9-%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87-%d8%af%d8%a7%d8%af%d9%87-%d9%86%d9%85\">Conexi\u00f3n a MySQL y configuraci\u00f3n de una base de datos de ejemplo<\/h2>\n<p>En esta secci\u00f3n, se conectar\u00e1 al servidor MySQL y crear\u00e1 una instancia de base de datos para poder utilizar los ejemplos de esta gu\u00eda.<\/p>\n<p>Si su sistema de base de datos SQL se ejecuta en un servidor remoto, con\u00e9ctese a su servidor mediante SSH desde su m\u00e1quina local:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>ssh sammy@your_server_ip<\/code><\/pre>\n<\/div>\n<p>A continuaci\u00f3n, abre la consola del servidor MySQL y sustituye Sami por tu nombre de usuario de MySQL:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>mysql -u sammy -p\r\n<\/code><\/pre>\n<\/div>\n<p>Crea una base de datos llamada primary_keys:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE DATABASE primary_keys;\r\n<\/code><\/pre>\n<\/div>\n<p>Si la base de datos se cre\u00f3 correctamente, recibir\u00e1 el siguiente resultado:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 1 row affected (0.01 sec)<\/code><\/pre>\n<\/div>\n<p>Para seleccionar la base de datos primary_keys, ejecute la siguiente declaraci\u00f3n USE:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>USE primary_keys;\r\n<\/code><\/pre>\n<\/div>\n<p>Obtendr\u00e1s el siguiente resultado:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nDatabase changed<\/code><\/pre>\n<\/div>\n<p>Una vez seleccionada una base de datos, puede crear tablas de ejemplo en ella. Ya est\u00e1 listo para seguir el resto de la gu\u00eda y empezar a trabajar con claves primarias en MySQL.<\/p>\n<h2 id=\"%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%da%a9%d9%84%db%8c%d8%af%d9%87%d8%a7%db%8c-%d8%a7%d8%b5%d9%84%db%8c\">Introducci\u00f3n a las tonalidades mayores<\/h2>\n<p>Los datos de una base de datos relacional se almacenan en tablas con una estructura espec\u00edfica y uniforme de filas individuales. La definici\u00f3n de la tabla describe las columnas y los tipos de datos que se pueden almacenar en ellas. Esto por s\u00ed solo es suficiente para almacenar informaci\u00f3n en la base de datos y encontrarla mediante diversos criterios de filtro mediante la cl\u00e1usula WHERE. Sin embargo, esta estructura no garantiza que cada fila se encuentre sin ambig\u00fcedades.<\/p>\n<p>Imagine una base de datos con todos los veh\u00edculos registrados que pueden circular por la v\u00eda p\u00fablica. Esta base de datos contiene informaci\u00f3n como la marca, el modelo, el a\u00f1o de fabricaci\u00f3n y el color de la pintura. Sin embargo, si busca un Chevrolet Camaro rojo fabricado en 2007, podr\u00eda encontrar m\u00e1s de uno. Al fin y al cabo, los fabricantes venden los mismos coches a m\u00faltiples clientes. Por eso, los coches registrados tienen matr\u00edculas que los identifican. Si busca un coche con la matr\u00edcula OFP857, puede estar seguro de que este criterio solo encontrar\u00e1 un coche. Esto se debe a que, por ley, las matr\u00edculas identifican de forma \u00fanica a los coches registrados. En una base de datos relacional, este tipo de datos se denomina clave principal.<\/p>\n<p>Las claves primarias son identificadores \u00fanicos que se encuentran en una columna o conjunto de columnas y que permiten identificar inequ\u00edvocamente cada fila de una tabla de base de datos. Varias reglas reflejan las caracter\u00edsticas t\u00e9cnicas de las claves primarias:<\/p>\n<ul>\n<li>Una clave principal debe usar valores \u00fanicos. Si la clave principal consta de m\u00e1s de una columna, la combinaci\u00f3n de valores en estas columnas debe ser \u00fanica en toda la tabla. Dado que la clave identifica de forma \u00fanica cada fila, no puede aparecer m\u00e1s de una vez.<\/li>\n<li>Una clave principal no debe contener valores NULL.<\/li>\n<li>Cada tabla de base de datos solo puede utilizar una clave principal.<\/li>\n<\/ul>\n<p>El motor de base de datos aplica estas reglas, por lo que si se define una clave principal en una tabla, puede confiar en que esos atributos son correctos.<\/p>\n<p>Adem\u00e1s de estas caracter\u00edsticas t\u00e9cnicas, tambi\u00e9n debe considerar el contenido de los datos para decidir qu\u00e9 tipo de datos es adecuado para convertirse en una clave principal. Las claves naturales son identificadores que ya existen en el conjunto de datos, mientras que las claves sustitutas son identificadores artificiales.<\/p>\n<p>Algunas estructuras de datos tienen claves primarias que aparecen de forma natural en el conjunto de datos, como los n\u00fameros de matr\u00edcula en una base de datos de veh\u00edculos o los n\u00fameros de la Seguridad Social en un registro de ciudadanos estadounidenses. En ocasiones, estos identificadores no son un valor \u00fanico, sino un par o una combinaci\u00f3n de varios valores. Por ejemplo, en un directorio local de viviendas de una ciudad, el nombre o el n\u00famero de una calle por s\u00ed solos no pueden identificar una casa de forma \u00fanica. Puede haber varias casas en una calle, y el mismo n\u00famero puede aparecer en varias de ellas. Sin embargo, un par de nombres y n\u00fameros de calles puede considerarse un identificador \u00fanico de vivienda. Estos identificadores de origen natural se denominan claves naturales.<\/p>\n<p>Sin embargo, a menudo los datos no pueden identificarse de forma \u00fanica mediante los valores de una sola columna o un peque\u00f1o subconjunto de columnas. En ese caso, se crean claves primarias artificiales, por ejemplo, mediante una secuencia de n\u00fameros o identificadores generados aleatoriamente, como los UUID. Estas claves se denominan claves sustitutas.<\/p>\n<p>En las siguientes secciones, crear\u00e1 claves naturales basadas en una o m\u00e1s columnas y crear\u00e1 claves alternativas en tablas donde una clave natural no es una opci\u00f3n.<\/p>\n<h2 id=\"%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%da%a9%d9%84%db%8c%d8%af-%d8%a7%d8%b5%d9%84%db%8c-%d8%af%d8%b1-%db%8c%da%a9-%d8%b3%d8%aa%d9%88%d9%86\">Crear una clave principal en una columna<\/h2>\n<p>En muchos casos, un conjunto de datos incluye naturalmente una columna que permite identificar de forma \u00fanica las filas de una tabla. En estos casos, se puede crear una clave natural para describir los datos. Siguiendo con el ejemplo anterior de la base de datos de veh\u00edculos matriculados, imagine una tabla con la siguiente estructura:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Sample table\r\n+---------------+-----------+------------+-------+------+\r\n| license_plate | brand | model | color | year |\r\n+---------------+-----------+------------+-------+------+\r\n| ABC123 | Ford | Mustang | Red | 2018 |\r\n| CES214 | Ford | Mustang | Red | 2018 |\r\n| DEF456 | Chevrolet | Camaro | Blue | 2016 |\r\n| GHI789 | Dodge | Challenger | Black | 2014 |\r\n+---------------+-----------+------------+-------+------+<\/code><\/pre>\n<\/div>\n<p>Tanto la primera como la segunda fila describen un Ford Mustang rojo de 2018. No se puede identificar el coche de forma \u00fanica mediante la marca y el modelo. La matr\u00edcula es diferente en ambos casos y proporciona un buen identificador \u00fanico para cada fila de la tabla. Dado que el n\u00famero de matr\u00edcula ya forma parte de los datos, usarlo como clave principal crea una clave natural. Si se crea la tabla sin usar una clave principal en la columna &quot;Matr\u00edcula&quot;, se corre el riesgo de que aparezca una p\u00e1gina duplicada o vac\u00eda en el conjunto de datos en alg\u00fan momento.<\/p>\n<p>A continuaci\u00f3n, crea una tabla similar a la anterior con la columna License_plate como clave principal y las siguientes columnas:<\/p>\n<ul>\n<li>Matr\u00edcula: Esta columna contiene el n\u00famero de matr\u00edcula, representado por el tipo de datos varchar.<\/li>\n<li>Marca: Esta columna representa la marca del autom\u00f3vil, expresada mediante el tipo de dato varchar con un m\u00e1ximo de 50 caracteres.<\/li>\n<li>Modelo: Esta columna contiene el modelo del autom\u00f3vil, expresado mediante el tipo de datos varchar con un m\u00e1ximo de 50 caracteres.<\/li>\n<li>Color: esta columna contiene el color, expresado mediante el tipo de datos varchar con un m\u00e1ximo de 20 caracteres.<\/li>\n<li>a\u00f1o: Esta columna muestra el a\u00f1o de fabricaci\u00f3n del autom\u00f3vil, expresado utilizando el tipo de datos int para almacenar datos num\u00e9ricos.<\/li>\n<\/ul>\n<p>Para crear la tabla de m\u00e1quinas, ejecute la siguiente declaraci\u00f3n SQL:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE TABLE cars (\r\nlicense_plate varchar(8) PRIMARY KEY,\r\nbrand varchar(50),\r\nmodel varchar(50),\r\ncolor varchar(20),\r\nyear int\r\n);... *\/<\/code><\/pre>\n<\/div>\n<p>La instrucci\u00f3n PRIMARY KEY sigue la definici\u00f3n del tipo de dato License_plate. Al trabajar con claves primarias basadas en columnas individuales, puede usar la sintaxis simplificada para crear la clave y escribirla en la definici\u00f3n de la columna.<\/p>\n<p>Si se imprime el siguiente resultado, la tabla se ha creado correctamente:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 0 rows affected (0.00 sec)<\/code><\/pre>\n<\/div>\n<p>Despu\u00e9s de eso, cargue la tabla con las filas de muestra proporcionadas en el ejemplo anterior ejecutando la siguiente operaci\u00f3n INSERT INTO:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO cars VALUES\r\n('ABC123', 'Ford', 'Mustang', 'Red', 2018),\r\n('CES214', 'Ford', 'Mustang', 'Red', 2018),\r\n('DEF456', 'Chevrolet', 'Camaro', 'Blue', 2016),\r\n('GHI789', 'Dodge', 'Challenger', 'Black', 2014);<\/code><\/pre>\n<\/div>\n<p>La base de datos responder\u00e1 con un mensaje de \u00e9xito:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 4 rows affected (0.010 sec)\r\nRecords: 4 Duplicates: 0 Warnings: 0<\/code><\/pre>\n<\/div>\n<p>Ahora puede verificar que la tabla reci\u00e9n creada contiene los datos y el formato esperados utilizando la declaraci\u00f3n SELECT:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT * FROM cars;\r\n<\/code><\/pre>\n<\/div>\n<p>La salida muestra una tabla similar a la que aparece al principio de la secci\u00f3n:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+---------------+-----------+------------+-------+------+\r\n| license_plate | brand | model | color | year |\r\n+---------------+-----------+------------+-------+------+\r\n| ABC123 | Ford | Mustang | Red | 2018 |\r\n| CES214 | Ford | Mustang | Red | 2018 |\r\n| DEF456 | Chevrolet | Camaro | Blue | 2016 |\r\n| GHI789 | Dodge | Challenger | Black | 2014 |\r\n+---------------+-----------+------------+-------+------+<\/code><\/pre>\n<\/div>\n<p>A continuaci\u00f3n, puede comprobar si el motor de base de datos garantiza las reglas de la clave principal. Intente insertar un coche con matr\u00edcula duplicada ejecutando lo siguiente:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO cars VALUES ('DEF456', 'Jeep', 'Wrangler', 'Yellow', 2019);\r\n<\/code><\/pre>\n<\/div>\n<p>MySQL responde con un mensaje de error que indica que la etiqueta DEF456 genera una entrada duplicada para la clave principal:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\">Output\r\nERROR 1062 (23000): Duplicate entry 'DEF456' for key 'cars.PRIMARY'<\/pre>\n<\/div>\n<p><span style=\"color: #ff0000;\">Nota: En esencia, las claves primarias se implementan con \u00edndices \u00fanicos y comparten muchas de las propiedades de los \u00edndices que se crean manualmente para otras columnas de una tabla. Es m\u00e1s, los \u00edndices de clave primaria tambi\u00e9n mejoran el rendimiento al consultar una tabla con la columna en la que se define el \u00edndice. Para obtener m\u00e1s informaci\u00f3n sobre el uso de \u00edndices para este prop\u00f3sito, consulte la gu\u00eda &quot;C\u00f3mo usar \u00edndices&quot; de este tutorial.<\/span><\/p>\n<p>Ahora puede estar seguro de que no se permiten matr\u00edculas duplicadas. A continuaci\u00f3n, verifique si se puede importar un coche con matr\u00edcula en blanco:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO cars VALUES (NULL, 'Jeep', 'Wrangler', 'Yellow', 2019);\r\n<\/code><\/pre>\n<\/div>\n<p>Esta vez la base de datos responder\u00e1 con otro mensaje de error:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nERROR 1048 (23000): Column 'license_plate' cannot be null<\/code><\/pre>\n<\/div>\n<p>Con estas dos reglas aplicadas por la base de datos, puede estar seguro de que License_plate identifica de forma \u00fanica cada fila de la tabla. Si consulta la tabla con cada matr\u00edcula, obtendr\u00e1 una fila cada vez.<\/p>\n<p>En la siguiente secci\u00f3n, aprender\u00e1 c\u00f3mo utilizar claves principales con m\u00faltiples columnas.<\/p>\n<h2 id=\"%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%da%a9%d9%84%db%8c%d8%af-%d8%a7%d8%b5%d9%84%db%8c-%d8%af%d8%b1-%da%86%d9%86%d8%af%db%8c%d9%86-%d8%b3%d8%aa%d9%88%d9%86\">Creaci\u00f3n de una clave principal en varias columnas<\/h2>\n<p>Cuando una columna no es suficiente para identificar de forma \u00fanica una fila en una tabla, puede crear claves principales que utilicen m\u00e1s de una columna.<\/p>\n<p>Por ejemplo, imaginemos un registro de viviendas donde ni el nombre ni el n\u00famero de la calle son suficientes para identificar cada casa:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Sample table\r\n+-------------------+---------------+-------------------+------+\r\n| street_name | street_number | house_owner | year |\r\n+-------------------+---------------+-------------------+------+\r\n| 5th Avenue | 100 | Bob Johnson | 2018 |\r\n| Broadway | 1500 | Jane Smith | 2016 |\r\n| Central Park West | 100 | John Doe | 2014 |\r\n| Central Park West | 200 | Tom Thompson | 2015 |\r\n| Lexington Avenue | 5001 | Samantha Davis | 2010 |\r\n| Park Avenue | 7000 | Michael Rodriguez | 2012 |\r\n+-------------------+---------------+-------------------+------+<\/code><\/pre>\n<\/div>\n<p>El nombre de la calle Central Park West aparece m\u00e1s de una vez en la tabla, al igual que el n\u00famero 100. Sin embargo, no se observan pares duplicados de nombre y n\u00famero de calle. En este caso, aunque ninguna columna puede ser la clave principal, el par de esos dos valores puede utilizarse para identificar de forma \u00fanica cada fila de la tabla.<\/p>\n<p>A continuaci\u00f3n, crea una tabla similar a la que se muestra arriba con las siguientes columnas:<\/p>\n<ul>\n<li>street_name: Esta columna representa el nombre de la calle donde se encuentra la casa, con un tipo de datos varchar limitado a 50 caracteres.<\/li>\n<li>street_number: Esta columna contiene el n\u00famero de la calle de la casa, representado con el tipo de dato varchar. Esta columna puede almacenar hasta 5 caracteres. No utiliza el tipo de dato num\u00e9rico int, ya que algunos n\u00fameros de calle pueden contener letras (p. ej., 200B).<\/li>\n<li>house_owner: esta columna contiene el nombre del propietario de la casa, representado por el tipo de datos varchar limitado a 50 caracteres.<\/li>\n<li>a\u00f1o: Esta columna representa el a\u00f1o en que se construy\u00f3 la casa, representado con el tipo de datos int para almacenar valores num\u00e9ricos.<\/li>\n<\/ul>\n<p>Esta vez, la clave principal usa las columnas street_name y street_number en lugar de solo una. Para ello, ejecute la siguiente instrucci\u00f3n SQL:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE TABLE houses (\r\nstreet_name varchar(50),\r\nstreet_number varchar(5),\r\nhouse_owner varchar(50),\r\nyear int,\r\nPRIMARY KEY(street_name, street_number)\r\n);<\/code><\/pre>\n<\/div>\n<p>Esta vez, a diferencia del ejemplo anterior, la instrucci\u00f3n PRIMARY KEY aparece debajo de las definiciones de columna. La instrucci\u00f3n PRIMARY KEY est\u00e1 entre par\u00e9ntesis con dos nombres de columna: street_name y street_number. Esta sintaxis crea una clave principal en la tabla de casas, que se ubica en dos columnas.<\/p>\n<p>Si se imprime el siguiente resultado, la tabla se ha creado correctamente:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 0 rows affected (0.00 sec)<\/code><\/pre>\n<\/div>\n<p>Despu\u00e9s de eso, cargue la tabla con las filas de muestra proporcionadas en el ejemplo anterior ejecutando la siguiente operaci\u00f3n INSERT INTO:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO houses VALUES\r\n('Central Park West', '100', 'John Doe', 2014),\r\n('Broadway', '1500', 'Jane Smith', 2016),\r\n('5th Avenue', '100', 'Bob Johnson', 2018),\r\n('Lexington Avenue', '5001', 'Samantha Davis', 2010),\r\n('Park Avenue', '7000', 'Michael Rodriguez', 2012),\r\n('Central Park West', '200', 'Tom Thompson', 2015);\r\n<\/code><\/pre>\n<\/div>\n<p>La base de datos responder\u00e1 con un mensaje de \u00e9xito:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 6 rows affected (0.000 sec)\r\nRecords: 6 Duplicates: 0 Warnings: 0<\/code><\/pre>\n<\/div>\n<p>Ahora puede verificar que la tabla reci\u00e9n creada contiene los datos y el formato esperados utilizando la declaraci\u00f3n SELECT:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT * FROM houses;\r\n<\/code><\/pre>\n<\/div>\n<p>La salida muestra una tabla similar a la que aparece al principio de la secci\u00f3n:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+-------------------+---------------+-------------------+------+\r\n| street_name | street_number | house_owner | year |\r\n+-------------------+---------------+-------------------+------+\r\n| 5th Avenue | 100 | Bob Johnson | 2018 |\r\n| Broadway | 1500 | Jane Smith | 2016 |\r\n| Central Park West | 100 | John Doe | 2014 |\r\n| Central Park West | 200 | Tom Thompson | 2015 |\r\n| Lexington Avenue | 5001 | Samantha Davis | 2010 |\r\n| Park Avenue | 7000 | Michael Rodriguez | 2012 |\r\n+-------------------+---------------+-------------------+------+\r\n6 rows in set (0.000 sec)<\/code><\/pre>\n<\/div>\n<p>Ahora, verifiquemos si la base de datos permite filas que repiten nombres y n\u00fameros de calles, pero restringe la aparici\u00f3n de direcciones completas duplicadas en la tabla. Comencemos agregando otra casa en Park Street:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO houses VALUES ('Park Avenue', '8000', 'Emily Brown', 2011);\r\n<\/code><\/pre>\n<\/div>\n<p>MySQL responde con un mensaje de \u00e9xito porque la direcci\u00f3n 8000 Park Avenue no aparec\u00eda previamente en la tabla:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 1 row affected (0.010 sec)<\/code><\/pre>\n<\/div>\n<p>Un resultado similar ocurre cuando se agrega una casa en 8000 Main Street y se repite el n\u00famero de calle:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO houses VALUES ('Main Street', '8000', 'David Jones', 2009);\r\n<\/code><\/pre>\n<\/div>\n<p>Una vez m\u00e1s, esto inserta una nueva fila correctamente porque no se repite la direcci\u00f3n completa:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 1 row affected (0.010 sec)<\/code><\/pre>\n<\/div>\n<p>Sin embargo, agregue otra casa en 100 5th Avenue utilizando la siguiente declaraci\u00f3n INSERT:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO houses VALUES ('5th Avenue', '100', 'Josh Gordon', 2008);\r\n<\/code><\/pre>\n<\/div>\n<p>La base de datos responde con un mensaje de error, inform\u00e1ndole que hay una entrada duplicada para la clave principal para el par de valores 5th Avenue y 100:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nERROR 1062 (23000): Duplicate entry '5th Avenue-100' for key 'houses.PRIMARY'<\/code><\/pre>\n<\/div>\n<p>La base de datos aplica correctamente las reglas de clave principal con la clave definida en un par de columnas. Puede estar seguro de que la direcci\u00f3n completa, incluyendo el nombre y el n\u00famero de la calle, no se duplicar\u00e1 en la tabla.<\/p>\n<p>En esta secci\u00f3n, cre\u00f3 una clave natural con un par de columnas para identificar de forma \u00fanica cada fila de la tabla de inicio. Sin embargo, las claves primarias no siempre se pueden extraer del conjunto de datos. En la siguiente secci\u00f3n, utilizar\u00e1 claves primarias artificiales que no provienen directamente de los datos.<\/p>\n<h2 id=\"%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%db%8c%da%a9-%da%a9%d9%84%db%8c%d8%af-%d8%a7%d8%b5%d9%84%db%8c-%d9%85%d8%aa%d9%88%d8%a7%d9%84%db%8c\">Creaci\u00f3n de una clave primaria secuencial<\/h2>\n<p>Hasta ahora, ha creado claves primarias \u00fanicas utilizando columnas del conjunto de datos de muestra. Sin embargo, en algunos casos, los datos se duplican inevitablemente, lo que impide que las columnas sean identificadores \u00fanicos fiables. En estos casos, puede crear claves primarias secuenciales utilizando los identificadores generados. Cuando sus datos requieren la creaci\u00f3n de nuevos identificadores para identificar filas, las claves primarias creadas a partir de esos identificadores artificiales se denominan claves sustitutas.<\/p>\n<p>Imaginen una lista de miembros de un club de lectura: una reuni\u00f3n informal a la que cualquiera puede unirse sin necesidad de mostrar una identificaci\u00f3n oficial. Es probable que personas con nombres similares se unan al club en alg\u00fan momento:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Sample table\r\n+------------+-----------+\r\n| first_name | last_name |\r\n+------------+-----------+\r\n| John | Doe |\r\n| Jane | Smith |\r\n| Bob | Johnson |\r\n| Samantha | Davis |\r\n| Michael | Rodriguez |\r\n| Tom | Thompson |\r\n| Sara | Johnson |\r\n| David | Jones |\r\n| Jane | Smith |\r\n| Bob | Johnson |\r\n+------------+-----------+<\/code><\/pre>\n<\/div>\n<p>Los nombres Bob Johnson y Jane Smith se repiten en la tabla. Se necesitar\u00eda un identificador adicional para identificar qui\u00e9n es qui\u00e9n, y no hay forma de identificar las filas de forma \u00fanica. Si se mantuviera una lista de miembros del club de lectura en papel, se podr\u00edan usar identificadores auxiliares para distinguir a las personas con nombres similares dentro del grupo.<\/p>\n<p>Se puede hacer algo similar en una base de datos relacional usando una columna adicional que contenga identificadores generados, no reales, cuyo \u00fanico prop\u00f3sito es aislar de forma \u00fanica todas las filas de la tabla. La llamaremos Member_id.<\/p>\n<p>Sin embargo, crear dicho identificador cada vez que se quiere a\u00f1adir un nuevo miembro del club de lectura a la base de datos resulta complicado. Para solucionar este problema, MySQL ofrece una funci\u00f3n de autoincremento de columnas num\u00e9ricas, donde la base de datos incrementa autom\u00e1ticamente el valor de la columna mediante una secuencia de enteros.<\/p>\n<p>Creemos una tabla similar a la anterior. Agregaremos una columna de autoincremento (member_id) para guardar un n\u00famero asignado autom\u00e1ticamente a cada miembro del club. Este n\u00famero servir\u00e1 como clave principal de la tabla:<\/p>\n<p>Member_id: esta columna tiene un identificador num\u00e9rico de incremento autom\u00e1tico representado por el tipo de datos int.<\/p>\n<p>first_name: Esta columna contiene el nombre de los miembros del club, representado por el tipo de datos varchar limitado a 50 caracteres.<\/p>\n<p>last_name: Esta columna contiene el apellido de los miembros del club, que se muestra con un tipo de datos varchar limitado a 50 caracteres.<\/p>\n<p>Para crear la tabla, ejecute la siguiente declaraci\u00f3n SQL:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE TABLE club_members (\r\nmember_id int AUTO_INCREMENT PRIMARY KEY,\r\nfirst_name varchar(50),\r\nlast_name varchar(50)\r\n);<\/code><\/pre>\n<\/div>\n<p>Aunque la instrucci\u00f3n PRIMARY KEY aparece despu\u00e9s de la definici\u00f3n del tipo de columna, al igual que una clave primaria de una sola columna, aparece un atributo adicional antes: AUTO_INCREMENT. Este atributo indica a MySQL que genere autom\u00e1ticamente valores para esa columna, si no se proporciona expl\u00edcitamente, mediante una secuencia num\u00e9rica creciente.<\/p>\n<p><span style=\"color: #ff0000;\">Nota: La propiedad AUTO_INCREMENT para las definiciones de columnas es espec\u00edfica de MySQL. Otras bases de datos suelen ofrecer m\u00e9todos similares para generar claves secuenciales, pero la sintaxis var\u00eda seg\u00fan el motor. En caso de duda, recomendamos consultar la documentaci\u00f3n oficial de su RDBMS.<\/span><\/p>\n<p><span style=\"color: #000000;\">Si se imprime el siguiente resultado, la tabla se ha creado correctamente:<\/span><\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 0 rows affected (0.00 sec)<\/code><\/pre>\n<\/div>\n<p>Despu\u00e9s de eso, cargue la tabla con las filas de muestra proporcionadas en el ejemplo anterior ejecutando la siguiente operaci\u00f3n INSERT INTO:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO club_members (first_name, last_name) VALUES\r\n('John', 'Doe'),\r\n('Jane', 'Smith'),\r\n('Bob', 'Johnson'),\r\n('Samantha', 'Davis'),\r\n('Michael', 'Rodriguez'),\r\n('Tom', 'Thompson'),\r\n('Sara', 'Johnson'),\r\n('David', 'Jones'),\r\n('Jane', 'Smith'),\r\n('Bob', 'Johnson');<\/code><\/pre>\n<\/div>\n<p>La declaraci\u00f3n INSERT ahora incluye una lista de nombres de columnas (first_name y last_name), lo que garantiza que la base de datos sepa que la columna Member_id no se proporciona en el conjunto de datos, por lo que se debe tomar el valor predeterminado en su lugar.<\/p>\n<p>La base de datos responder\u00e1 con un mensaje de \u00e9xito:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 10 rows affected (0.002 sec)\r\nRecords: 10 Duplicates: 0 Warnings: 0<\/code><\/pre>\n<\/div>\n<p>Utilice la instrucci\u00f3n SELECT para verificar los datos en la tabla reci\u00e9n creada:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT * FROM club_members;\r\n<\/code><\/pre>\n<\/div>\n<p>La salida muestra una tabla similar a la que aparece al principio de la secci\u00f3n:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+-----------+------------+-----------+\r\n| member_id | first_name | last_name |\r\n+-----------+------------+-----------+\r\n| 1 | John | Doe |\r\n| 2 | Jane | Smith |\r\n| 3 | Bob | Johnson |\r\n| 4 | Samantha | Davis |\r\n| 5 | Michael | Rodriguez |\r\n| 6 | Tom | Thompson |\r\n| 7 | Sara | Johnson |\r\n| 8 | David | Jones |\r\n| 9 | Jane | Smith |\r\n| 10 | Bob | Johnson |\r\n+-----------+------------+-----------+\r\n10 rows in set (0.000 sec)<\/code><\/pre>\n<\/div>\n<p>Sin embargo, esta vez, la columna Member_id aparece en el resultado y contiene una secuencia de n\u00fameros del 1 al 10. Con esta columna, las filas duplicadas de Jane Smith y Bob Johnson ya no son reconocibles porque cada nombre est\u00e1 asociado con un identificador \u00fanico (Member_id).<\/p>\n<p>Ahora, verifiquemos si la base de datos nos permite agregar otro Tom Thompson a la lista de miembros del club:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO club_members (first_name, last_name) VALUES ('Tom', 'Thompson');\r\n<\/code><\/pre>\n<\/div>\n<p>MySQL responder\u00e1 con un mensaje de \u00e9xito:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 1 row affected (0.009 sec)\r\n<\/code><\/pre>\n<\/div>\n<p>Para comprobar qu\u00e9 ID num\u00e9rico ha asignado la base de datos a la nueva entrada, ejecute la consulta SELECT nuevamente:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT * FROM club_members;\r\n<\/code><\/pre>\n<\/div>\n<p>Hay una fila m\u00e1s en la salida:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+-----------+------------+-----------+\r\n| member_id | first_name | last_name |\r\n+-----------+------------+-----------+\r\n| 1 | John | Doe |\r\n| 2 | Jane | Smith |\r\n| 3 | Bob | Johnson |\r\n| 4 | Samantha | Davis |\r\n| 5 | Michael | Rodriguez |\r\n| 6 | Tom | Thompson |\r\n| 7 | Sara | Johnson |\r\n| 8 | David | Jones |\r\n| 9 | Jane | Smith |\r\n| 10 | Bob | Johnson |\r\n| 11 | Tom | Thompson |\r\n+-----------+------------+-----------+\r\n11 rows in set (0.000 sec)<\/code><\/pre>\n<\/div>\n<p>A una nueva fila se le asign\u00f3 autom\u00e1ticamente el n\u00famero 11 en la columna Member_id a trav\u00e9s del atributo AUTO_INCREMENT de la base de datos.<\/p>\n<p>Si los datos con los que est\u00e1 trabajando no tienen candidatos naturales para claves primarias y no desea crear identificadores inventados cada vez que agrega datos nuevos a la base de datos, puede confiar de manera segura en identificadores generados secuencialmente como claves primarias.<\/p>\n<h2 id=\"%d9%86%d8%aa%db%8c%d8%ac%d9%87\">Resultado<\/h2>\n<p>Siguiendo esta gu\u00eda, aprendi\u00f3 qu\u00e9 son las claves primarias y c\u00f3mo crear tipos comunes en MySQL para identificar filas \u00fanicas en las tablas de la base de datos. Cre\u00f3 claves primarias naturales, claves primarias que abarcaban varias columnas y utiliz\u00f3 claves secuenciales autoincrementales donde no existen claves naturales.<\/p>","protected":false},"excerpt":{"rendered":"Introducci\u00f3n. Una de las caracter\u00edsticas valiosas de las bases de datos relacionales es el formato de los datos en una estructura bien definida. Esto\u2026","protected":false},"author":1,"featured_media":15985,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_yoast_wpseo_focuskeywords":"","_yoast_wpseo_primary_category":"193","footnotes":""},"categories":[193,349],"tags":[403,391],"class_list":{"0":"post-15984","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tutorials","8":"category-database","9":"tag-data-base","10":"tag-mysql"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-primary-keys-in-sql\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"og:description\" content=\"\u0645\u0642\u062f\u0645\u0647 \u06cc\u06a9\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u067e\u0627\u06cc\u06af\u0627\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0631\u0627\u0628\u0637\u0647\u200c\u0627\u06cc\u060c \u0642\u0627\u0644\u0628\u200c\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0631 \u06cc\u06a9 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u0627\u0645\u0644\u0627\u064b \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-primary-keys-in-sql\/\" \/>\n<meta property=\"og:site_name\" content=\"\u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-29T10:57:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.itpiran.net\/2024\/07\/29135935\/sql-key.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1793\" \/>\n\t<meta property=\"og:image:height\" content=\"1110\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\"},\"headline\":\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL\",\"datePublished\":\"2024-07-29T10:57:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/\"},\"wordCount\":140,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/29135935\\\/sql-key.jpg\",\"keywords\":[\"data base\",\"MySQL\"],\"articleSection\":[\"\u0622\u0645\u0648\u0632\u0634\u06cc\",\"\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/\",\"name\":\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/29135935\\\/sql-key.jpg\",\"datePublished\":\"2024-07-29T10:57:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/29135935\\\/sql-key.jpg\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/29135935\\\/sql-key.jpg\",\"width\":1793,\"height\":1110},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-primary-keys-in-sql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0622\u0645\u0648\u0632\u0634\u06cc\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/category\\\/tutorials\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"name\":\"\u0628\u0644\u0627\u06af ITPiran\",\"description\":\"\u0627\u062e\u0628\u0627\u0631 \u0648 \u0645\u0642\u0627\u0644\u0627\u062a \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\",\"name\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"alternateName\":\"ITPIran Blog\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"width\":512,\"height\":512,\"caption\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\",\"name\":\"admin\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/es\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo usar claves primarias en SQL - Blog de ITPiran","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-primary-keys-in-sql\/","og_locale":"es_ES","og_type":"article","og_title":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran","og_description":"\u0645\u0642\u062f\u0645\u0647 \u06cc\u06a9\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u067e\u0627\u06cc\u06af\u0627\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0631\u0627\u0628\u0637\u0647\u200c\u0627\u06cc\u060c \u0642\u0627\u0644\u0628\u200c\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u062f\u0631 \u06cc\u06a9 \u0633\u0627\u062e\u062a\u0627\u0631 \u06a9\u0627\u0645\u0644\u0627\u064b \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06cc\u0646&hellip;","og_url":"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-primary-keys-in-sql\/","og_site_name":"\u0628\u0644\u0627\u06af ITPiran","article_published_time":"2024-07-29T10:57:12+00:00","og_image":[{"width":1793,"height":1110,"url":"https:\/\/cdn.itpiran.net\/2024\/07\/29135935\/sql-key.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#article","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/"},"author":{"name":"admin","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81"},"headline":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL","datePublished":"2024-07-29T10:57:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/"},"wordCount":140,"commentCount":0,"publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2024\/07\/29135935\/sql-key.jpg","keywords":["data base","MySQL"],"articleSection":["\u0622\u0645\u0648\u0632\u0634\u06cc","\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/","url":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/","name":"C\u00f3mo usar claves primarias en SQL - Blog de ITPiran","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#primaryimage"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2024\/07\/29135935\/sql-key.jpg","datePublished":"2024-07-29T10:57:12+00:00","breadcrumb":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#primaryimage","url":"https:\/\/cdn.itpiran.net\/2024\/07\/29135935\/sql-key.jpg","contentUrl":"https:\/\/cdn.itpiran.net\/2024\/07\/29135935\/sql-key.jpg","width":1793,"height":1110},{"@type":"BreadcrumbList","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-primary-keys-in-sql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.itpiran.net\/blog\/"},{"@type":"ListItem","position":2,"name":"\u0622\u0645\u0648\u0632\u0634\u06cc","item":"https:\/\/www.itpiran.net\/blog\/category\/tutorials\/"},{"@type":"ListItem","position":3,"name":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u062f\u0631 SQL"}]},{"@type":"WebSite","@id":"https:\/\/www.itpiran.net\/blog\/#website","url":"https:\/\/www.itpiran.net\/blog\/","name":"Blog de ITPiran","description":"Noticias y art\u00edculos sobre comercio sostenible en Ir\u00e1n","publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.itpiran.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.itpiran.net\/blog\/#organization","name":"Blog sobre negocios iran\u00edes sostenibles","alternateName":"ITPIran Blog","url":"https:\/\/www.itpiran.net\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","contentUrl":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","width":512,"height":512,"caption":"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81","name":"administraci\u00f3n","url":"https:\/\/www.itpiran.net\/blog\/es\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/comments?post=15984"}],"version-history":[{"count":2,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15984\/revisions"}],"predecessor-version":[{"id":15987,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15984\/revisions\/15987"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/media\/15985"}],"wp:attachment":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/media?parent=15984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/categories?post=15984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/tags?post=15984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}