Sunteți pe pagina 1din 24

Captulo 19.

Extensiones espaciales de MySQL


Tabla de contenidos
[+/-]

19.1. Definicin de programas almacenados 19.2. Uso de procedimientos almacenados (procedimientos y funciones) 19.3. Utilizacin de disparadores
[+/-] [+/-] [+/-]

19,4. Usando el Programador de eventos 19,5. Uso de las vistas


[+/-]

19.6. Control de acceso para los programas almacenados y vistas 19.7. Registro binario de programas almacenados Este captulo trata de los programas almacenados y vistas, que son objetos de bases de datos definidas en trminos de cdigo SQL que se almacenan en el servidor para su posterior ejecucin. Los programas almacenados incluyen estos objetos:

Los procedimientos almacenados, es decir, procedimientos almacenados y funciones. Un procedimiento almacenado se invoca utilizando el LLAMADA comunicado. Un procedimiento no tiene un valor de retorno, pero puede modificar sus parmetros para una inspeccin posterior por la persona que llama. Tambin puede generar conjuntos de resultados que se devuelve al programa cliente. Una funcin almacenada se utiliza mucho como una funcin integrada. lo invoque en una expresin y devuelve un valor al evaluar una expresin.

Triggers. Un disparador es un objeto de base de datos con nombre que se asocia con una mesa y que se activa cuando ocurre un evento particular para la mesa, como una insercin o actualizacin.

Eventos. Un evento es una tarea que el servidor se ejecuta de acuerdo a lo programado. Las vistas se almacenan las consultas que se hace referencia cuando se producen un conjunto de resultados.Una vista acta como una tabla virtual. En este captulo se describe cmo utilizar los programas almacenados y vistas. Las siguientes secciones proporcionan informacin adicional acerca de la sintaxis SQL para comandos relacionados con estos objetos:

Para cada tipo de objeto, hay CREATE , ALTER y DROP estados que controlan los objetos que existen y cmo se definen. Vea la Seccin 13.1, "Instrucciones de definicin de datos" .

La LLAMADA declaracin se utiliza para llamar a procedimientos almacenados. Vea la seccin 13.2.1, " LLAMEsintaxis " .

Almacenados definiciones del programa incluyen un cuerpo que se pueden utilizar sentencias compuestas, bucles, condicionales, y las variables declaradas. Consulte Seccin 13.6, "MySQL compuesto-Declaracin de sintaxis" .

19.1. Definicin de programas almacenados


Cada programa almacenado contiene un cuerpo que consiste en una sentencia SQL. Esta afirmacin puede ser una instruccin compuesta formada por varias declaraciones separadas por punto y coma ( ; ) caracteres. Por ejemplo, el siguiente procedimiento almacenado tiene un cuerpo formado por un BEGIN ... FIN bloque que contiene un SET declaracin y un REPEAT bucle que s contiene otro SET declaracin:
CREATE PROCEDURE dorepeat (p1 INT) COMENZAR SET @ x = 0; REPEAT SET @ x = @ x + 1, hasta que @ x> REPEAT END P1; END;

Si utiliza el mysql programa cliente para definir un programa almacenado que contiene los caracteres punto y coma dentro de su definicin, surge un problema. Por defecto, MySQL se reconoce punto y coma como delimitador de una declaracin, por lo que debe redefinir el delimitador de forma temporal para causar mysql para pasar toda la definicin de programa almacenado en el servidor. Para redefinir el mysql delimitador, utilice el delimitador de comando. El siguiente ejemplo muestra cmo hacer esto para el dorepeat () el procedimiento se acaba de mostrar. El delimitador se cambia a / / para permitir que toda la definicin que se pasa al servidor como una sola instruccin, y luego restaurada , antes de invocar el procedimiento. Esto permite que el ; delimitador utilizado en el cuerpo del procedimiento a travs del servidor en lugar de ser interpretado por MySQL s mismo.
mysql> delimitador / / mysql> CREATE PROCEDURE dorepeat (p1 INT) -> INICIO -> -> -> END -> / / Query OK, 0 rows affected (0.00 sec) mysql> delimitador;
SET @ x = 0; REPEAT SET @ x = @ x + 1, hasta que @ x> p1 final de la repeticin;

mysql> LLAMADA dorepeat (1000); Query OK, 0 rows affected (0.00 sec) mysql> SELECT @ x; + ------ + | @ X | + ------ + | 1001 | + ------ + 1 row in set (0.00 sec)

Puede redefinir el delimitador de una cadena que no sea / / , y el delimitador puede consistir en un solo carcter o varios caracteres. Usted debe evitar el uso de la barra invertida (" \ ") ya que es el carcter de escape para MySQL. El siguiente es un ejemplo de una funcin que toma un parmetro, realiza una operacin con una funcin de SQL, y devuelve el resultado. En este caso, es innecesario utilizar delimitador porque la definicin de funcin no contiene interna ; delimitadores declaracin:
mysql> CREATE FUNCTION hola (s CHAR (20)) mysql> RETURNS CHAR (50) determinista TIC -> CONCAT RETURN ('Hola', s, '!'); Query OK, 0 rows affected (0.00 sec) mysql> SELECT hello ("mundo"); + ---------------- + | Hola ("mundo") | + ---------------- + | Hola, mundo! | + ---------------- + 1 row in set (0.00 sec)

19.2. Uso de procedimientos almacenados (procedimientos y funciones)


[+/-]

19.2.1. Sintaxis de procedimientos almacenados 19.2.2. Procedimientos almacenados y privilegios de MySQL 19.2.3. Los metadatos de procedimientos almacenados

19.2.4. Procedimientos almacenados, funciones, disparadores, y LAST_INSERT_ID () Las rutinas almacenadas (procedimientos y funciones) se soportan en MySQL 5.5. Una rutina de almacenamiento es un conjunto de sentencias SQL que se pueden almacenar en el servidor. Una vez hecho esto, los clientes no es necesario para mantener la reemisin de los estados individuales, sino que puede referirse a la rutina de almacenamiento en su lugar. Los procedimientos almacenados requieren el proc tabla en el mysql base de datos. Esta tabla se crea durante el procedimiento de instalacin de MySQL 5.5. Si est actualizando a MySQL 5.5 desde una versin anterior, asegrese de actualizar sus tablas de permisos para asegurarse de que el proc tabla existe. Vea la Seccin 4.4.7, " mysql_fix_privilege_tables Comprobar las tablas de actualizacin de MySQL " . Los procedimientos almacenados pueden ser particularmente tiles en ciertas situaciones:

Cuando mltiples aplicaciones cliente se escriben en diferentes idiomas o trabajar en diferentes plataformas, pero es necesario para realizar las operaciones de base de datos misma.

Cuando la seguridad es primordial. Los bancos, por ejemplo, utilizar procedimientos almacenados y funciones para todas las operaciones comunes. Esto proporciona un ambiente seguro y consistente, y las rutinas se puede asegurar que cada operacin est correctamente conectado. En tal configuracin, las aplicaciones y los usuarios no tendran acceso a las tablas de base de datos directamente, sino que slo pueden ejecutar determinados procedimientos almacenados. Los procedimientos almacenados pueden proporcionar un mejor rendimiento ya que menos informacin tiene que ser enviado entre el servidor y el cliente. La desventaja es que esto no aumenta la carga en el servidor de base de datos porque la mayora del trabajo se lleva a cabo en el servidor y se hace menos en el cliente (aplicacin) lado. Considere esto si muchas mquinas cliente (por ejemplo, servidores web) son atendidos por slo uno o unos pocos servidores de bases de datos. Los procedimientos almacenados tambin le permiten tener bibliotecas de funciones en el servidor de base de datos. Esta es una caracterstica compartida por las lenguas modernas que permitan la aplicacin de diseo como a nivel interno (por ejemplo, mediante el uso de las clases). El uso de estas caractersticas de la aplicacin cliente del idioma es beneficioso para el programador, incluso fuera del mbito de uso de base de datos. MySQL sigue el SQL: 2003 sintaxis para procedimientos almacenados, que tambin es utilizado por DB2 de IBM.Toda la sintaxis descrita aqu con el apoyo y las limitaciones y las extensiones estn documentadas en su caso.

Recursos adicionales

Usted puede encontrar el Foro de procedimientos almacenados de usuario de uso cuando se trabaja con procedimientos almacenados y funciones.

Para obtener respuestas a algunas preguntas frecuentes con respecto a los procedimientos almacenados en MySQL, consulte Seccin B.4, "MySQL 5.5 FAQ: Procedimientos almacenados y funciones" .

Hay algunas restricciones en el uso de procedimientos almacenados. Consulte Seccin D.1, "Restricciones a programas almacenados" .

Registro binario de procedimientos almacenados se lleva a cabo como se describe en la Seccin 19.7, "Registro binario de programas almacenados" .

19.2.1. Sintaxis de procedimientos almacenados


Una rutina de almacenado es un procedimiento o una funcin. Los procedimientos almacenados se crean con losCREATE PROCEDURE y CREATE FUNCTION declaraciones (vase la Seccin 13.1.15, " CREATE PROCEDURE yCREATE FUNCTION sintaxis " ). Un procedimiento se invoca usando un CONVOCATORIA declaracin (vase la Seccin 13.2.1, " CONVOCATORIA sintaxis " ), y slo puede pasar valores usando variables de salida. Una funcin puede ser llamada desde el interior de una declaracin como cualquier otra funcin (es decir, invocando el nombre de la funcin), y puede devolver un valor escalar. El cuerpo de una rutina almacenada puede utilizar sentencias compuestas (vase la Seccin 13.6, "MySQL compuesto-Declaracin de la sintaxis" ). Los procedimientos almacenados se puede quitar con la DROP PROCEDURE y DROP
FUNCTION declaraciones (vase la Seccin 13.1.26, " DROP PROCEDURE y DROP FUNCTION sintaxis " ), y modificado con la sentencia ALTER PROCEDURE y ALTER FUNCTION declaraciones (vase la Seccin 13.1.5, " ALTER PROCEDURE Sintaxis " ).

Un procedimiento almacenado o funcin est asociada con una base de datos en particular. Esto tiene varias implicaciones:

Cuando se invoca la rutina, una implcita USO db_name se lleva a cabo (y se deshace cuando la rutina). USEdentro de procedimientos almacenados no se permiten.

Puede calificar los nombres de rutina con el nombre de base de datos. Esto puede ser utilizado para hacer referencia a una rutina que no est en la base de datos actual. Por ejemplo, para invocar un procedimiento almacenado p o de la funcin f que se asocia con la prueba de base de datos, se puede decir test.p LLAMADA () o test.f () .

Cuando se quita una base, todas las rutinas almacenados asociados con ella se eliminan tambin.

Funciones almacenados no pueden ser recursivos. La recursividad en los procedimientos almacenados se permite, pero deshabilitado por defecto. Para habilitar la recursin, establezca la max_sp_recursion_depth variable de servidor del sistema a un valor mayor que cero.Repeticin del procedimiento almacenado aumenta la demanda de espacio de hilo de pila. Si aumenta el valor demax_sp_recursion_depth , puede ser necesario aumentar el tamao del hilo de la pila mediante el aumento del valor de thread_stack al iniciar el servidor. Consulte Seccin 5.1.3, "Variables de sistema del servidor" , para ms informacin. MySQL soporta una extensin muy til que permite el uso de regulares SELECT declaraciones (es decir, sin necesidad de utilizar los cursores o variables locales) dentro de un procedimiento almacenado. El conjunto de resultados de este tipo de consultas se enva directamente al cliente. Mltiples SELECT declaraciones generan varios conjuntos de resultados, por lo que el cliente debe usar una biblioteca cliente de MySQL que soporta varios conjuntos de resultados. Esto significa que el cliente debe usar una biblioteca cliente de una versin de MySQL por lo menos tan reciente como 4.1. El cliente tambin debe especificar el CLIENT_MULTI_RESULTSopcin cuando se conecta. Para programas de C, esto puede hacerse con la mysql_real_connect () funcin C API. Vea la Seccin 22.8.3.52, " mysql_real_connect () " , y la Seccin 22.8.13, "la API C para la ejecucin de mltiples" .

19.2.2. Procedimientos almacenados y privilegios de MySQL


El sistema de permisos de MySQL tiene las rutinas almacenadas en cuenta lo siguiente:

La RUTINA CREATE privilegio es necesario para crear rutinas almacenadas. El ALTER ROUTINE privilegio que se necesita para alterar o borrar procedimientos almacenados. Este permiso se otorga automticamente al creador de la rutina si es necesario, y se dej caer desde el creador cuando la rutina se ha cado.

El EXECUTE privilegio se requiere para ejecutar las rutinas almacenadas. Sin embargo, este permiso se otorga automticamente al creador de la rutina si es necesario (y se dej caer desde el creador cuando la rutina se ha cado). Adems, el valor por defecto de
seguridad de SQL caracterstico de una rutina es DEFINER , que permite a los usuarios

que tienen acceso a la base de datos con la que la rutina est asociada para ejecutar la rutina.

Si el automatic_sp_privileges variable del sistema es 0, el EXECUTE y ALTER DE


RUTINA privilegios que no se conceden automticamente a y se dej caer desde el creador

de la rutina.

El creador de la rutina es la cuenta utilizada para ejecutar la sentencia


CREATE declaracin por ello. Esto podra no ser la misma que la cuenta denominada como

la DEFINER en la definicin de la rutina. El servidor manipula la mysql.proc mesa en respuesta a las declaraciones que crean, modificar o quitar las rutinas almacenadas. No se admite que el servidor se dar cuenta de la manipulacin manual de esta tabla.

19.2.3. Los metadatos de procedimientos almacenados


Metadatos sobre las rutinas almacenadas se puede obtener como sigue:

Consultar el RUTINAS mesa del INFORMATION_SCHEMA base de datos. Vea la Seccin 20.17, "LaINFORMATION_SCHEMA RUTINAS tabla " .

Utilice el SHOW CREATE PROCEDIMIENTO y SHOW CREATE FUNCTION declaraciones para ver definiciones de rutina. Vea la Seccin 13.7.5.11, " SHOW CREATE
PROCEDIMIENTO sintaxis " .

Utilice el Estado PROCEDIMIENTO ESPECTACULO y muestran una funcin


ESTADO declaraciones para ver las caractersticas de rutina. Vea la Seccin 13.7.5.29,

" PROCEDIMIENTO DE SHOW STATUS Sintaxis "

19.2.4. Procedimientos almacenados, funciones, disparadores, yLAST_INSERT_ID ()


Dentro del cuerpo de una rutina almacenada (procedimiento o funcin) o un gatillo, el valor de LAST_INSERT_ID () cambia la misma manera que para instrucciones ejecutadas fuera del cuerpo de estos tipos de objetos (vasela Seccin 12.14, "Funciones de informacin" ). El efecto de una rutina almacenada o gatillo en el valor deLAST_INSERT_ID () que se ve siguiendo estados depende del tipo de rutina:

Si un procedimiento almacenado ejecuta sentencias que cambian el valor de LAST_INSERT_ID () , el valor de cambio es visto por las declaraciones que siguen la llamada de procedimiento.

Para las funciones almacenados y disparadores que cambian el valor, el valor se restaura cuando los extremos de la funcin o el gatillo, por lo que tras las declaraciones no veo un valor cambiado.

19.3. Utilizacin de disparadores


[+/-]

19.3.1. Sintaxis de disparo

19.3.2. Disparo de metadatos Un disparador es un objeto de base de datos con nombre que se asocia con una tabla, y que se activa cuando ocurre un evento particular de la tabla. Algunos de los usos para los disparadores es verificar valores que se inserta en una tabla o para realizar clculos sobre los valores involucrados en una actualizacin. Un disparador se define para activarse cuando un INSERT , DELETE , o ACTUALIZACIN sentencia se ejecuta de la tabla asociada. Un disparador se puede configurar para activar ya sea antes o despus de la instruccin de disparo. Por ejemplo, usted puede tener un gatillo antes de activar cada fila que se inserta en una tabla o despus de cada fila que se actualiza.
Importante

Factores desencadenantes de MySQL son activados por las sentencias de SQL slo . Ellos no son activados por cambios en la vista, ni por cambios en las tablas hechas por API que no transmiten las sentencias SQL al servidor MySQL. Esto significa que:

Los desencadenadores no se activan por cambios en INFORMATION_SCHEMA tablas, ya que estas tablas son en realidad puntos de vista.

Los desencadenadores no se activan las actualizaciones realizadas mediante el NDB de la API. Para utilizar dispara si se ha actualizado a MySQL 5.5 desde una versin anterior que no apoy activa, debe actualizar las tablas de permisos para que contengan los privilegios relacionados con el gatillo. Vea la Seccin 4.4.7, " mysql_fix_privilege_tables Comprobar las tablas de actualizacin de MySQL " . La discusin siguiente describe la sintaxis para crear y eliminar disparadores, y muestra algunos ejemplos de cmo usarlos.

Recursos adicionales

Usted puede encontrar el foro de usuarios desencadenantes de uso cuando se trabaja con puntos de vista.

Para obtener respuestas a algunas preguntas frecuentes con respecto a disparadores en MySQL, consulte la seccin B.5, "MySQL 5.5: Preguntas Frecuentes: disparadores" .

Hay algunas restricciones en el uso de disparadores, vase la Seccin D.1, "Restricciones a programas almacenados" .

El registro binario para disparadores se lleva a cabo como se describe en la Seccin 19.7, "Registro binario de programas almacenados" .

Para crear un disparador o quitar un desencadenador, utilice el CREATE TRIGGER o DROP


TRIGGER comunicado.La sintaxis de las mismas se describe en la Seccin 13.1.19, " CREATE TRIGGER Sintaxis " , y la Seccin 13.1.30, "DROP TRIGGER Sintaxis " .

Aqu est un ejemplo simple que asocia un disparador con una tabla para INSERT declaraciones. El disparador acta como un acumulador, la suma de los valores insertados en una de las columnas de la tabla.
mysql> CREATE TABLE cuenta (acct_num int, decimal cantidad (10,2)); Query OK, 0 filas afectadas (0,03 segundos) mysql> CREATE TRIGGER ins_sum ANTES DE INSERTAR EN la cuenta -> Para cada conjunto ROW @ @ = suma suma + NEW.amount; Query OK, 0 filas afectadas (0,06 seg)

La CREATE TRIGGER sentencia crea un disparador llamado ins_sum que est asociada con la cuenta de la tabla. Tambin se incluyen clusulas que especifican el momento de activacin, el evento desencadenante, y qu hacer luego de la activacin:

La palabra clave ANTES indica el tiempo de la accin de disparo. En este caso, el gatillo debe activar antes de cada fila se inserta en la tabla. La palabra clave aqu es admisible otra DESPUS .

La palabra clave INSERT indica el evento que activa el disparador. En el ejemplo, INSERT declaraciones causar la activacin. Tambin pueden crearse disparadores para BORRAR y ACTUALIZAR declaraciones.

La instruccin que sigue PARA CADA FILA define lo que se ejecutar cada vez que se activa el disparador, que se produce una vez por cada fila afectada por la sentencia en cuestin. En el ejemplo, la sentencia activada es un sencillo SET que acumula los valores insertados en la cantidad de la columna. La instruccin se refiere a la columna como NEW.amount que significa " el valor de la cantidad de columna para ser insertado en la nuevafila. " Para utilizar el disparador, establezca la variable acumulador a cero, ejecutar un INSERT declaracin, y luego ver qu valor presenta luego la variable:
mysql> SET @ suma = 0; mysql> INSERT INTO valores de las cuentas (137,14.98), (141,1937.50), (97, 100.00);

mysql> SELECT @ suma como importe total inserta '; + ----------------------- + | Importe total insertada | + ----------------------- +

| 1852,48 | + ----------------------- +

En este caso, el valor de @ sum despus de que el INSERT declaracin se ha ejecutado es 14.98 + 1937.50 - 100 , o 1852.48 . Para eliminar el disparador, utilice un DROP TRIGGER comunicado. Debe especificar el nombre del esquema, si el gatillo no est en el esquema predeterminado:
mysql> DROP TRIGGER test.ins_sum;

En una misma tabla tambin se descartan si se le cae de la mesa. Nombres de los desencadenadores existen en el espacio de nombres de esquema, lo que significa que todos los activadores deben tener nombres nicos dentro de un esquema. Los disparadores de los esquemas diferentes pueden tener el mismo nombre. Adems de la exigencia de que los nombres nicos de disparador en un esquema, hay otras limitaciones sobre los tipos de disparadores que pueden crearse. En particular, no se puede tener dos disparadores para una tabla que tienen el mismo tiempo de activacin y el evento de activacin. Por ejemplo, no se pueden definir dos BEFORE INSERT disparadores o dos AFTER
UPDATE en una misma tabla. Es improbable que esta sea una gran limitacin, ya que es

posible definir un disparador que ejecute sentencias mltiples usando la BEGIN


... FIN sentencia compuesta construir despus de FOR EACH ROW . (Un ejemplo aparece

ms adelante en esta seccin.) Los OLD y NEW palabras clave le permiten acceder a las columnas de las filas afectadas por un factor desencadenante. ( OLD y NEW no distinguen entre maysculas y minsculas). En un INSERT gatillo, slo NUEVA.col_name puede ser utilizado, no hay una fila de edad. En un DELETE gatillo, solo . VIEJO col_name puede ser utilizado, no hay nueva fila. En un ACTUALIZACIN gatillo, puede utilizar VIEJO. col_name para referirse a las columnas de una fila antes de que se actualiza y NUEVO. col_name para referirse a las columnas de la fila despus de que se actualice. Una columna precedida por OLD es de slo lectura. Puede referirse a l (si usted tiene la SELECT privilegio), pero no modificarlo. Una columna precedida por NEW puede ser referenciada si usted tiene la SELECT privilegio para ella. En un ANTES gatillo, tambin puede cambiar su valor con SET NEW. col_name = valor si usted tiene laACTUALIZACIN privilegio para ella. Esto significa que usted puede utilizar un disparador para modificar los valores que se inserta en una nueva fila o que se utilizan para actualizar una fila.

En una ANTES de disparo, el NUEVO valor para una columna AUTO_INCREMENT columna es 0, no el nmero de secuencia generado automticamente que se generar cuando el registro sea realmente insertado.
OLD y NEW son extensiones de MySQL para los disparadores.

Al utilizar el BEGIN ... END construir, se puede definir un disparador que ejecute sentencias mltiples. Dentro del BEGIN bloque, tambin puede utilizar la sintaxis de otro tipo que se permite dentro de procedimientos almacenados, tales como condicionales y bucles. Sin embargo, al igual que para procedimientos almacenados, si se utiliza el mysql programa para definir un disparador que ejecuta sentencias mltiples, es necesario redefinir elmysql delimitador de modo que usted puede utilizar el ; delimitador de sentencias dentro de la definicin del disparador. El siguiente ejemplo ilustra estos puntos. Se define un ACTUALIZACIN disparador que comprueba el valor nuevo que se utilizar para actualizar cada columna, y modifica el valor de estar dentro del rango de 0 a 100. Este debe ser un ANTES de disparo, porque el valor tiene que ser revisado antes de que se utiliza para actualizar el registro:
mysql> delimitador / / mysql> CREATE TRIGGER upd_check ANTES DE ACTUALIZACIN SOBRE cuenta -> FOR EACH ROW -> INICIO -> -> -> - > -> -> END ;/ / mysql> delimitador;
SI NEW.amount <0 THEN SET NEW.amount = 0; ELSEIF NEW.amount> 100 THEN SET NEW.amount = 100; END IF;

Puede ser ms fcil de definir una rutina almacenada e invocarla desde el disparador utilizando una simpleLLAMADA comunicado. Esta es tambin una ventaja si se desea invocar la misma rutina desde distintos disparadores. Hay algunas limitaciones en lo que puede aparecer en las declaraciones que un disparador ejecutar al activarse:

El disparador no puede utilizar el LLAMADA declaracin para invocar procedimientos almacenados que devuelven datos al cliente o que el uso de SQL dinmico. (Los procedimientos almacenados se les permite devolver los datos a travs del gatillo OUT o INOUT parmetros.)

El disparador no puede utilizar sentencias que explcita o implcitamente, inicien o finalicen una transaccin, comoSTART TRANSACTION , COMMIT , o ROLLBACK . MySQL gestiona los errores durante la ejecucin del disparador de la siguiente manera:

Si un ANTES gatillo falla, la operacin en la fila correspondiente no se realiza. Un ANTES gatillo es activado por el intento para insertar o modificar la fila, independientemente de si el intento tiene xito posteriormente.

Un DESPUS disparador se ejecuta slo si el ANTES de disparo (si existe) y la operacin de fila tanto ejecutar con xito.

Un error durante un ANTES y DESPUS de los resultados de activacin en el fracaso de toda la declaracin que hizo la invocacin del disparador.

Para las tablas transaccionales, la falla de una declaracin debera provocar el desmantelamiento de todos los cambios realizados por esa sentencia. La falta de un disparo hace que la instruccin a fallar, por lo que desencadenan el fracaso tambin causa de reversin. Para tablas no transaccionales, tales reversin no se puede hacer, as que aunque la declaracin no, todos los cambios realizados antes de que el punto del error permanecer en vigor.

19.3.2. Disparo de metadatos


Metadatos sobre los factores desencadenantes se pueden obtener de la siguiente manera:

Consultar el TRIGGERS mesa del INFORMATION_SCHEMA base de datos. Vea la Seccin 20.25, "LaINFORMATION_SCHEMA TRIGGERS la tabla " .

Utilice el SHOW DE DISPAROS comunicado. Vea la Seccin 13.7.5.39, " SHOW DE DISPARO
DE Sintaxis "

19,4. Cmo usar el Programador de eventos


[+/-]

19.4.1. Programador de eventos Informacin general 19.4.2. Programador de eventos de configuracin 19.4.3. Evento Sintaxis 19.4.4. Evento de metadatos 19.4.5. Programador de eventos de estado 19.4.6. El evento de la agenda y los privilegios de MySQL

El MySQL Programador de eventos administra la planificacin y ejecucin de eventos: Las tareas que se ejecutan de acuerdo a lo programado. La siguiente discusin cubre el Programador de eventos y se divide en las siguientes secciones:

Seccin 19.4.1, "Programador de eventos Informacin general" , ofrece una introduccin y un resumen conceptual de Eventos de MySQL.

Seccin 19.4.3, "Sintaxis de eventos" , analiza las sentencias SQL para crear, alterar y borrar eventos de MySQL.

Seccin 19.4.4, "los metadatos de eventos" , muestra cmo obtener informacin sobre los eventos y cmo esta informacin se almacena en el servidor MySQL.

Seccin 19.4.6, "El Programador de eventos y los privilegios de MySQL" , habla de los privilegios necesarios para trabajar con los eventos y las ramificaciones de los eventos que tienen con respecto a los privilegios cuando se ejecuta. Los procedimientos almacenados requieren el evento de la tabla en el mysql base de datos. Esta tabla se crea durante el procedimiento de instalacin de MySQL 5.5. Si est actualizando a MySQL 5.5 desde una versin anterior, asegrese de actualizar sus tablas de permisos para asegurarse de que el evento de la tabla existe.Vea la Seccin 4.4.7, " mysql_fix_privilege_tables - Comprobar las tablas de actualizacin de MySQL " .

Recursos adicionales

Usted puede encontrar el Evento MySQL Programador Foro de Usuarios de uso cuando se trabaja con los eventos programados.

Hay algunas restricciones en el uso de eventos, ver Seccin D.1, "Restricciones a programas almacenados" .

El registro binario para los eventos se lleva a cabo como se describe en la Seccin 19.7, "Registro binario de programas almacenados" .

19.4.1. Programador de eventos Informacin general


Eventos de MySQL son tareas que se ejecutan de acuerdo a un horario. Por lo tanto, a veces se refieren a ellos como programar eventos. Cuando se crea un evento, que est creando un objeto de base de datos con nombre que contiene una o ms sentencias de SQL que se ejecuta en uno o ms intervalos regulares, comenzando y terminando en una fecha y hora especficas. Conceptualmente, esto es similar a la idea de Unix crontab(tambin conocido como un " cron job ") o el Programador de tareas de Windows. Las tareas programadas de este tipo tambin se conoce a veces como " disparadores temporales ", lo que implica que se trata de objetos que se activan con el paso del tiempo. Si

bien esto es esencialmente correcto, preferimos utilizar el trmino eventos para evitar la confusin con los desencadenantes del tipo descrito en la Seccin 19.3, "Utilizacin de disparadores" . Los eventos no deben ms especficamente debe confundirse con " disparadores temporales ". Considerando que un disparador es un objeto de base de datos cuyas declaraciones se ejecutan en respuesta a un tipo especfico de evento que se produce en una tabla determinada, un evento (programado) es un objeto cuyas sentencias se ejecutan en respuesta a la aprobacin de un intervalo de tiempo especificado. Si bien no existe ninguna disposicin en el estndar SQL para la programacin de eventos, hay precedentes en los sistemas de bases de datos, y usted puede notar algunas similitudes entre estas implementaciones, y que se encuentran en el servidor MySQL. Eventos de MySQL tiene las siguientes caractersticas y propiedades ms importantes:

En MySQL 5.5, un evento que se identifica por su nombre y el esquema al que se le asigna.

Un evento realiza una accin especfica de acuerdo a un horario. Esta accin consiste en una sentencia SQL, que puede ser una instruccin compuesta en un BEGIN
... FIN bloque si as lo desea (vase la Seccin 13.6, "MySQL compuesto-Declaracin

de la sintaxis" ). Momento de un evento puede ser de una sola vez orecurrentes . Un evento de una sola vez se ejecuta una sola vez. Un hecho recurrente repite su accin en un intervalo regular, y el calendario de un evento recurrente se le puede asignar un da de inicio y hora, da y hora de finalizacin, ambos o ninguno. (De manera predeterminada, el calendario un evento recurrente comienza tan pronto como se crea, y contina de forma indefinida, hasta que se desactive o se ha cado.) Si un evento que se repite no termina dentro de su intervalo de programacin, el resultado puede ser varias instancias de la ejecucin de eventos de manera simultnea. Si esto no es deseable, debe establecer un mecanismo para prevenir los casos simultneos. Por ejemplo, usted podra utilizar el GET_LOCK () funcin, o bloqueo de filas o la tabla.

Los usuarios pueden crear, modificar y quitar los eventos programados mediante instrucciones SQL destinados a estos fines. La creacin de eventos sintcticamente invlida y las instrucciones de modificacin fallar con un mensaje de error adecuado. Un usuario puede incluir las declaraciones en la accin de un evento que requieren privilegios que el usuario no tiene realmente . La creacin de eventos o instruccin de modificacin de xito, pero no la accin del evento. Ver Seccin 19.4.6, "El evento de la agenda y los privilegios de MySQL" para ms detalles.

Muchas de las propiedades de un evento se puede establecer o modificar mediante sentencias SQL. Estas propiedades incluyen el nombre del evento, el tiempo, la persistencia (es decir, si se conserva despus de la expiracin de su calendario), el estado (activado o desactivado), accin que debe realizarse, y el esquema al que se le asigna. Consulte Seccin 13.1.2, " ALTER EVENTO sintaxis " . El definidor por defecto de un evento es el usuario que ha creado el evento, a menos que el evento ha sido alterado, en cuyo caso el definidor es el usuario que ha emitido el ltimo ALTER EVENTO declaracin que afecte a este evento. Un evento puede ser modificado por cualquier usuario que disponga la EVENTO privilegios en la base de datos que se define el evento. Ver Seccin 19.4.6, "El evento de la agenda y los privilegios de MySQL" .

La declaracin de un caso de accin pueden incluir declaraciones con la mayor parte de SQL permitidas en rutinas almacenadas. Por las restricciones, consulte la seccin E.1, "Restricciones a programas almacenados" .

Los eventos son ejecutados por un especial evento planificador de hilos , cuando nos referimos a la agenda de eventos, que en realidad se refieren a este hilo. Cuando se ejecuta, el hilo de eventos planificador y su estado actual puede ser visto por los usuarios que tengan el PROCESO privilegio en la salida de SHOW PROCESSLIST , como se muestra en la discusin que sigue. El mundial event_scheduler variable del sistema determina si el evento de la agenda est habilitado y en ejecucin en el servidor. Cuenta con uno de estos 3 valores, que afectan a la programacin de eventos, como se describe aqu:
OFF : El evento de la agenda se ha detenido. El hilo de eventos planificador no se ejecuta,

no se muestra en la salida de SHOW PROCESSLIST , y no hay eventos programados se ejecutan. OFF es el valor predeterminado paraevent_scheduler . Cuando el evento de la agenda se detiene ( event_scheduler es OFF ), se puede iniciar por establecer el valor de event_scheduler a ON . (Ver siguiente punto).
ON : El evento de la agenda se inicia, el hilo de eventos planificador ejecuta y se ejecuta

todos los eventos programados. Cuando el evento de la agenda es ON , el hilo de eventos planificador est en la lista en la salida de SHOW PROCESSLIST como un servicio, y su estado es representado como se muestra aqu:

mysql> SHOW PROCESSLIST \ G *************************** 1. fila *************************** ID: 1 Usuario: root Host: localhost db: NULL Comando: Consulta Tiempo: 0 Estado: NULL Informacin: Muestra processlist *************************** 2. fila *************************** Id: 2 Usuario: event_scheduler Host: localhost db: NULL Comando: Daemon Tiempo: 3 Estado: A la espera para la activacin de al lado Info: NULL 2 rows in set (0.00 sec)

Programacin de eventos puede ser detenida por establecer el valor de event_scheduler a OFF .
DISCAPACITADOS : Este valor hace que el Programador de eventos no

operacionales. Cuando el Programador de eventos est DISABLED , el hilo de eventos planificador no funciona (y lo que no aparece en la salida de SHOW
PROCESSLIST ). Adems, el estado Programador de eventos no se pueden cambiar en

tiempo de ejecucin. Si el estado de Programador de eventos no se ha establecido en MINUSVALIDOS , event_scheduler se puede cambiar entre ON y OFF (con SET ). Tambin es posible utilizar 0 para OFF , y 1 para ON al establecer esta variable. Por lo tanto, cualquiera de los siguientes 4 estados se puede utilizar en el mysql cliente para activar el evento de la agenda:
FIJAR GLOBAL event_scheduler = ON; SET @ @ global.event_scheduler = ON; FIJAR GLOBAL event_scheduler = 1; SET @ @ global.event_scheduler = 1;

Del mismo modo, cualquiera de estos 4 estados se puede utilizar para apagar el Programador de eventos:
FIJAR GLOBAL event_scheduler = OFF;

SET @ @ global.event_scheduler = OFF; FIJAR GLOBAL event_scheduler = 0; SET @ @ global.event_scheduler = 0;

A pesar de ON y OFF tienen equivalentes numricos, el valor mostrado para la event_scheduler por SELECT oSHOW VARIABLES es siempre uno de OFF , ON , o DISABLED . MINUSVALIDOS no tiene un equivalente numrico .Por esta razn, ON y OFF se prefiere normalmente a la 1 y el 0 al establecer esta variable. Tenga en cuenta que se intenta establecer event_scheduler sin especificar como una variable global produce un error:
mysql < SET @ @ event_scheduler = OFF; ERROR 1229 (HY000): Variable 'event_scheduler' es una GLOBAL variable y puede ser configurada con SET GLOBAL Importante

Es posible configurar el Programador de eventos para DISABLED slo en el inicio del servidor. Sievent_scheduler es ON o OFF , no se puede establecer en DISABLED en tiempo de ejecucin. Adems, si el evento de la agenda se establece en DISABLED en el inicio, no se puede cambiar el valor de event_scheduleren tiempo de ejecucin. Para desactivar el planificador de eventos, utilice uno de los dos mtodos siguientes:

Como una opcin de lnea de comandos al iniciar el servidor:


- Planificador de eventos = DESACTIVADO

En el archivo de configuracin del servidor ( my.cnf o my.ini en los sistemas Windows), incluya la lnea, donde ser ledo por el servidor (por ejemplo, en un [mysqld] seccin):
event_scheduler = DESACTIVADO

Para habilitar el Programador de eventos, reiniciar el servidor sin - planificador de


eventos = DISABLEDde lnea de comandos, o despus de retirar o marcar como comentario

la lnea que contiene el planificador de eventos = DISABLED en el archivo de configuracin del servidor, segn el caso. Alternativamente, puede utilizar ON (o 1 ) o apagado (o 0 ) en lugar de la MINUSVALIDOS valor al iniciar el servidor.
Nota

Puede emitir la manipulacin de eventos declaraciones cuando event_scheduler se establece en DISABLED .No hay advertencias o errores que se generan en estos casos (siempre que los mismos estados son vlidos). Sin embargo, los eventos programados no se puede ejecutar hasta que esta variable se establece en ON (o 1 ). Una vez hecho esto, el hilo de eventos planificador ejecuta todos los eventos cuya programacin se cumplen las condiciones.

Iniciar el servidor MySQL con la opcin - skip-grant-tables opcin hace que event_scheduler se establezca en MINUSVALIDOS , anulando cualquier otro valor establecido, ya sea en la lnea de comandos o en elmy.cnf o my.ini archivo (Bug # 26807). Para las sentencias SQL que se utilizan para crear, modificar, y los eventos de cada, consulte la Seccin 19.4.3, "Sintaxis de eventos" . MySQL 5.5 ofrece una EVENTOS mesa en el INFORMATION_SCHEMA base de datos. En esta tabla se puede consultar para obtener informacin sobre los eventos programados que se han definido en el servidor. VerSeccin 19.4.4, "Los metadatos de eventos" , y la Seccin 20.7, "El EVENTOS INFORMATION_SCHEMA Tabla " , para ms informacin. Para obtener informacin sobre la programacin de eventos y el sistema de privilegios de MySQL, consulteSeccin 19.4.6, "El evento de la agenda y los privilegios de MySQL" .

19.4.3. Evento Sintaxis


MySQL 5.5 ofrece varias sentencias SQL para trabajar con los eventos programados:

Nuevos eventos se definen mediante la sentencia CREATE EVENT comunicado. Vea la seccin 13.1.11, "CREATE EVENT sintaxis " .

La definicin de un evento existente se puede cambiar por medio de la CASO


ALTER comunicado. ConsulteSeccin 13.1.2, " ALTER EVENTO sintaxis " .

Cuando un evento programado ya no se quiere o necesita, puede ser eliminado del servidor por su definidor con el DROP EVENT comunicado. Vea la seccin 13.1.22, " para
soltar eventos de sintaxis " . Ya sea un caso de que persista ms all del final de su

calendario tambin depende de su EJECUCIN DE clusula, si tiene uno. Veala seccin 13.1.11, " CREATE EVENT sintaxis " . Un evento puede ser disminuido por cualquier usuario que disponga la EVENTO privilegio para la base de datos en la que se define el evento. Ver Seccin 19.4.6, "El evento de la agenda y los privilegios de MySQL" .

19.4.4. Evento de metadatos


Metadatos sobre eventos puede obtenerse como sigue:

Consultar el caso de la tabla de MySQL base de datos. Consultar el EVENTOS mesa del INFORMATION_SCHEMA base de datos. Vea la Seccin 20.7, "El EVENTOS INFORMATION_SCHEMA Tabla " .

Utilice el SHOW CREATE CASO comunicado. Vea la seccin 13.7.5.9, " SHOW CREATE
CASO sintaxis " .

Utilice el SHOW DE EVENTOS comunicado. Vea la Seccin 13.7.5.19, " Mostrar


eventos de sintaxis " .

Programador de eventos Representacin Tiempo Cada sesin en MySQL tiene una zona de tiempo de la sesin (STZ). Esta es la sesin time_zone valor que se inicia desde el servidor mundial time_zone valor cuando comience la sesin, pero puede ser cambiado durante la sesin. La zona de tiempo de la sesin que es actual, cuando un CREATE EVENT o ALTER
EVENTO sentencia se ejecuta se utiliza para interpretar los tiempos especificados en la

definicin del evento. Esto se convierte en la zona horaria evento (ETZ), es decir, la zona horaria que se utiliza para la programacin de eventos y es en efecto en el caso conforme se ejecuta. Para la representacin de la informacin del evento en el mysql.event tabla, el execute_at , se inicia ytermina veces se convierten en hora UTC y la almacena junto con la zona horaria del evento. Esto permite la ejecucin de eventos para proceder tal como se define independientemente de los cambios ocurridos posteriormente a la zona horaria del servidor o de verano los efectos del tiempo. El last_executed tiempo tambin se almacenan en UTC. Si selecciona la informacin de mysql.event , los tiempos se acaban de mencionar se recuperan como valores de UTC. Estos tiempos tambin se puede obtener mediante la seleccin de la INFORMATION_SCHEMA.EVENTStabla o de Mostrar eventos , pero se reportan como valores ETZ. Otras veces disponibles de estas fuentes indican que un evento se ha creado o modificado por ltima vez, stos se muestran como los valores de STZ. La siguiente tabla resume la representacin de los tiempos de eventos. mysql.eventINFORMATION_SCHEMA.EVENTSMostrar eventos Valor
Ejecutar en Inicia Finaliza UTC UTC UTC ETZ ETZ ETZ ETZ STZ STZ ETZ ETZ ETZ n/a n/a n/a

ltima ejecutados UTC Creado ltima alterado STZ STZ

19.4.5. Programador de eventos de estado


El Planificador de eventos escribe informacin sobre la ejecucin de eventos que termina con un error o una advertencia en el registro de errores del servidor de MySQL. Ver Seccin 19.4.6, "El evento de la agenda y los privilegios de MySQL" para un ejemplo. La informacin sobre el estado del evento de la agenda para la depuracin y solucin de problemas de los propsitos se pueden obtener mediante la ejecucin de mysqladmin debug (ver Seccin 4.5.2, " mysqladmin - Administrar un servidor MySQL " ); despus de ejecutar este comando, el registro de errores del servidor contiene la produccin en relacin a la agenda de eventos, de forma similar a lo que se muestra a continuacin:
Eventos de estado: LLA = ltima Cerrado En LUA = ltima Desbloqueado En WOC = Esperando A condicin de DL = Datos Cerrado Planificacin de eventos de estado: Estado: INICIALIZADA Identificacin del Tema: 0 LLA: init_scheduler: 313 LUA: init_scheduler: 318 WOC: NO Trabajadores: 0 Ejecutado: 0 Datos bloqueado: NO Evento estado de la cola: Nmero de elementos: 1 Datos bloqueado: NO El intento de bloqueo: NO LLA: init_queue: 148 LUA: init_queue: 168 WOC: NO A continuacin la activacin: 0000-00-00 00:00:00

En declaraciones que se producen como parte de los actos ejecutados por el evento de la agenda, mensajes de diagnstico (no slo errores, sino tambin las advertencias) se escriben en el registro de errores y, en Windows, en el registro de sucesos de aplicacin. Para eventos frecuentemente ejecutadas, es posible para que esto resultar en muchos mensajes registrados. Por ejemplo, para SELECT ... EN var_list declaraciones, si la consulta no devuelve ninguna fila, una advertencia con el cdigo de error 1329 se produce ( No hay
datos ), y los valores de las variables permanecen sin cambios. Si la consulta devuelve varias

filas, se produce error 1172 (Resultado compuesto de mas de una fila ). Para

cualquiera de estas condiciones, usted puede evitar que las advertencias de estar conectado al declarar un manejador de condiciones, vase la seccin 13.6.7.2, "DECLARE
... MANIPULADOR sintaxis " . Por las declaraciones que pueden recuperar varias filas, otra

estrategia es utilizar LIMIT 1 para limitar el conjunto de resultados a una sola fila.

Para activar o desactivar la ejecucin de los eventos programados, es necesario establecer el valor de lo globalevent_scheduler variable del sistema. Esto requiere que el super privilegio. El CASO privilegio rige la creacin, modificacin y eliminacin de los acontecimientos. Este privilegio se le puede dar con GRANT . Por ejemplo, este GRANT declaracin confiere el CASO privilegio para el esquema nombradomyschema en el usuario jon @ ghidora :
CONCESIN DE EVENTOS EN myschema * a Jon @ ghidora.;

(Se supone que esta cuenta de usuario ya existe, y que deseamos que se mantenga sin cambios lo contrario.) Para otorgar este mismo usuario del CASO privilegios en todos los esquemas, utilice la siguiente declaracin:
CONCESIN DE EVENTOS ON * * a Jon @ ghidora.;

El CASO privilegio tiene un alcance global o esquema de nivel. Por lo tanto, tratando de otorgar resultados en una sola tabla en un error como se muestra:
mysql> GRANT EN CASO myschema.mytable a Jon @ ghidora; ERROR 1144 (42000): El comando ilegal GRANT / REVOKE, por favor consulte el manual para ver qu permisos pueden ser usados

Es importante entender que un evento se ejecuta con los privilegios de su definidor, y que no puede realizar ninguna accin por lo que su definidor no tiene los privilegios necesarios. Por ejemplo, supongamos que jon @ ghidora tiene CASO privilegio para myschema . Supongamos tambin que este usuario tiene la SELECT privilegio para myschema , pero no otros privilegios para este esquema. Es posible que jon @
ghidora para crear un nuevo evento como este: CREAR EVENTOS e_store_ts EN EL HORARIO CADA 10 segundos HACER INSERT INTO VALORES myschema.mytable UNIX_TIMESTAMP (());

El usuario espera un minuto o as, y luego realiza un SELECT * FROM mitabla; consulta, esperando ver a varias nuevas filas en la tabla. En su lugar, la tabla est vaca. Dado que el usuario no tiene el INSERT privilegio de la tabla en cuestin, el evento no tiene ningn efecto. Si usted examina el registro de errores de MySQL ( nombre de host . err ), se puede ver que el evento se est ejecutando, pero la accin que est intentando realizar no, segn lo indicado por retcode = 0 :
060209 22:39:44 [Nota] caso Evex EJECUTOR newdb.e [expr: 10] 060209 22:39:44 [Nota] Evex EJECUTADO caso newdb.e [expr: 10]. Retcode = 0 060209 22:39:54 [Nota] caso Evex EJECUTOR newdb.e [expr: 10] 060209 22:39:54 [Nota] Evex EJECUTADO caso newdb.e [expr: 10]. Retcode = 0 060209 22:40:04 [Nota] caso Evex EJECUTOR newdb.e [expr: 10] 060209 22:40:04 [Nota] Evex EJECUTADO caso newdb.e [expr: 10]. Retcode = 0

Dado que este usuario es muy probable que no tiene acceso al registro de error, es posible verificar si la declaracin del evento, la accin es vlida si se ejecuta directamente:
mysql> INSERT INTO VALORES myschema.mytable UNIX_TIMESTAMP (()); ERROR 1142 (42000): comando INSERT denegado para el usuario 'Jon' @ 'ghidora' para 'mitabla' mesa

La inspeccin de la INFORMATION_SCHEMA.EVENTS tabla muestra que e_store_ts existe y est habilitado, pero su LAST_EXECUTED columna es NULL :
mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS > >
DONDE EVENT_NAME = 'Los e_store_ts' Y EVENT_SCHEMA = 'myschema' \ G

*************************** 1. fila *************************** EVENT_CATALOG: NULL EVENT_SCHEMA: myschema EVENT_NAME: e_store_ts DEFINER: jon @ ghidora EVENT_BODY: SQL EVENT_DEFINITION: INSERT INTO VALORES myschema.mytable (UNIX_TIMESTAMP ()) Event_type: RECURRENTE EXECUTE_AT: NULL INTERVAL_VALUE: 5 INTERVAL_FIELD: SEGUNDO Sql_mode: NULL Inicio: 0000-00-00 00:00:00 Finaliza: 0000-00-00 00:00:00

ESTADO: HABILITADO ON_COMPLETION: no conserva CREADO: 02/09/2006 22:36:06 LAST_ALTERED: 02/09/2006 22:36:06 LAST_EXECUTED: NULL EVENT_COMMENT: 1 row in set (0.00 sec)

Para rescindir el CASO privilegio, utilizar el REVOKE declaracin. En este ejemplo, el CASO privilegio en el esquemamyschema se retira de la jon @ ghidora cuenta de usuario:
CASO DE REVOCAR * myschema de jon @ ghidora.; Importante

Revocar la EVENTO privilegios de un usuario no se elimina o desactivar los eventos que pueden haber sido creados por el usuario. Un evento no se migra o se ha cado como resultado del cambio de nombre o eliminar el usuario que lo cre. Supongamos que el usuario jon @ ghidora le ha concedido la CASO y INSERT privilegios en el myschemaesquema. Este usuario a continuacin, crea el siguiente evento:
CREATE EVENT e_insert EN EL HORARIO CADA SEGUNDO 7 HACER INSERT INTO myschema.mytable;

Despus de este evento se ha creado, la raz revoca el CASO privilegio para jon @
ghidora . Sin embargo,e_insert contina ejecutando, insertar una nueva fila

en mitabla cada siete segundos. Lo mismo sera cierto sila raz haba emitido ninguna de estas declaraciones:
DROP USER jon @ ghidora; Cambiar nombre de usuario jon @ ghidora A someotherguy @ ghidora;

Puede comprobar que esto es cierto, examinando la mysql.event mesa (explicado ms adelante en esta seccin) o el INFORMATION_SCHEMA.EVENTS tabla (vase la Seccin 20.7, "El EVENTOS INFORMATION_SCHEMATabla " ) antes y despus de la emisin de un DROP
USER o RENAME USER declaracin .

Definiciones de eventos se almacenan en la mysql.event tabla. Para excluir a un evento creado por otra cuenta de usuario, el MySQL raz de usuario (u otro usuario con los privilegios necesarios) puede eliminar las filas de esta tabla. Por ejemplo, para eliminar el evento e_insert se indica anteriormente, la raz se puede utilizar la siguiente declaracin:
DELETE FROM mysql.event

Donde db = 'myschema' Y definidor = 'jon @ ghidora' Y el nombre = 'e_insert';

Es muy importante para que coincida con el nombre del evento, nombre de esquema de base de datos, y la cuenta de usuario cuando se eliminan las filas de la mysql.event mesa. Esto es porque el mismo usuario puede crear eventos diferentes con el mismo nombre en diferentes esquemas. De los usuarios EVENTO permisos se almacenan en los Event_priv columnas de la mysql.user y mysql.dbtablas. En ambos casos, esta columna tiene uno de los valores de Y 'o' N '. ' N 'es el valor predeterminado.mysql.user.Event_priv se establece en ' Y 'para que un usuario slo en caso de que el usuario tiene el mundial CASO privilegio (es decir, si el privilegio fue otorgado con gran evento ON *. * ). Para un nivel de esquema CASO privilegio GRANT crea una fila en mysql.db y establece que la fila Db columna para el nombre del esquema, el usuario columna para el nombre del usuario, y el Event_priv columna a ' Y '. Nunca debe haber ninguna necesidad de manipular estas tablas directamente, ya que el gran evento y REVOKE EVENTOdeclaraciones realizar las operaciones necesarias sobre ellos. Cinco variables de estado de proporcionar cantidades de caso relacionados con las operaciones (pero no de las declaraciones realizadas por los acontecimientos, ver Seccin D.1, "Restricciones a programas almacenados" ).Estos son:
Com_create_event : El nmero de CREATE EVENT instrucciones ejecutadas desde el

reinicio del servidor ltimos.


Com_alter_event : El nmero de ALTER EVENT instrucciones ejecutadas desde el reinicio

del servidor ltimos.


Com_drop_event : El nmero de evento de colocacin instrucciones ejecutadas

desde el reinicio del servidor ltimos.


Com_show_create_event : El nmero de SHOW CREATE EVENT instrucciones ejecutadas

desde el reinicio del servidor ltimos.


Com_show_events : El nmero de Show Events instrucciones ejecutadas desde el reinicio

del servidor ltimos. Puede ver los valores actuales de todos ellos al mismo tiempo mediante la ejecucin de la sentencia SHOW STATUS LIKE '%% evento; .

S-ar putea să vă placă și