Creando funciones mysql. Funciones MySQL. Sintaxis para crear un disparador

Muy a menudo, los diseñadores dibujan diseños con elementos de formulario no estándar, es decir. El diseño de casillas de verificación, botones de opción, entradas y selectores difiere de lo que el navegador muestra de forma predeterminada. Por tanto, el maquetador se enfrenta a la tarea de personalizar el diseño, incluyendo elementos seleccionados.

En este artículo veremos cómo cambiar apariencia seleccionar Sin embargo, nos adheriremos a la siguiente ideología. Tiene sentido personalizar solo el estado contraído predeterminado del selector, y el diseño de la lista desplegable debe seguir siendo estándar. Por lo tanto, la solución que se describe a continuación no funcionará si necesita una lista desplegable compleja, por ejemplo, con iconos o casillas de verificación para cada opción.

Por otro lado, este enfoque permite:

1. No escribas código javascript, que emularía el comportamiento de los selectores. Toda la lógica recae en el navegador. Hay muchos complementos hoy en día, pero no suele encontrarse uno que maneje todos los casos extremos que encuentra el usuario al interactuar con este control. Un ejemplo de un caso tan extremo sería selección automática Posición de la lista desplegable (apertura hacia abajo o hacia arriba).

2. Dado que el navegador es responsable del comportamiento y diseño de la lista desplegable, no es necesario escribir ningún solución separada Para dispositivos móviles, lo que le permitiría trabajar cómodamente con selectores en dispositivos táctiles con pantallas pequeñas. Los propios selectores nativos integrados aceptan el tipo correcto, porque en plataformas móviles todo ya ha sido pensado. Por ejemplo, usuarios de iOS cuando haces clic en el selector, no verán tu lista personalizada, sino la familiar estándar. Los usuarios no necesitarán ajustar su comportamiento a su sitio específico; su comportamiento será el mismo que en todos los demás sitios. Y es conveniente para él, y por eso creaste el sitio.

Entonces, como ya se dijo, para seleccionar diseño Las propiedades CSS3 son suficientes.

La propiedad principal que te permitirá cambiar la apariencia del selector es apariencia. Obliga a un elemento a convertirse en lo que usted desee, por ejemplo, puede forzar a un div a convertirse en un botón. Sin embargo, para nuestros propósitos, el valor interesante es none, lo que significa que no es necesario aplicar ningún estilo al elemento. De esta manera podemos eliminar el atributo específico de selección: la flecha hacia abajo a la derecha.

Seleccione ( -apariencia-webkit: ninguna; -apariencia-moz: ninguna; -apariencia-ms: ninguna; apariencia: ninguna! Importante;)

Como puede ver, eliminar la flecha no fue difícil, ahora todo lo que queda es agregar algunas propiedades CSS triviales como marco, fuente, etc. Aquí, por supuesto, puede agregar esquinas redondeadas, sombras, etc., todo tal como lo dibujó el diseñador en el diseño. La lista desplegable principal sigue siendo nativa.

Seleccione (fondo: transparente; pantalla: bloque; ancho: 100%; borde: 1px sólido #a7a7a7; color: #32353a; familia de fuentes: 16/Arial, sans-serif; tamaño de fuente: 16px; altura de línea: 1,4 ; peso de fuente: normal; relleno: 7px 7px 10px; alineación vertical: superior -apariencia del kit web: ninguno;

Ahora solo queda agregar una flecha o algún otro ícono como fondo. Usaremos el fondo, ya que los pseudoelementos como antes y después no funcionarán para la selección. Para mejor visualización sitios en varios dispositivos con diferentes densidades de píxeles, en varias escalas etc. Es común utilizar íconos SVG. Por lo tanto, utilizando un codificador de URL en línea para SVG, convertiremos el icono en un URI de datos. Es importante recordar que la etiqueta SVG debe tener el atributo xmlns="http://www.w3.org/2000/svg".

Obtendrá el siguiente resultado.

%3Csvg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8"%3E%3Cpath fill="%23000" regla de relleno ="evenodd" class="cls-1" d="M8,0L4.141,6.993,0.012,0.156Z"/%3E%3C/svg%3E%0A

Dado que la flecha utilizada no es estándar, puede moverla hacia la izquierda o usar cualquier otra imagen en lugar de la flecha, o puede prescindir por completo de los íconos.

Con la llegada de CSS3 fue posible hacer hermoso estilo para cualquier elemento del sitio. Porque CSS3 da amplia gama características que aceleran el proceso de desarrollo de un diseño de sitio web. Hoy aplicaremos estilo al elemento seleccionado en CSS. Para aquellos que no lo saben, este elemento es responsable de la lista desplegable del sitio. Mucha gente usa vista estándar, pero se puede cambiar para adaptarlo al diseño de su sitio.

No hay nada mejor que ver con tus propios ojos cómo luce la lista:

Descargar

Así es como se ve esta Selección en CSS:

Artículos similares sobre este tema:

Ahora describiré el proceso de instalación paso a paso usando esta lista desplegable o simplemente Seleccionar.

1 paso. Conectamos los archivos necesarios.

Es sencillo. Después de descargar el archivo con las fuentes desde allí, necesitaremos 2 archivos (style.css y select.js, si conecta la primera opción de la lista o select_demo2.js, si conecta la segunda opción). Conectamos estos dos archivos entre las etiquetas:

1 2
Paso 2. estructura HTML Seleccionar elemento

No hay nada súper complejo en la estructura (y por qué debería haberlo, es solo HTML :)). forma sencilla, dentro del cual hay un menú desplegable Seleccionar con sus elementos:

1 2 3 4 5 6 7 8 9 10 11 12 Países del Reino Unido: Por favor seleccione un país: Inglaterra Irlanda del Norte Escocia Gales
Paso 3. Agregar estilos para Seleccione CSS

No hay muchos de ellos. A continuación proporciono los estilos para la primera opción de la lista. Me gustaría llamar su atención sobre los caminos hacia las imágenes. Solo hay dos: el primero es para abrir la lista y el segundo es para cerrar. Parecen dos flechas "arriba" y "abajo" respectivamente. Se pueden descargar de las fuentes ubicadas al principio del artículo:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 .dropcontainer (posición: relativa; tamaño de fuente: 16px; color: #777;) .trigger (color: #777; relleno: 10px; tamaño de fuente: 16px; ancho: 50%; fondo: #fff url () 98 % centro sin repetición; visualización: bloque; borde: 1px sólido #ccc; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; todo 0.5s fácil; : todos los 0,5 s facilitan; -o-transition: todos los 0,5 s facilitan; transición: todos los 0,5 s facilitan) .trigger: hover (color: #777; fondo: #f5f5f5 url (../images/select-arrow-open. png) 98% centro sin repetición;) .activetrigger (color: #777; relleno: 10px; tamaño de fuente: 16px; ancho: 50%; fondo: #f5f5f5 url () 98% centro sin repetición; visualización: bloque ; borde: 1px sólido #ccc; -webkit-box-sizing: border-box; .activetrigger: hover (fondo: #f5f5f5 url (../images/select-arrow-close.png) 98% centro sin repetición ;

color: #777;

) .activetrigger: activo (fondo: #f5f5f5 url (../images/select-arrow-close.png) 98% centro sin repetición; color: #777;) .dropcontainer ul (tamaño de fuente: 16px; borde: 1px sólido #ccc; fondo: #fff; relleno: 0; ancho: 50%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; dropcontainer ul li (relleno: 5px; -webkit-transition: todos los 0,5 s con facilidad; -moz-transition: todos los 0,5 s con facilidad; -o-transition: todos los 0,5 s con facilidad; transición: todos los 0,5 s con facilidad) .dropcontainer ul li: hover (fondo: #f5f5f5; esquema: ninguno;) .dropcontainer ul li: primer hijo (mostrar: ninguno;) .dropcontainer ul li: último hijo (borde inferior: ninguno;) .dropdownhidden (mostrar: ninguno;) .dropdownvisible (altura: auto;)

Debe reemplazar la última propiedad desplegable visible:

1 2 3 .dropdownvisible (altura: auto;)
1 2 3 4 .dropdownvisible (altura: 200px; desbordamiento-y: desplazamiento;)

Y si no olvida reemplazar los scripts (vea arriba qué cambiar y qué), obtendrá lo siguiente:

¿En qué navegadores funciona bien esta Seleccionar CSS (lista desplegable)?
  • ✓ Firefox 24.0, Firefox 25.0, Firefox 26.0
  • ✓ Cromo 29.0, Cromo 30.0, Cromo 31.0
  • ✓ Ópera 12.14, Ópera 12.15, Ópera 12.16
  • ✓ IE 7.0, IE 8.0, IE 9.0, IE 10.0, IE 11.0
  • ✓ Safari 5.1, Safari 6.0, Safari 6.1, Safari 7.0
  • Apple iOS– iPhone 4S, iPhone 5, iPad 2 (5.0), iPad 3 (6.0), iPad Mini
  • ✓ Android – Sony Experia X10, HTC uno X, Kindle Fire 2, Google Nexus
Complemento a la lección: efecto de desplazamiento creativo + VIDEO

Además de la lección, quiero contarte cómo hacer otro efecto en el sitio muy inusual: el efecto de desplazamiento. Mira esto vídeo corto y lo verás todo por ti mismo.

Conclusión

Otro elemento del sitio: la selección se puede cambiar para adaptarla a su diseño utilizando CSS y Javascript. No hay nada complicado en el proceso de instalación, así que lo conseguirás. Además, como complemento al artículo, recibirá un método creativo y un vídeo de instalación.

¡Atención! Mayor desarrollo y el soporte para el complemento se ha detenido debido a que ahora forma parte de .

Una de las cosas más desagradables (y yo diría incluso terribles) en el desarrollo web es el diseño de formularios HTML. Lamentablemente no existe estándar uniforme visualización de elementos de formulario, independientemente del navegador y Sistema operativo, así como no hay forma de personalizar algunos de estos elementos usando mesas en cascada estilos.

A los siguientes elementos de formulario HTML no se les puede aplicar un estilo completo:

  • lista desplegable;
  • casilla de verificación;
  • cambiar .
  • campo para enviar un archivo.

Como ya se desprende del título del post, aquí solo hablaremos de selectos.

Existen muchas soluciones listas para usar en forma de complementos de jQuery para diseñar listas desplegables. Pero yo (debido al hecho de que ninguno de los complementos me convenía por una razón u otra) decidí reinventar mi propia rueda y escribí mi propio complemento, que comparto en este artículo.

Me gustaría señalar de inmediato que este complemento no apto para todos posibles casos usando selectores (lea las desventajas).

Demostración del complemento

Puedes ver un ejemplo de estilo de selector usando mi complemento. Los diseñé sin usar imágenes.

Ventajas
  • Cuando JavaScript está deshabilitado, se muestran selectores estándar.
  • El script es de tamaño pequeño, aproximadamente 4 kilobytes.
  • Funciona en IE6+ y todos los navegadores de escritorio modernos.
  • Se muestra en línea.
  • Diseñado fácilmente con CSS.
  • Le permite configurar altura máxima para obtener una lista desplegable (propiedad CSS altura máxima).
  • Ajusta automáticamente el ancho si no se especifica.
  • Admite el desplazamiento de la rueda del mouse.
  • Tiene “posicionamiento inteligente”, es decir no desaparece parte visible páginas al abrir la lista.
  • Puede "captar" presionando la tecla Tab y cambiar con las flechas del teclado.
  • Admite el atributo "deshabilitado".
  • También funciona con selecciones agregadas/cambiadas dinámicamente.
Defectos
  • No admite el atributo múltiple, es decir. no permite seleccionar varios elementos (selección múltiple).
  • No admite la agrupación de elementos de la lista (etiqueta).
  • No admite el cambio con las flechas del teclado cuando la lista se abre haciendo clic con el mouse.
Descargar

El complemento no está disponible porque ya no es relevante.

Complemento jQuery “SelectBox Styler”

Versión: 1.0.1 | Descargas: 11103 | Tamaño: 7 KB | Última actualización: 07.10.2012

Actualizaciones 22/09/2012 Convirtió el script en un complemento (incluida una versión minimizada) y también agregó soporte para agregar/cambiar selecciones dinámicamente. 07/10/2012 Se corrigió el comportamiento del script al usar el método onchange de la etiqueta. Conectando el complemento

Si jQuery aún no está habilitado en el sitio, agregue siguiente línea antes de la etiqueta:

Inmediatamente después de jQuery, incluya el archivo con el script:

(función ($) ( $(función() ($("select").selectbox(); )) ))(jQuery)

Coloque este código antes de la etiqueta después de los archivos anteriores.

En cambio dinámico Los selectores deben ejecutar un activador de actualización, por ejemplo:

(función ($) ($(función() ($("botón").hacer clic(función() ($("seleccionar").find("opción:nth-child(5)").attr("seleccionado) ", verdadero); $("select").trigger("actualizar"); )) )) ))(jQuery)

Código HTML después de la ejecución del complemento.

Su estructura se ve así:

-- Seleccionar --

  • -- Seleccionar --
  • Punto 1
  • Punto 2
  • Punto 3
-- Seleccionar -- Artículo 1 Artículo 2 Artículo 3

Clases CSS utilizadas para diseñar el selector.

Para emitir selecciones con usando CSS, utilice las siguientes clases:

.cuadro de seleccióncontenedor principal para toda la selección
.selectbox .selectseleccionar en estado colapsado
.selectbox.focused .selectcentrarse en seleccionar cuando se presiona la tecla Tab
.selectbox .select .textoetiqueta anidada para selección contraída en caso de inserción imagen de fondo utilizando la técnica de la puerta corredera
.selectbox .triggerlado derecho de la selección contraída (interruptor condicional)
.selectbox .trigger .flechasubetiqueta para botón de opción (flecha)
.selectbox .desplegablecontenedor para la lista desplegable
.selectbox .ul desplegablelista desplegable
.selectboxliseleccionar elemento (opción)
.selectbox li.seleccionadoseleccionado seleccionar elemento
.selectbox li.disableddeshabilitado (no disponible para selección) seleccionar elemento
Conclusión

Crear un guión de este tipo es una tarea bastante laboriosa, ya que hay que tener en cuenta muchos puntos diferentes. Realmente espero que no aparezcan errores graves. Pero, en todo caso, házmelo saber en los comentarios.

Para poder utilizar estas funciones, debe compilar PHP con soporte MySQL.

Instalación

Con la opción de configuración --with-mysql habilitas acceso PHP a la base de datos MySQL. Si usa esta opción sin especificar una ruta MySQL, PHP usará las bibliotecas cliente MySQL integradas. En PHP4 Soporte MySQL siempre encendido; Si no especifica esta opción de configuración, se utilizan las bibliotecas vinculadas. Los usuarios que ejecutan otras aplicaciones que utilizan MySQL (por ejemplo, cuando iniciando PHP 3 y PHP 4 como módulos de Apache de la competencia, o auth-mysql), siempre deben especificar la ruta a MySQL: --with-mysql=/path/to/mysql . Esto obligará a PHP a utilizar las bibliotecas cliente instaladas por MySQL, eliminando cualquier conflicto.

Instalación

El comportamiento de las funciones de MySQL está determinado por la configuración en el archivo de configuración global php.ini.

Tabla 1. Opciones de configuración de MySQL Nombre predeterminado modificable
mysql.allow_persistent"En"PHP_INI_SYSTEM
mysql.max_persistent"-1" PHP_INI_SYSTEM
mysql.max_links "-1" PHP_INI_SYSTEM
mysql.default_portNULOPHP_INI_ALL
mysql.default_socketNULOPHP_INI_ALL
mysql.default_host NULOPHP_INI_ALL
mysql.default_userNULOPHP_INI_ALL
mysql.contraseña_predeterminadaNULOPHP_INI_ALL

Para obtener más detalles y la definición de las constantes PHP_INI_*, consulte ini_set().

Aquí breve descripción directivas de configuración.

mysql.allow_persistent booleano mysql.max_persistent entero

Número máximo de conexiones MySQL persistentes por proceso.

mysql.max_links entero

Número máximo de conexiones MySQL persistentes por proceso, incluidas las conexiones persistentes.

mysql.default_port cadena

El número de puerto TCP predeterminado que se utilizará al conectarse al servidor de la base de datos si no se especifica ningún otro puerto. Si no se especifica un puerto predeterminado, el valor se obtiene de variable de entorno MYSQL_TCP_PORT, apariciones de mysql-tcp en /etc/services, o constantes de tiempo de compilación MYSQL_PORT, en ese orden. Win32 solo usa la constante MYSQL_PORT.

mysql.default_socket cadena

El nombre de socket predeterminado que se utilizará al conectarse al servidor de base de datos local, a menos que se especifique un nombre de socket diferente.

mysql.default_host cadena

El host del servidor predeterminado que se utilizará al conectarse al servidor de base de datos local si no se especifica ningún otro host. No probado en modo seguro.

mysql.default_user cadena

El nombre de usuario predeterminado que se utilizará al conectarse al servidor de la base de datos, a menos que se especifique lo contrario. No aplica en modo seguro.

mysql.contraseña_predeterminada cadena

La contraseña predeterminada que se utilizará al conectarse al servidor de la base de datos si no se especifica ninguna otra contraseña. No aplica en modo seguro.

Hay dos tipos de recursos utilizados en un módulo MySQL. El primero es el identificador del enlace para conectarse a la base de datos, el segundo es el recurso que contiene el resultado de la consulta.

Constantes predefinidasTabla 2. Ejemplos de constantes de recuperación de MySQL

Este ejemplo muestra cómo conectarse a una base de datos, ejecutar una consulta, imprimir las filas de resultados y desconectarse de una base de datos MySQL.

Contenido mysql_affected_rows: obtiene el número de filas involucradas en una operación MySQL anterior mysql_change_user: cambia el usuario que inició sesión/que inició sesión en una conexión activa mysql_character_set_name: devuelve el nombre del conjunto de caracteres/juego de caracteres mysql_close: cierra una conexión MySQL mysql_connect: abre una conexión al servidor MySQL mysql_create_db - crea una base de datos MySQL mysql_data_seek - mueve el puntero de resultado interno mysql_db_name - recibe los datos del resultado mysql_db_query - envía una consulta MySQL mysql_drop_db - elimina una base de datos MySQL mysql_errno - devuelve el valor numérico del mensaje de error de una operación MySQL anterior mysql_error: devuelve el texto del mensaje de error de una operación anterior de MySQL mysql_escape_string: mnemoniza/escapa de una cadena para usarla en mysql_query mysql_fetch_array: recupera la fila de resultados como matriz asociativa, matriz numérica o ambos mysql_fetch_assoc - Recupera la fila de resultados como una matriz asociativa mysql_fetch_field - Recibe la información de la columna del resultado y la devuelve como un objeto mysql_fetch_lengths - Recupera la longitud de cada salida en el resultado mysql_fetch_object - Recupera la fila de resultados como un objeto mysql_fetch_row - Recibe el fila de resultados en una matriz enumerable mysql_field_flags: recupera los indicadores asociados con el campo especificado en el resultado mysql_field_len: devuelve la longitud del campo especificado en el resultado

¡Atención! este trabajo construido sobre la base de la traducción del apartado “17.1. Rutinas almacenadas y tablas de concesión" descripción del software MySQL 5.0.19, "Manual de referencia. Documenta MySQL 5.0 hasta 5.0.19. Documento generado el: 2006-01-23 (revisión:995)"
"Lea todo primero y luego pruebe los ejemplos".

Los procedimientos almacenados son un conjunto de comandos SQL que se pueden compilar y almacenar en un servidor. De esta manera, en lugar de almacenar una consulta utilizada con frecuencia, los clientes pueden hacer referencia al procedimiento almacenado correspondiente. Esto proporciona mejor rendimiento, porque esta solicitud debe analizarse solo una vez y reduce el tráfico entre el servidor y el cliente. El nivel conceptual también se puede aumentar creando una biblioteca de funciones en el servidor.

Un disparador es un procedimiento almacenado que se ejecuta cuando ocurre un evento. cierto evento. Por ejemplo, puede definir un procedimiento almacenado que se ejecute cada vez que se elimina un registro de una tabla transaccional, garantizando así eliminación automática el cliente correspondiente de la tabla de clientes cuando se eliminen todas sus transacciones.

Los programas almacenados (procedimientos y funciones) son compatibles con MySQL 5.0. Los procedimientos almacenados son un conjunto de expresiones SQL que se pueden almacenar en el servidor. Una vez hecho esto, el cliente ya no necesita retransmitir la solicitud, sino que simplemente llama al programa almacenado.

Esto puede resultar útil cuando:

  • Numerosas aplicaciones cliente están escritas en diferentes idiomas o trabajar en otras plataformas, pero necesita usar la misma base de datos de operaciones
  • la seguridad es lo primero

Los procedimientos y funciones almacenados (rutinas) pueden proporcionar un mejor rendimiento porque se requiere enviar menos información entre el cliente y el servidor. La elección aumenta la carga en el servidor de la base de datos, pero reduce los costos del lado del cliente. Usa esto si hay mucho máquinas cliente(como servidores web) son atendidos por una o más bases de datos.

Las rutinas almacenadas también le permiten utilizar bibliotecas de funciones almacenadas en la base de datos del servidor. Esta oportunidad se presenta a muchos. lenguas modernas programación que le permite llamarlos directamente (por ejemplo, usando clases).

MySQL sigue la sintaxis de SQL:2003 para procedimientos almacenados, que ya se utiliza en DB2 de IBM.

De las palabras a los hechos...

Al crear, modificar y eliminar rutinas almacenadas, el servidor manipula la tabla mysql.proc

A partir de MySQL 5.0.3 se requieren los siguientes privilegios:

CREAR RUTINA para crear procedimientos almacenados

ALTER ROUTINE son necesarios para cambiar o eliminar rutinas. Este privilegio se asigna automáticamente al creador del procedimiento (función)

Se requerirá el privilegio EXECUTE para ejecutar la rutina. Sin embargo, se asigna automáticamente al creador del procedimiento (función). Además, por defecto, el parámetro SQL SECURITY para la rutina DEFINER, que permite a los usuarios con acceso a la base de datos llamar a rutinas asociadas a esta base de datos.

Sintaxis de procedimientos y funciones almacenados.

Una rutina almacenada es un procedimiento o función. Las rutinas almacenadas se crean utilizando declaraciones CREATE PROCEDURE o CREATE FUNCTION. Una rutina almacenada se llama mediante una instrucción CALL, y solo se utilizan variables que devuelven valores como variables de salida. La función se puede llamar como cualquier otra función y puede devolver un valor escalar. Las rutinas almacenadas pueden llamar a otras rutinas almacenadas.

Desde MySQL 5.0.1, el procedimiento o función cargado está asociado a una base de datos específica. Esto tiene varios significados:

  • Cuando se llama a una subrutina, la intención es llamar a USE db_name (y descartar la base de datos cuando la subrutina se haya completado y la base de datos ya no sea necesaria)
  • Puede calificar nombres regulares con un nombre de base de datos. Esto se puede utilizar para hacer referencia a una rutina que no está en la base de datos actual. Por ejemplo, para ejecutar un procedimiento almacenado p o una función f que está asociada con la base de datos de prueba, puede decirle al intérprete de comandos así: CALL test.p() o test.f() .
  • Cuando se elimina una base de datos, también se eliminan todas las rutinas cargadas asociadas con ella. En MySQL 5.0.0, las rutinas cargadas son globales y no están asociadas con la base de datos. Heredan la base de datos predeterminada de la declaración de llamada. Si USE db_name se realiza dentro de una subrutina, la base de datos actual original se restaurará después de salir de la subrutina (por ejemplo, la base de datos actual es db_11, llamamos a una subrutina que usa db_22, después de salir de la subrutina permanece el db_11 actual)

MySQL es totalmente compatible con extensiones que le permiten utilizar expresiones SELECT regulares (sin utilizar cursores ni variables locales) dentro de procedimientos almacenados. El conjunto de resultados devuelto por la consulta simplemente se envía directamente al cliente. Una consulta SELECT múltiple genera múltiples conjuntos de resultados, por lo que el cliente debe usar una biblioteca que admita múltiples conjuntos de resultados.

CREAR PROCEDIMIENTO: crea un procedimiento almacenado.

CREAR FUNCIÓN: crea una función almacenada.

Sintaxis:

CREAR PROCEDIMIENTO nombre_procedimiento ([parámetro_procedimiento[,...]])
[características...] subrutina_cuerpo

CREAR FUNCIÓN nombre_función ([parámetro_función[,...]])
Tipo de DEVOLUCIONES
[característica...] subrutina_cuerpo

parámetro_procedimiento:
[ EN | FUERA | INOUT ] tipo de nombre_parámetro
parámetro_función:
tipo de nombre_parámetro

tipo:
Cualquier tipo de datos MySQL

característica:
IDIOMA SQL
|
DETERMINISTA
| ( CONTIENE SQL | NO SQL | LEE DATOS SQL | MODIFICA DATOS SQL )
| SEGURIDAD SQL (DEFINIDOR | INVOCADOR)

| COMENTARIO "cadena"
cuerpo_subrutina:

Corrija la expresión SQL.

Miremos todo en la práctica.

Primero, creemos un procedimiento almacenado con la siguiente consulta:
CREAR PROCEDIMIENTO `my_proc`(OUT t INTEGER(11))
NO DETERMINISTA
INVOCADOR DE SEGURIDAD SQL
COMENTARIO ""
COMENZAR
seleccione val1+val2 en "t" desde `my` LIMIT 0,1;

FIN;

El uso de la expresión LIMIT en esta consulta se realiza en reconocimiento del hecho de que no todos los clientes pueden aceptar un conjunto de resultados de varias filas.

Después de eso, llamémoslo:
LLAMAR a my_proc(@a);

SELECCIONE @a; Para departamento solicitud interna

del externo, siempre utilizan un separador diferente al habitual (para especificar utilice el comando DELIMITER)

Aquí hay otro ejemplo teniendo en cuenta todos los requisitos.
Mysql> delimitador //
mysql> CREAR PROCEDIMIENTO simpleproc (OUT param1 INT)
-> COMENZAR
-> SELECCIONE CONTAR(*) EN param1 DE t;
-> //

->FIN;
mysql>delimitador;
mysql> CALL simpleproc(@a);
Consulta correcta, 0 filas afectadas (0,00 s)
+------+
mysql> SELECCIONAR @a;
+------+
| 3 |
+------+
| @a |

1 fila en conjunto (0,00 seg)

Todo el proceso se puede observar en la siguiente figura:

Desencadenantes

La compatibilidad con disparadores ha estado disponible en MySQL desde la versión 5.0.2.

Un disparador es un objeto de base de datos con nombre que está asociado con una tabla y se activa cuando ocurre un evento determinado, un evento asociado con esta tabla.

Por ejemplo, el siguiente código crea una tabla y un disparador INSERT. El disparador suma los valores insertados en una de las columnas de la tabla.
Mysql> CREATE TABLE cuenta (num_cuenta INT, cantidad DECIMAL(10,2));
mysql> CREAR DISPARADOR ins_sum ANTES DE INSERTAR EN la cuenta
-> PARA CADA FILA SET @sum = @sum + NEW.amount;
Consulta correcta, 0 filas afectadas (0,06 segundos)

Declaremos la variable suma y le asignaremos el valor 1. Después de eso, con cada inserción en la tabla de cuentas, el valor de esta variable aumentará según la parte insertada.

Nota. Si el valor de la variable no se inicializa, ¡el disparador no funcionará!

Sintaxis para crear un disparador

CREAR

TRIGGER nombre_disparador tiempo_disparador evento_disparador
EN nombre_tabla PARA CADA FILA expresión_ejecutada_cuando_trigger_fires

Si todo está claro de inmediato con el nombre del activador y el nombre de usuario, hablaremos de "tiempo de activación" y "evento" por separado.

tiempo_disparador

Define el momento en el que se produce la acción desencadenante. ANTES significa que el disparador se ejecutará antes de que se complete el evento desencadenante y DESPUÉS significa después. Por ejemplo, al insertar registros (ver ejemplo arriba), nuestro disparador se activó antes de la inserción real del registro y calculó la suma. Esta opción es apropiada para el cálculo preliminar de algunos campos adicionales en la tabla o para la inserción paralela en otra tabla.

evento_disparador

Aquí todo es más sencillo. Indica claramente en qué evento se ejecuta el disparador.

  • INSERTAR: es decir durante operaciones de inserción o expresiones similares (INSERT, LOAD DATA y REPLACE)
  • ACTUALIZACIÓN: cuando se modifica una entidad (fila)
  • ELIMINAR: Cuando se elimina un registro (consultas que contienen declaraciones ELIMINAR y/o REEMPLAZAR)



Arriba