Curso de MariaDB Desde la Consola/Insert
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)