Curso de MariaDB Desde la Consola/Insert

De WikiCabal
Ir a la navegación Ir a la búsqueda


Insert

Sintaxis

  1 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
  2  [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
  3  {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
  4  [ ON DUPLICATE KEY UPDATE
  5    col=expr
  6      [, col=expr] ... ]
  7 
  8 O:
  9 
 10 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 11     [INTO] tbl_name [PARTITION (partition_list)]
 12     SET col={expr | DEFAULT}, ...
 13     [ ON DUPLICATE KEY UPDATE
 14       col=expr
 15         [, col=expr] ... ]
 16 
 17 O:
 18 
 19 INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
 20     [INTO] tbl_name [PARTITION (partition_list)] [(col,...)]
 21     SELECT ...
 22     [ ON DUPLICATE KEY UPDATE
 23       col=expr
 24         [, col=expr] ... ]
 25 
 26 INSERT inserta nuevas filas en una tabla existente. 
 27 Los INSERT ... VALUES y INSERT ... SET formas de las filas de 
 28 inserción declaración en base a los valores especificados 
 29 explícitamente. El INSERT ... SELECT forma inserta filas 
 30 seleccionados de otra tabla o tablas.
 31 
 32 El nombre de la tabla se puede especificar en forma 
 33 db_name . tbl_name o, si se selecciona una base de datos por 
 34 defecto, en la forma tbl_name. Esto permite utilizar 
 35 INSERT ... SELECT para copiar filas entre las diferentes 
 36 bases de datos.
 37 
 38 MariaDB comenzando con 10,0
 39 
 40 La cláusula PARTITION se introdujo en MariaDB 10.0. Se puede 
 41 utilizar tanto en el insert y la parte SELECT.
 42 
 43 La lista de columnas es opcional. Especifica que se insertan 
 44 de forma explícita los valores, y en qué orden. Si no se 
 45 especifica esta cláusula, todos los valores se deben 
 46 especificar de forma explícita, en el mismo orden en que se 
 47 enumeran en la definición de la tabla.
 48 
 49 La lista de valor siga las VALUES o VALUE palabra clave 
 50 (que son intercambiables, sin importar la cantidad de valores 
 51 que desea insertar), y está envuelto por paréntesis. Los 
 52 valores deben estar inscritos en el mismo orden que la lista 
 53 de columnas. Es posible especificar más de una lista para 
 54 insertar más de un filas con una sola sentencia. Si se insertan 
 55 muchas filas, esta es una optimización de la velocidad.
 56 
 57 Para las declaraciones de una sola fila, el SET cláusula puede 
 58 ser más sencillo, ya que no es necesario recordar el orden 
 59 columnas. Todos los valores se especifican en forma col = expr
 60 
 61 Los valores también pueden especificarse en forma de una 
 62 expresión SQL o subconsulta. Sin embargo, la subconsulta no 
 63 puede acceder a la misma tabla que se denomina en el INTO cláusula.
 64 
 65 Si utiliza el LOW_PRIORITY palabra clave, la ejecución del 
 66 INSERT se retrasa hasta que no haya otros clientes leyendo de 
 67 la table. Si utiliza el HIGH_PRIORITY palabra clave, la declaración 
 68 tiene la misma prioridad que SELECTs. Esto afecta a los motores de 
 69 almacenamiento únicas que sólo utilizan bloqueo a nivel de table 
 70 (MyISAM, MEMORIA, MERGE). Sin embargo, si se especifica una de 
 71 estas palabras clave, inserciones concurrentes no se pueden utilizar.
 72 
 73 Si el SQL_MODE contiene STRICT_TRANS_TABLES y usted está insertando 
 74 en una tabla transaccional (como InnoDB), o si el sql_mode contiene 
 75 STRICT_ALL_TABLES todos NOT NULL columnas que no tienen un DEFAULT 
 76 valor (y no es AUTO_INCREMENT) debe hacer referencia explícita en 
 77 INSERT declaraciones. En caso contrario, se produce un error como este:
 78 
 79     ERROR 1364 (HY000): Field 'col' doesn"'"t have a default value
 80 
 81 En todos los demás casos, si un NOT NULL columna sin DEFAULT valor 
 82 no se hace referencia, se insertará un valor vacío (por ejemplo, 
 83 0 para INTEGER columnas y '' para CHAR columnas).
 84 
 85 Si un NOT NULL columna que tiene un DEFAULT valor no se hace referencia, 
 86 NULL se inserta.
 87 
 88 Si un NULL columna que tiene un DEFAULT valor no se hace referencia, 
 89 se insertará su valor predeterminado. También es posible asignar 
 90 explícitamente el valor por defecto utilizando el DEFAULT palabra clave 
 91 o la DEFAULT() función.
 92 
 93 Si el DEFAULT palabra clave se utiliza pero la columna no tiene 
 94 un DEFAULT valor, se produce un error como este:
 95 
 96   ERROR 1364 (HY000): Field 'col' doesn"'"t have a default value
 97 
 98 Los valores duplicados
 99 
100 Por defecto, si se intenta insertar una fila duplicada y hay una 
101 UNIQUE índice, INSERT se detiene y se produce un error como este:
102 
103   ERROR 1062 (23000): Duplicate entry 'dup_value' for key 'col'
104 
105 Para manejar los duplicados puede utilizar el IGNORE cláusula 
106 INSERT ON DUPLICATE KEY UPDATE o REPLACE declaración.
107 
108 Haciendo caso omiso de los errores
109 
110 Normalmente INSERT paradas y deshace cuando se encuentra un error.
111 
112 Al utilizar el IGNORE palabra clave todos los errores se convierten 
113 en advertencias, que no paran de inserciones de filas adicionales.

Ejemplo

 1 [rrc@Pridd ~]$ mysql -u rrc -p
 2 Enter password: 
 3 Welcome to the MariaDB monitor.  Commands end with ; or \g.
 4 Your MariaDB connection id is 5
 5 Server version: 10.0.21-MariaDB Mageia MariaDB Server
 6 
 7 Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
 8 
 9 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
10 
11 MariaDB [(none)]> use Prueba1;
12 Database changed
13 MariaDB [Prueba1]> CREATE TABLE personas (
14     ->   Nombre varchar(15) NOT NULL,
15     ->   ApellidoPaterno varchar(15) NOT NULL,
16     ->   ApellidoMaterno varchar(15) DEFAULT NULL );
17 Query OK, 0 rows affected (0.26 sec)
18 
19 MariaDB [Prueba1]> INSERT INTO personas ( Nombre, ApellidoPaterno ) 
20         VALUES ( 'Marco', 'Gómez' );
21 Query OK, 1 row affected (0.32 sec)
22 
23 MariaDB [Prueba1]> INSERT INTO personas 
24         VALUES ( 'Raul', 'Montenegro', 'Hernandez' );
25 Query OK, 1 row affected (0.31 sec)
26 
27 MariaDB [Prueba1]> INSERT INTO personas SET 
28     .> Nombre = 'Raul',
29     -> ApellidoPaterno = 'Montoya';
30 Query OK, 1 row affected (0.32 sec)
31 
32 
33 MariaDB [Prueba1]> create table Log ( id int not null primary key auto_increment,
34     ->                      Fecha datetime not null,
35     ->                      nombre varchar (15) not null );
36 Query OK, 0 rows affected (0.29 sec)
37 
38 MariaDB [Prueba1]> insert into Log values ( NULL, NOW(), 'jruiz' );
39 Query OK, 1 row affected (0.05 sec)
40 
41 MariaDB [Prueba1]> select * from Log;
42 +----+---------------------+--------+
43 | id | Fecha               | nombre |
44 +----+---------------------+--------+
45 |  1 | 2015-10-23 12:20:21 | jruiz  |
46 +----+---------------------+--------+
47 1 row in set (0.00 sec)