Curso de MySQL
Consultas, lista de correo 'C++ Con Clase' 'MySQL Con Clase' página de entrada Tabla de contenido Contactar con Webmaster
Curso Sentencias Funciones API C

SQL

Sentencias

ALTER TABLE ANALYZE TABLE BACKUP TABLE BEGIN BEGIN WORK CHECK TABLE CHECKSUM TABLE COMMIT CREATE DATABASE CREATE TABLE CREATE USER DELETE DESCRIBE DO DROP DATABASE DROP INDEX DROP TABLE DROP USER FLUSH GRANT HANDLER INSERT INSERT ... SELECT INSERT DELAYED JOIN KILL LOAD DATA LOCK TABLES OPTIMIZE TABLE RENAME TABLE REPAIR TABLE REPLACE RESET REVOKE ROLLBACK SELECT SET SET TRANSACTION SHOW SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW CREATE DATABASE SHOW CREATE TABLE SHOW CREATE VIEW SHOW DATABASES SHOW ENGINES SHOW ERRORS SHOW GRANTS SHOW INDEX SHOW INNODB STATUS SHOW KEYS SHOW LOGS SHOW PRIVILEGES SHOW PROCESSLIST SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES START TRANSACTION TRUNCATE UNION UNLOCK TABLES UPDATE USE

SHOW WARNINGS

SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW COUNT(*) WARNINGS

SHOW WARNINGS muestra los mensajes de error, aviso y notas que resulten de la última sentencia que haya generado mensajes, o nada si la última sentencia que ha usado la tabla no ha generado mensajes. Esta sentencia se implementa a partir de MySQL 4.1.0. Una sentencia relacionada, SHOW ERRORS, muestra sólo los errores.

La lista de mensajes se elimina para cada nueva sentencia que use una tabla.

La sentencia SHOW COUNT(*) WARNINGS muestra el número total de errores, avisos y notas. También se puede recuperar este número a partir de la variable warning_count:

SHOW COUNT(*) WARNINGS;
SELECT @@warning_count;

El valor de warning_count puede ser mayor que el número de mensajes mostrados por SHOW WARNINGS si la variable de sistema max_error_count está asignada a un valor menor que hace que no todos los mensajes sean almancenados. Un ejemplo mostrado más abajo demuestra como puede ocurrir esto.

La cláusula LIMIT tiene la misma sintaxis que para la sentencia SELECT.

El servidor MySQL devuelve el número total de errores, avisos y notas que resulten de la última sentencia. Si se usa el API C, este valor se puede obtener mediante una llamada a la función mysql_warning_count().

Hay que tener en cuenta que el marco de trabajo para avisos se añadió en MySQL 4.1.0, en ese punto muchas sentencias no generan avisos. En 4.1.1, la situación es mucho mejor, con generación de avisos para sentencias como para LOAD DATA INFILE y sentencias DML como INSERT, UPDATE, CREATE TABLE y ALTER TABLE.

La siguiente sentecia DROP TABLE generará una nota:

mysql> DROP TABLE IF EXISTS no_such_table;
mysql> SHOW WARNINGS;
+-------+------+-------------------------------+
| Level | Code | Message                       |
+-------+------+-------------------------------+
| Note  | 1051 | Unknown table 'no_such_table' |
+-------+------+-------------------------------+

Sigue un ejemplo sencillo que miestra un aviso de sintaxis para CREATE TABLE y avisos de conversión para INSERT:

mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4)) TYPE=MyISAM;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1287
Message: 'TYPE=storage_engine' is deprecated, use
         'ENGINE=storage_engine' instead
1 row in set (0.00 sec)

mysql> INSERT INTO t1 VALUES(10,'mysql'),(NULL,'test'),
    -> (300,'Open Source');
Query OK, 3 rows affected, 4 warnings (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 4

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 1
*************************** 2. row ***************************
  Level: Warning
   Code: 1263
Message: Data truncated, NULL supplied to NOT NULL column 'a' at row 2
*************************** 3. row ***************************
  Level: Warning
   Code: 1264
Message: Data truncated, out of range for column 'a' at row 3
*************************** 4. row ***************************
  Level: Warning
   Code: 1265
Message: Data truncated for column 'b' at row 3
4 rows in set (0.00 sec)

El número máximo de mensajes de error, aviso y notas a almacenar se controlan mediante la variable de sistema max_error_count. Por defecto, su valor es 64. Para cambiar el número de mensajes que se quieren almacenar, modificar el valor de max_error_count. En el siguiente ejemplo, la sentencia ALTER TABLE produce tres avisos, pero sólo uno se almacena porque el valor de max_error_count se ha puesto a 1:

mysql> SHOW VARIABLES LIKE 'max_error_count';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_error_count | 64    |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET max_error_count=1;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER TABLE t1 MODIFY b CHAR;
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 3

mysql> SELECT @@warning_count;
+-----------------+
| @@warning_count |
+-----------------+
|               3 |
+-----------------+
1 row in set (0.01 sec)

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1263 | Data truncated for column 'b' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

Para desactivar los avisos, asignar 0 a max_error_count. En ese caso, warning_count sigue indicando cuantos avisos se han producido, pero no se almacena ningún mensaje.

(4.1.1)