SlideShare uma empresa Scribd logo
1 de 5
Baixar para ler offline
Tablas InnoDB


Tipos de tablas
                                       Creación de una tabla InnoDB
Aunque en los temas anteriores no
hemos hecho alusión a ello, MySQL        La creación de tablas tipo InnoDB requiere una de estas dos sentencias:
permite usar diferentes tipos de
tablas tales como:                      CREATE TABLE IF NOT EXISTS tabla (campo1, campo2,... ) Type=InnoDB

    s   ISAM
                                        CREATE TABLE tabla (campo1, campo2,... ) Type=InnoDB
        MyISAM
                                          Este script crear una tabla InnoDB con idénticos campos a los utilizados en el caso de la
    s

    s   InnoDB
                                       tabla demo4 con la que hemos venido trabajando hasta ahora. La sintaxis, muy similar a
                                       la utilizada allí es esta:
Las tablas ISAM son las de
formato más antiguo. Están
limitadas a tamaños que no              <?
superen los 4 gigas y no permite        $base="ejemplos";
copiar tablas entre máquinas con        $tabla="demoINNO";
distinto sistema operativo.             $c=mysql_connect ("localhost","pepe","pepa");
                                        mysql_select_db ($base, $c);
Las tablas MySAM son el resultado
de la evolución de las anteriores,
                                        $crear="CREATE TABLE $tabla (";
ya que resuelven el problema que
planteaban las anteriores y son el      $crear.="Contador TINYINT(8) UNSIGNED ZEROFILL NOT NULL
formato por defecto de MySQL a          AUTO_INCREMENT,";
partir de su versión 3.23.              $crear.="DNI CHAR(8) NOT NULL, ";
                                        $crear.="Nombre VARCHAR (20) NOT NULL, ";
Las tablas del tipo InnoDB tienen       $crear.="Apellido1 VARCHAR (15) not null, ";
una estructura distinta que             $crear.="Apellido2 VARCHAR (15) not null, ";
MyISAM, ya que utilizan un sólo         $crear.="Nacimiento DATE DEFAULT '1970-12-21', ";
archivo por tabla en ver de los
                                        $crear.="Hora TIME DEFAULT '00:00:00', ";
tres habituales en los tipos
                                        $crear.="Sexo Enum('M','F') DEFAULT 'M' not null, ";
anteriores.
                                        $crear.="Fumador CHAR(0) , ";
Incorporan un par de ventajas           $crear.="Idiomas SET(' Castellano',' Francés','Inglés',
importantes, ya que permiten                     ' Alemán',' Búlgaro',' Chino'), ";
realizar transacciones y definir        $crear.=" PRIMARY KEY(DNI), ";
reglas de integridad referencial.       $crear.=" UNIQUE auto (Contador)";
                                        $crear.=")";
Creación y uso de                       # esta es la única diferencia con el proceso de
tablas InnoDB                           # creación de tablas MyISAM
                                         $crear.=" Type=InnoDB";
La creación de tablas de este tipo
                                        if(mysql_query ($crear ,$c)) {
no presenta ninguna dificultad
                                        echo "<h2> Tabla $tabla creada con EXITO </h2><br>";
añadida. El proceso es idéntico a
las tablas habituales sin más que           }else{
añadir Type=InnoDB después de           echo "<h2> La tabla $tabla NO HA PODIDO CREARSE ";
cerrar el paréntesis de la sentencia    # echo mysql_error ($c)."<br>";
de creación de la tabla.                $numerror=mysql_errno ($c);
                                            if ($numerror==1050){echo "porque YA EXISTE</h2>";}
Una vez creadas, las tablas             };
InnoDB se comportan –a efectos                  mysql_close($c);
de uso– exactamente igual que las
                                        ?>
que hemos venido utilizando en las
páginas anteriores. No es preciso
hacer ningún tipo de modificación
en la sintaxis. Por tanto, es
                                                                                Crear tabla
totalmente válido todo lo ya                                                      InnoDB
comentado respecto a: altas,
modificaciones, consultas y bajas.

                                           ¡Cuidado!
Las transacciones
                                         Bajo Windows, al crear una base de datos o tabla InnoDB el nombre de la misma aparecerá
Uno de los riesgos que se plantean       en minúsculas independientemente de la sintaxis que hayamos utilizado en su creación.
en la gestión de bases de datos es
que pueda producirse una                 Si observas el ejemplo anterior, hemos puesto demoINNO como nombre de la tabla. Sin
interrupción del proceso mientras        embargo, si miras el directorio c:mysql verás que aparece el fichero demoinno.frm con
se está actualizando una o varias        minúsculas.
tablas. Pongamos como ejemplo el
cobro de nuestra nómina. Son
necesarias dos anotaciones
simultáneas: ll cargo en la cuenta     Las primeras transacciones
del Organismo pagador y el abono
en nuestra cuenta bancaria. Si se
interrumpiera fortuitamente el           <?
proceso en el intermedio de las         $base="ejemplos";
dos operaciones podría darse la         # escribimos el nombre de la tabla en MINUSCULAS
circunstancia de que apareciera         # para asegurar la compatibilidad entre plataformas
registrado el pago sin que se           $tabla="demoinno";
llegaran a anotar los haberes en        $conexion=mysql_connect("localhost","pepe","pepa");
nuestra cuenta.                         mysql_select_db ($base, $conexion);
                                        # insertamos la sentencia BEGIN para indicar el comienzo
Las transacciones evitan este tipo
de situaciones ya que los registros     # de una transacción
de los datos se registran de            mysql_query("BEGIN",$conexion);
manera provisional y no toman           /* hasta que no aparezca una sentencia que finalice la transacción
carácter definitivo hasta que una           (ROLLBACK ó COMMIT) las modificaciones en la tabla serán registradas
instrucción confirme que esas               de forma "provisional") */
anotaciones tienen carácter             mysql_query("INSERT $tabla (DNI,Nombre,Apellido1,Apellido2,
definitivo. Para ello, MySQL                              Nacimiento,Sexo,Hora,Fumador,Idiomas)
dispone de tres sentencias:                           VALUES
BEGIN, COMMIT y ROLLBACK.                                 ('111111','Alvaro','Alonso','Azcárate','1954-11-23',
'M','16:24:52',NULL,3)",$conexion);
Sintaxis de las                          if (mysql_errno($conexion)==0){
transacciones                                         echo "Registro AÑADIDO<br>";
                                               }else{
Existen tres sentencias para                      if (mysql_errno($conexion)==1062){
gestionar las transacciones. Son                               echo "No ha podido añadirse el registro <br>";
las siguientes:                                                echo "Ya existe un registro con este DNI<br>";
                                                            }else{
mysql_query("BEGIN",$c)                                        $numerror=mysql_errno($conexion);
Su ejecución requiere que este
                                                               $descrerror=mysql_error($conexion);
activa la conexión $c con el                                   echo "Se ha producido un error nº $numerror<br>";
servidor de base de datos e indica                             echo "<br>que corresponde a: $descrerror<br>";
a MySQL que comienza una                                }
transacción.                             }
                                         # indicamos el final de la transacción, en este caso con ROLLBACK
Todas las sentencias que se              # por lo tanto el registro con DNI 111111 no será insertado en la tabla
ejecuten a partir de ella tendrán        mysql_query("ROLLBACK",$conexion);
carácter provisional y no se
                                         # incluyamos una nueva transacción
ejecutarán de forma efectiva hasta
que encuentre una sentencia de
                                         mysql_query("BEGIN",$conexion);
finalización.                            mysql_query("INSERT $tabla (DNI,Nombre,Apellido1,Apellido2,
                                                           Nacimiento,Sexo,Hora,Fumador,Idiomas)
mysql_query("ROLLBACK",$c)                             VALUES
                                                           ('222222','Genoveva','Zarabozo','Zitrón','1964-01-14',
Mediante esta sentencia                                       'F','16:18:20',NULL,2)",$conexion);
advertimos a MySQL que finaliza la
                                         if (mysql_errno($conexion)==0){
transacción pero que no debe
                                                      echo "Registro AÑADIDO";
hacerse efectiva ninguna de las
modificaciones incluidas en ella.              }else{
                                                  if (mysql_errno($conexion)==1062){
mysql_query("COMMIT",$c)                                       echo "No ha podido añadirse el registro <br>";
                                                               echo "Ya existe un registro con este DNI";
Esta sentencia advierte a MySQL                             }else{
que ha finalizado la transacción y                             $numerror=mysql_errno($conexion);
que debe hacer efectivos todos
                                                               $descrerror=mysql_error($conexion);
los cambios incluidos en ella.
                                                               echo "Se ha producido un error nº $numerror";
                                                               echo "<br>que corresponde a: $descrerror";
Precauciones a tener en                                 }
cuenta                                   }
                                         # indicamos el final de la transacción, en este caso con COMMIT
Cuando se utilizan campos                # por lo tanto el registro con DNI 222222 si será insertado en la tabla
autoincrementales en tablas              mysql_query("COMMIT",$conexion);
InnoDB los contadores se van             # leamos el contenido de la tabla para ver el resultado
incrementando al añadir registros        $resultado= mysql_query("SELECT * FROM $tabla" ,$conexion);
(incluso de forma provisional) con       print "<br>Lectura de la tabla depués del commit<br>";
lo cual si se aborta la inclusión con    while ($registro = mysql_fetch_row($resultado)){
un ROLLBACK ese contador                        foreach($registro as $clave){
mantiene el incremento y en
                                                     echo $clave,"<br>";
inserciones posteriores partirá de
                                                }
ese valor acumulado.
                                         }
Por ejemplo. Si partimos de una          mysql_close();
tabla vacía y hacemos una                ?>
transacción de dos registros
(número 1 y número 2 en el
campo autoincremental) y la
finalizamos con ROLLBACK, no se                                          Ejecutar el ejemplo
insertarán pero en una inserción
posterior el contador                   Integridad referencial en tablas InnoDB
autoincremental comenzará a
partir del valor 2.
                                           Cuando se trabaja con varias tablas que tienen algún tipo de vínculo resulta interesante
MySQL anuncia que a partir de la        disponer de mecanismos que protejan o impidan acciones no deseadas. Supongamos,
versión 5.0.3 se incluirá una nueva     como veremos en los ejemplos posteriores que pretendemos utilizar una tabla con datos de
sentencia para permitir que se          alumnos y otra tabla distinta para las calificaciones de esos alumnos. Si no tomamos
puedan renumerar los campos             ninguna precaución (bien sea mediante los script o mediante el diseño de las tablas) podría
autoincrementales.                      darse la circunstancia de que incluyéramos calificaciones a alumnos inexistentes, en
                                        materias de las que no están matriculados, etcétera. También podría darse la circunstancia
Elementos necesarios                    de que diéramos de baja a un alumno pero que se mantuvieran las calificaciones
para la integridad                      vinculadas a él. Todas estas circunstancias suelen producir efectos indeseados y las tablas
                                        InnoDB pueden ser diseñadas para prever este tipo de situaciones.
referencial
                                        Sintaxis para la vinculación de tablas
La integridad referencial ha de
establecerse siempre entre dos
                                 Los vínculos entre tablas suelen establecer en el momento de la creación de la tabla
tablas. Una de ellas ha de
                                 vinculada.
comportarse como tabla principal
(suele llamarse tabla padre y la
otra sería la tabla vinculada ó  CREATE TABLE tabla (campo1, campo2,...
tabla hijo.                            KEY nombre (campo de vinculacion ),
                                             FOREIGN KEY (campo de vinculacion)
Es imprescindible:                           REFERENCES nombre_de la tabla principal (Indice primario de la tabla principal)
                                        ) Type=InnoDB
     s   Que la tabla principal
         tenga un índice primario       donde el campo de vinculacion ha de ser un índice (no es necesario que sea PRIMARY KEY
         (PRIMARY KEY)                  ni UNIQUE) y donde Indice primario de la tabla principal ha de ser un índice primario
     s   Que la tabla vinculada         (PRIMARY KEY) de la tabla principal. Debe haber plena coincidencia (tanto en tipos como
         tenga un índice (no es         contenidos) entre ambos índices.
         necesario que sea ni único
         ni primario) asociado a
         campos de tipo idéntico a       <?
         los que se usen para índice     $base="ejemplos";
         de la tabla principal.          $tabla1="principal";
                                         $tabla2="vinculada";
Si observas el código fuente del         $c=mysql_connect ("localhost","pepe","pepa");
ejemplo que tienes a la derecha          mysql_select_db ($base, $c);
podrás observar que utilizamos el        # creación de la tabla principal type InnoDB
número del DNI (único para              $crear="CREATE TABLE IF NOT EXISTS $tabla1 (";
alumno) como elemento de                $crear.="DNI CHAR(8) NOT NULL, ";
vinculación de la tabla de datos
                                        $crear.="Nombre VARCHAR (20) NOT NULL, ";
personales con la que incluye las
                                        $crear.="Apellido1 VARCHAR (15) not null, ";
direcciones.
                                        $crear.="Apellido2 VARCHAR (15) not null, ";
                                        # el indice primario es imprescindible. Recuerda que debe
Borrado de tablas                       # estar definido sobre campos NO NULOS
vinculadas                              $crear.=" PRIMARY KEY(DNI) ";
                                        $crear.=")";
Si pretendemos eliminar una tabla       $crear.=" Type=InnoDB";
principal recibiremos un mensaje        # creamos la tabla principal comprobando el resultado
de error tal como puedes ver si         if(@mysql_query ($crear ,$c)){
ejecutas este ejemplo cuyo código               print "La tabla ".$tabla1." ha sido creada<br>";
fuente tienes aquí. cómo es lógico,     }else{
antes de ejecutarlo habrás de                   print "No se ha creado ".$tabla1." ha habido un error<br>";
tener creada la tabla cuyo código       }
fuente tienes a la derecha.             # crearemos la tabla vinculada
                                        $crear="CREATE TABLE IF NOT EXISTS $tabla2 (";
Las tablas vinculadas si permiten
                                        $crear.="IDENTIDAD CHAR(8) NOT NULL, ";
el borrado y una vez que éstas ya
han sido eliminadas (o quitada la       $crear.="calle VARCHAR (20), ";
vinculación) ya podrán borrarse sin     $crear.="poblacion VARCHAR (20), ";
problemas las tablas principales. Si    $crear.="distrito VARCHAR(5), ";
ejecutas este ejemplo podrás            # creamos el índice (lo llamamos asociador) para la vinculación
observar que borramos ambas             # en este caso no será ni primario ni único
tablas siguiendo el orden que           # Observa que el campo IDENTIDAD de esta tabla CHAR(8)
permite hacerlo. Primero se borra       # es idéntico al campo DNI de la tabla principal
la vinculada y luego la principal.      $crear.=" KEY asociador(IDENTIDAD), ";
Este es el código fuente del script.    #establecemos la vinculación de ambos índices
                                        $crear.=" FOREIGN KEY (IDENTIDAD) REFERENCES $tabla1(DNI) ";
    ¡Cuidado!                           $crear.=") TYPE = INNODB";
                                        # creamos (y comprobamos la creación) la tabla vinculada
  Si has borrado las tablas con         if(@mysql_query ($crear ,$c)){
  los ejemplos anteriores no                    print "La tabla ".$tabla2." ha sido creada<br>";
  olvides crearlas de nuevo             }else{
  para poder visualizar los                     print "No se ha creado ".$tabla2." ha habido un error<br>";
  ejemplos siguientes.                  }
                                        mysql_close();
                                        ?>
Modificación o borrado de
campos vinculados
                                                                        Crear tablas vinculadas
Las sentencias MySQL que deban
modificar o eliminar campos            Modificación de estructuras
utilizados para establecer vínculos
entre tablas requieren de un              La modificación de estructuras en tablas vinculadas puede hacerse de forma idéntica a
parámetro especial (CONSTRAINT)        la estudiada para los casos generales de MySQL siempre que esas modificaciones no
-puede ser distinto en cada una de     afecten a los campos mediante los que se establecen las vinculaciones entre
las tablas- que es necesario
                                       tablas.
conocer previamente.

La forma de visualizarlo es            Aquí tienes un ejemplo en se borran y añaden campos en ambas tablas. Como puedes ver
ejecutar la sentencia: SHOW            la sintaxis es exactamente la misma que utilizamos en temas anteriores.
CREATE TABLE nombre tabla que
devuelve como resultado un array        <?
asociativo con dos índices. Uno de      $base="ejemplos";
ellos -llamado Table- que contiene
                                        $tabla="principal";
el nombre de la tabla y el otro -
Create Table- que contiene la
                                        $tabla1="vinculada";
estructura con la que ha sido           $c=mysql_connect ("localhost","pepe","pepa");
creada la tabla pero incluyendo el      mysql_select_db ($base, $c);
parámetro CONSTRAINT seguido
de su valor. Ese valor es               if(mysql_query("ALTER     TABLE $tabla ADD Segundo_Apellido VARCHAR(40)",$c)){
precisamente el que necesitamos                 print "Sea ha     creado el nuevo campo en ".$tabla."<br>";
para hacer modificaciones en los                }
campos asociados de las tablas          if(mysql_query("ALTER     TABLE $tabla DROP Apellido2",$c)){
vinculadas.                                     print "Sea ha     borrado el campo Apellido 2 en ".$tabla."<br>";
Pulsando en este enlace cuyo
                                                }
código fuente tienes aquí podrás
                                        if(mysql_query("ALTER     TABLE $tabla1 ADD DP VARCHAR(5)",$c)){
visualizar el resultado de la
                                                print "Sea ha     creado el nuevo campo en ".$tabla1."<br>";
ejecución de esa sentencia.
                                                }
Conocido el valor de parámetro          if(mysql_query("ALTER     TABLE $tabla1 DROP distrito",$c)){
anterior el proceso de borrado del              print "Sea ha     borrado el campo distrito en ".$tabla1."<br>";
vínculo actual requiere la siguiente            }
sintaxis:
                                        mysql_close();
ALTER TABLE nombre de la tabla
                                        ?>
DROP FOREIGN KEY parametro

Cuando se trata de añadir un
nuevo vínculo con una tabla
                                                                        ejecutar el ejemplo
principal habremos de utilizar la
siguiente sentencia:                     En este otro ejemplo determinaremos el valor de CONSTRAINT y modificaremos campos
                                       asociados de la tabla vinculada.
ALTER TABLE nombre de la tabla
ADD [CONSTRAINT parametro]
FOREIGN KEY parametro                   <?
REFERENCES tabla principal(clave        $base="ejemplos";
primaria)                               $tabla="vinculada";
                                        $tabla1="principal";
El parámetro CONSTRAIT                  $c=mysql_connect ("localhost","pepe","pepa");
(encerrado en corchetes en el           mysql_select_db ($base, $c);
párrafo anterior) es OPCIONAL y
                                        $resultado=mysql_query( "SHOW CREATE TABLE $tabla",$c);
solo habría de utilzarse en el caso
de que existiera ya una vinculación
                                        $v=mysql_fetch_array($resultado);
previa de esa tabla.                    # extreamos de Create Table la cadena que empiza por CONSTRAINT
# y que acaba por FOREING KEY lo guardamos en el array $coin
                                        preg_match ('/CONSTRAINT.*FOREIGN KEY/', $v['Create Table'], $coin);
La función preg_match                   # extraemos el parametro quitando el CONSTRAINT que lleva delante
                                        # y el FOREIGN KEY que lleva al final
En el ejemplo de la derecha
                                        $para=str_replace("FOREIGN KEY",'',str_replace("CONSTRAINT",'',$coin
utilizamos esta función cuya            [0]));
sintaxis es la siguiente:               print "El valor de CONSTRAINT es: ".$para."<br>";
preg_match( pat, cad, coin )            # eliminamos el vinculo con la clave externa incluyendo en la sentancia
                                        # el valor del parametro obtenido el proceso anterior
donde pat es un patrón de               if(mysql_query("ALTER TABLE $tabla DROP FOREIGN KEY $para",$c)){
búsqueda, cad es la cadena que la           print "Se ha realizado con éxito el borrado del vínculo<br>";
han de realizarse las búsquedas y       }
coin es un arroay que recoge
                                        # añadimos el nuevo vínculo (en este caso rehacemos el anterior
todas las coincidencias
                                        # pero el proceso es idéntico)
encontradas en la cadena.
                                        if(mysql_query("ALTER TABLE $tabla ADD CONSTRAINT $para
El patrón de búsqueda que hemos                           FOREIGN KEY(IDENTIDAD) REFERENCES $tabla1(DNI)",$c)){
utilizado en el ejemplo                   print "Se ha reestablecido con éxito vínculo<br>";
/CONSTRAINT.*FOREIGN KEY/               }
debe interpretarse de la siguiente
forma. Los caracteres / indican el      mysql_close();
comienzo y el final del patrón, el .    ?>
indica que entre CONSTRAIT y
FOREING se permite cualquer
carácter para admitir la                                                  ejecutar el ejemplo
coincidencia y, además, * indica
que ese caracter cualquier puede
repetirse cero o más veces.            Añadir registros a la tabla vinculada
    ¡Cuidado!                             Si ejecutas este ejemplo habiendo seguido la secuencia de estos materiales verás que
                                       se produce un error nº 1216. Es lógico que así sea porque estamos intentando añadir un
   Es posible que el script de la      registro a la tabla vinculada y ello requeriría que en el campo DNI de la tabla principal
   derecha te de un error como         existiera un registro con un valor igual al que pretendemos introducir en la tabla vinculada.
   consecuencia de que hemos
   podido modificar campos en                                                          Insertar en tabla
                                                             Ver script
   los ejemplos anteriores. Si                                                         vinculada
   eso ocurre, borra aquí las
   tablas y genéralas de nuevo           Añadiremos un registro a la tabla principal con el DNI anterior:
   pulsando aquí.
                                                                                       Insertar en tabla
                                                             Ver script
                                                                                       principal
    ¡Cuidado!
                                       y ahora ya podremos ejecutar -sin errores- el script que inserta datos en la tabla
   Los resultados que obtengas         vinculada. Podremos ejecutar aquel script tantas veces como queramos ya que -el campo
   el ejecutar los ejemplos de         IDENTIDAD está definido como KEY y por tanto permite duplicados- no hemos establecido
   borrado y modificación de           la condición de índice PRIMARIO ó UNICO.
   datos pueden arrojar
   resultados distintos según los      Borrar o modificar registros en la tabla principal
   contenidos de las tablas que,
   a su vez, serán                        Sin intentamos borrar un registro de la tabla principal mediante un script como el que
   consecuencia de los                 tienes en este ejemplo verás que se produce un error nº 1217 advirtiéndonos de que no
   ejemplos que hayas                  se realiza el borrado porque existen registros en la tabla vinculada con valores asociados al
   ejecutado anteriormente y de        índice del campo que pretendemos borrar y, de permitir hacerlo, se rompería la integridad
   la secuencia de los mismos.         referencial ya que quedarían registros huérfanos en la tabla vinculada.
   Siempre puedes volver a las
   condiciones iniciales de los                                                        Borrar en tabla
                                                             Ver script
   enlaces de la advertencia                                                           principal
   anterior.
                                          Sin tratamos de modificar un registro de la tabla principal y la modificación afecta al
                                       índice que realiza la asociación con la tabla (o tablas) vinculadas se produciría -por las
Opciones adicionaes de                 mismas razones y en las mismas circunstancias- un error nº 1217 que impediría la
FOREIGN KEY                            modificación.
                                                                                        Modificar DNI en tabla
                                                             Ver script
La claúsula FOREIGN KEY permite                                                         principal
añadirte -detrás de la definición ya
comentada y sin poner coma
                                          Si -al tratar de borrar o modificar un registro de la tabla principal– no existieran en la
separándola de ella- los
parámetros ON DELETE y ON              tabla (o tablas vinculadas) registros asociados con él, el proceso de modificación se
UPDATE en las que se permite           realizaría sin ningún problema y sin dar ningún mensaje de error o advertencia.
especificar una de las siguientes
opciones:                              Automatización de procesos
ON DELETE RESTRICT                     Creamos dos tablas idénticas a las anteriores incluyendo algunos datos en ellas.
Esta condición (es la condición por
defecto de MySQL y no es preciso
escribirla) indica a MySQL que          <?
interrumpa el proeceso de               $base="ejemplos";
borrado y de un mensaje de error        $tabla1="principal1";
cuando se intente borrar un             $tabla2="vinculada1";
registro de la tabla principal          $c=mysql_connect ("localhost","pepe","pepa");
cuando en la tabla vinculada            mysql_select_db ($base, $c);
existan registros asociados al valor    # creación de la tabla principal type InnoDB
que se pretende borrar.                 $crear="CREATE TABLE IF NOT EXISTS $tabla1 (";
ON DELETE NO ACTION                     $crear.="DNI CHAR(8) NOT NULL, ";
Es un sinónimo de la anterior.          $crear.="Nombre VARCHAR (20) NOT NULL, ";
                                        $crear.="Apellido1 VARCHAR (15) not null, ";
ON DELETE CASCADE                       $crear.="Apellido2 VARCHAR (15) not null, ";
Cuando se especifica esta opción,       $crear.=" PRIMARY KEY(DNI) ";
al borrar un registro de la tabla       $crear.=")";
principal se borrarán de forma          $crear.=" Type=InnoDB";
automática todos los de la tabla
                                        # creamos la tabla principal comprobando el resultado
vinculada que estuvieran asociados
al valor de la clave foránea que se
                                        if(@mysql_query ($crear ,$c)){
trata de borrar. Con ello se                    print "La tabla ".$tabla1." ha sido creada<br>";
conseguiría una actualización            }else{
automática de la segunda tabla y                  print "No se ha creado ".$tabla1." ha habido un error<br>";
se mantendría la identidad
                                         }
referencial.
                                         # crearemos la tabla vinculada
ON DELETE SET NULL                       $crear="CREATE TABLE IF NOT EXISTS $tabla2 (";
Con esta opción, al borrar el            $crear.="IDENTIDAD CHAR(8) NOT NULL, ";
registro de la tabla principal no se     $crear.="calle VARCHAR (20), ";
borrarían los que tuviera                $crear.="poblacion VARCHAR (20), ";
asociados la tabla secundaria pero       $crear.="distrito VARCHAR(5), ";
tomarían valor NULL todos los            #creamos la tabla vinculada las opciones de DELETE y UPDATE
índices de ella coincidentes con la      $crear.=" KEY asociador(IDENTIDAD), ";
clave primaria de la tabla principal.
                                         #establecemos la vinculación de ambos índices
Para el caso de ON UPDATE las            $crear.=" FOREIGN KEY (IDENTIDAD) REFERENCES $tabla1(DNI) ";
opciones son estas:                      $crear.=" ON DELETE CASCADE ";
                                         $crear.=" ON UPDATE CASCADE ";
ON UPDATE RESTRICT                       $crear.=") TYPE = INNODB";
ON UPDATE CASCADE                        # creamos (y comprobamos la creación) la tabla vinculada
ON UPDATE SET NULL                       if(@mysql_query ($crear ,$c)){
Su comportamiento es idéntico a
                                                  print "La tabla ".$tabla2." ha sido creada<br>";
sus homónimas del caso anterior.         }else{
                                                  print "No se ha creado ".$tabla2." ha habido un error<br>";
    ¡Cuidado!                            }
                                         # añadimos registros a la tabla principa1
   El uso de la opción SET               mysql_query("INSERT $tabla1 (DNI,Nombre,Apellido1,Apellido2)
   NULL requiere que el campo                             VALUES ('111111','Robustiano','Iglesias','Pérez')",$c);
   indicado en FOREIGN KEY               mysql_query("INSERT $tabla1 (DNI,Nombre,Apellido1,Apellido2)
   esté permita valores nulos. Si                         VALUES ('222222','Ambrosio','Morales','Gómez')",$c);
   está definido con flag NOT            # añadimos registros a la tabla vinculada1
   NULL (como ocurre en los              mysql_query("INSERT $tabla2 (IDENTIDAD,calle,poblacion,distrito)
   ejemplos que tienes al                                 VALUES ('111111','Calle Asturias,3','Oviedo','33001')",
   margen) daría un mensaje de           $c);
   error.                                mysql_query("INSERT $tabla2 (IDENTIDAD,calle,poblacion,distrito)
                                                VALUES ('111111','Calle Palencia,3','Logroño','78541')",$c);
                                         mysql_query("INSERT $tabla2 (IDENTIDAD,calle,poblacion,distrito)
    ¡Cuidado!                                   VALUES ('222222','Calle Anunciación,3','Algeciras','21541')",$c);
                                         mysql_close();
   Al incluir ON DELETE y ON             ?>
   UPTADE (si se incluyen
   ambas) han de hacerse por                                               Ver contenidos de
   este mismo orden.                            Crear tablas y datos                                  Ver codigo fuente
                                                                           tablas
   Si se cambiara este orden
   daría un mensaje de error y
   no se ejecutarían.                   Modificar registros en cascada

                                         <?
                                         $base="ejemplos";
                                         $tabla="principal1";
                                         $conexion=mysql_connect("localhost","pepe","pepa");
                                         mysql_select_db($base,$conexion);
                                         # modificamos un registro
                                         mysql_query("UPDATE $tabla SET DNI='123456' WHERE DNI='111111'",
                                         $conexion);
                                         # borramos un registro
                                         mysql_query("DELETE FROM $tabla WHERE (DNI='222222')",$conexion);
                                         if (mysql_errno($conexion)==0){echo "<h2>Tablas actualizadas</b></H2>";
                                                       }else{
                                                   print "Ha habido un error al actualizar";
                                                 }
                                         mysql_close();
                                         ?>


                                                                                          Ver contenido de la
                                                               Actualizar en cascada
                                                                                          tabla

                                           Para que puedas retornar a las condiciones iniciales, desde este enlace podrás borrar las
                                        tablas creadas para actualización en cascada. De esta forma podrás volver a crearlas,
                                        cuando desees, en las condiciones iniciales.

                                                    Anterior                           Indice                      Siguiente

Mais conteúdo relacionado

Mais procurados

Primitive Obsession. FrontFest 2020
Primitive Obsession. FrontFest 2020Primitive Obsession. FrontFest 2020
Primitive Obsession. FrontFest 2020Aida Albarrán
 
Conexión a postgres desde
Conexión a postgres desdeConexión a postgres desde
Conexión a postgres desdejbersosa
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slidemarieuri
 
Instrucciones basicas de mySQL
Instrucciones basicas de mySQLInstrucciones basicas de mySQL
Instrucciones basicas de mySQLchapagarciaea
 
Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Javier López
 
Comandos sql fundamentos de bases de datos
Comandos sql fundamentos de bases de datosComandos sql fundamentos de bases de datos
Comandos sql fundamentos de bases de datosfeliperuiz1210
 
Proyecto de Base de Datos (Parte II)
Proyecto de Base de Datos (Parte II)Proyecto de Base de Datos (Parte II)
Proyecto de Base de Datos (Parte II)Anna Vega
 
Guía práctica desarrollo web con php 5 y my sql
Guía práctica desarrollo web con php 5 y my sqlGuía práctica desarrollo web con php 5 y my sql
Guía práctica desarrollo web con php 5 y my sqlJesus Machicado Gomez
 
Tutorial 9 consultar, modificar, insertar y borrar con asp
Tutorial 9   consultar, modificar, insertar y borrar con aspTutorial 9   consultar, modificar, insertar y borrar con asp
Tutorial 9 consultar, modificar, insertar y borrar con aspSoftHard Tech.
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
Wp config.php
Wp config.phpWp config.php
Wp config.phpgregozz
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Jose Luis Orosco Marcos
 
Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosjubacalo
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencapaulcuenca9
 

Mais procurados (20)

Primitive Obsession. FrontFest 2020
Primitive Obsession. FrontFest 2020Primitive Obsession. FrontFest 2020
Primitive Obsession. FrontFest 2020
 
Conexión a postgres desde
Conexión a postgres desdeConexión a postgres desde
Conexión a postgres desde
 
Clase 15
Clase 15Clase 15
Clase 15
 
PHP - MYSQL
PHP - MYSQLPHP - MYSQL
PHP - MYSQL
 
Ajax
AjaxAjax
Ajax
 
Salud, Noticias Y Articulos | Vida Saludable
Salud, Noticias Y Articulos | Vida SaludableSalud, Noticias Y Articulos | Vida Saludable
Salud, Noticias Y Articulos | Vida Saludable
 
Codigo tarea deposito
Codigo tarea depositoCodigo tarea deposito
Codigo tarea deposito
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slide
 
Instrucciones basicas de mySQL
Instrucciones basicas de mySQLInstrucciones basicas de mySQL
Instrucciones basicas de mySQL
 
Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2
 
Comandos sql fundamentos de bases de datos
Comandos sql fundamentos de bases de datosComandos sql fundamentos de bases de datos
Comandos sql fundamentos de bases de datos
 
Proyecto de Base de Datos (Parte II)
Proyecto de Base de Datos (Parte II)Proyecto de Base de Datos (Parte II)
Proyecto de Base de Datos (Parte II)
 
Guía práctica desarrollo web con php 5 y my sql
Guía práctica desarrollo web con php 5 y my sqlGuía práctica desarrollo web con php 5 y my sql
Guía práctica desarrollo web con php 5 y my sql
 
Tutorial 9 consultar, modificar, insertar y borrar con asp
Tutorial 9   consultar, modificar, insertar y borrar con aspTutorial 9   consultar, modificar, insertar y borrar con asp
Tutorial 9 consultar, modificar, insertar y borrar con asp
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Wp config.php
Wp config.phpWp config.php
Wp config.php
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1
 
Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viveros
 
Manual de programador sistema experto bovino online
Manual de programador   sistema experto bovino onlineManual de programador   sistema experto bovino online
Manual de programador sistema experto bovino online
 
Informe grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuencaInforme grupal f_arinango_ cuenca
Informe grupal f_arinango_ cuenca
 

Destaque

Wikis, curs
Wikis, cursWikis, curs
Wikis, cursNelosan
 
listado de premios concurso 2009
listado de premios concurso 2009listado de premios concurso 2009
listado de premios concurso 2009guestfbe093
 
El Venezolano Cómodo En Caso De Sismos O Terremotos
El Venezolano Cómodo En Caso De Sismos O TerremotosEl Venezolano Cómodo En Caso De Sismos O Terremotos
El Venezolano Cómodo En Caso De Sismos O TerremotosELVENEZOLANOCOMODO
 
11 Joomla. Mantenimiento Del Espacio Web
11 Joomla. Mantenimiento Del Espacio Web11 Joomla. Mantenimiento Del Espacio Web
11 Joomla. Mantenimiento Del Espacio WebJosé M. Padilla
 
No a la violencia de género Pto Madryn
No a la violencia de género Pto MadrynNo a la violencia de género Pto Madryn
No a la violencia de género Pto Madrynguest44b93262
 
85 Php. Consultas En Tablas
85 Php. Consultas En Tablas85 Php. Consultas En Tablas
85 Php. Consultas En TablasJosé M. Padilla
 
Soccer street
Soccer streetSoccer street
Soccer streetjeychess
 
PresentacióN 2 Enfoque TeóRico
PresentacióN 2 Enfoque TeóRicoPresentacióN 2 Enfoque TeóRico
PresentacióN 2 Enfoque TeóRicoHome
 
01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros Pasos
01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros Pasos01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros Pasos
01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros PasosJosé M. Padilla
 
08 Dibujo Vectorial Con Draw. Los Nodos
08 Dibujo Vectorial Con Draw. Los Nodos08 Dibujo Vectorial Con Draw. Los Nodos
08 Dibujo Vectorial Con Draw. Los NodosJosé M. Padilla
 
Presentació Dempresa Sector Vi
Presentació Dempresa Sector ViPresentació Dempresa Sector Vi
Presentació Dempresa Sector ViParenthesis
 
Historia compacta de flash
Historia compacta de flashHistoria compacta de flash
Historia compacta de flashMario Zambrano
 
Presentació Dempresa Sector Vi
Presentació Dempresa Sector ViPresentació Dempresa Sector Vi
Presentació Dempresa Sector ViParenthesis
 
Expo Herramientas Digitales (Audio,Imagenes Y Videos )
Expo Herramientas Digitales (Audio,Imagenes  Y Videos )Expo Herramientas Digitales (Audio,Imagenes  Y Videos )
Expo Herramientas Digitales (Audio,Imagenes Y Videos )guest4b4616
 

Destaque (20)

Wikis, curs
Wikis, cursWikis, curs
Wikis, curs
 
listado de premios concurso 2009
listado de premios concurso 2009listado de premios concurso 2009
listado de premios concurso 2009
 
El Venezolano Cómodo En Caso De Sismos O Terremotos
El Venezolano Cómodo En Caso De Sismos O TerremotosEl Venezolano Cómodo En Caso De Sismos O Terremotos
El Venezolano Cómodo En Caso De Sismos O Terremotos
 
11 Joomla. Mantenimiento Del Espacio Web
11 Joomla. Mantenimiento Del Espacio Web11 Joomla. Mantenimiento Del Espacio Web
11 Joomla. Mantenimiento Del Espacio Web
 
Mi Casa
Mi CasaMi Casa
Mi Casa
 
No a la violencia de género Pto Madryn
No a la violencia de género Pto MadrynNo a la violencia de género Pto Madryn
No a la violencia de género Pto Madryn
 
85 Php. Consultas En Tablas
85 Php. Consultas En Tablas85 Php. Consultas En Tablas
85 Php. Consultas En Tablas
 
Soccer street
Soccer streetSoccer street
Soccer street
 
Da 6570 Tpi 2009 2
Da 6570 Tpi 2009 2Da 6570 Tpi 2009 2
Da 6570 Tpi 2009 2
 
PresentacióN 2 Enfoque TeóRico
PresentacióN 2 Enfoque TeóRicoPresentacióN 2 Enfoque TeóRico
PresentacióN 2 Enfoque TeóRico
 
Introduccion a AJAX
Introduccion a AJAXIntroduccion a AJAX
Introduccion a AJAX
 
01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros Pasos
01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros Pasos01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros Pasos
01. Iniciacion A La Informatica. Los Elementos BáSicos Y Primeros Pasos
 
08 Dibujo Vectorial Con Draw. Los Nodos
08 Dibujo Vectorial Con Draw. Los Nodos08 Dibujo Vectorial Con Draw. Los Nodos
08 Dibujo Vectorial Con Draw. Los Nodos
 
Collares
CollaresCollares
Collares
 
Presentació Dempresa Sector Vi
Presentació Dempresa Sector ViPresentació Dempresa Sector Vi
Presentació Dempresa Sector Vi
 
Mi Fin De Semana
Mi  Fin De SemanaMi  Fin De Semana
Mi Fin De Semana
 
Historia compacta de flash
Historia compacta de flashHistoria compacta de flash
Historia compacta de flash
 
Euclides
EuclidesEuclides
Euclides
 
Presentació Dempresa Sector Vi
Presentació Dempresa Sector ViPresentació Dempresa Sector Vi
Presentació Dempresa Sector Vi
 
Expo Herramientas Digitales (Audio,Imagenes Y Videos )
Expo Herramientas Digitales (Audio,Imagenes  Y Videos )Expo Herramientas Digitales (Audio,Imagenes  Y Videos )
Expo Herramientas Digitales (Audio,Imagenes Y Videos )
 

Semelhante a 89 Php. Tablas Inno Db

Semelhante a 89 Php. Tablas Inno Db (20)

Base de datos dinamicas
Base de datos dinamicasBase de datos dinamicas
Base de datos dinamicas
 
90 Php. Otras Consultas
90 Php. Otras Consultas90 Php. Otras Consultas
90 Php. Otras Consultas
 
81 Php. Creacion De Tablas
81 Php. Creacion De Tablas81 Php. Creacion De Tablas
81 Php. Creacion De Tablas
 
Sentencias create
Sentencias createSentencias create
Sentencias create
 
ManualPracticoSQL.pdf
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdf
 
Manual practico para sql ingieneria de sistemas
Manual practico para sql ingieneria de sistemas  Manual practico para sql ingieneria de sistemas
Manual practico para sql ingieneria de sistemas
 
Manual practico SQL
Manual practico SQLManual practico SQL
Manual practico SQL
 
Manual practicosql
Manual practicosqlManual practicosql
Manual practicosql
 
Manual practico SQL
Manual practico SQLManual practico SQL
Manual practico SQL
 
Manual practico-sql
Manual practico-sqlManual practico-sql
Manual practico-sql
 
Expo Conexion Mysql.pptx
Expo Conexion Mysql.pptxExpo Conexion Mysql.pptx
Expo Conexion Mysql.pptx
 
Conexion Entre Php Y Mysqul
Conexion Entre Php Y MysqulConexion Entre Php Y Mysqul
Conexion Entre Php Y Mysqul
 
Sql desde cero
Sql desde ceroSql desde cero
Sql desde cero
 
Comandos ddl
Comandos ddlComandos ddl
Comandos ddl
 
Curso my sql
Curso my sqlCurso my sql
Curso my sql
 
Clic de banners
Clic de bannersClic de banners
Clic de banners
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
 
Dfuncionocumento
DfuncionocumentoDfuncionocumento
Dfuncionocumento
 
MANUAL
MANUALMANUAL
MANUAL
 
Mysql
MysqlMysql
Mysql
 

Mais de José M. Padilla

Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERTInforme Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERTJosé M. Padilla
 
Manual multimedia y web 2.0
Manual multimedia y web 2.0Manual multimedia y web 2.0
Manual multimedia y web 2.0José M. Padilla
 
Guia optimizacion motores_busqueda
Guia optimizacion motores_busquedaGuia optimizacion motores_busqueda
Guia optimizacion motores_busquedaJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004José M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody AssistantModulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody AssistantJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke PlayerModulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke PlayerJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower AmpModulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower AmpJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track StudioModulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track StudioJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. AudacityModulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. AudacityJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One PlayerModulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One PlayerJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C DexModulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C DexJosé M. Padilla
 
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema OperativoModulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema OperativoJosé M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 AlmacenamientoModulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 AlmacenamientoJosé M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El AudioModulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El AudioJosé M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El MidiModulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El MidiJosé M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. EdicionModulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. EdicionJosé M. Padilla
 
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su RepresentacionModulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su RepresentacionJosé M. Padilla
 
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.José M. Padilla
 
00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.José M. Padilla
 
00 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 2000 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 20José M. Padilla
 

Mais de José M. Padilla (20)

Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERTInforme Riesgos y amenazas en cloud computing. INTECTO-CERT
Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
 
Manual multimedia y web 2.0
Manual multimedia y web 2.0Manual multimedia y web 2.0
Manual multimedia y web 2.0
 
Guia optimizacion motores_busqueda
Guia optimizacion motores_busquedaGuia optimizacion motores_busqueda
Guia optimizacion motores_busqueda
 
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
 
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody AssistantModulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
 
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke PlayerModulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
 
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower AmpModulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
 
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track StudioModulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
 
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. AudacityModulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
 
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One PlayerModulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
 
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C DexModulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
 
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema OperativoModulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
 
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 AlmacenamientoModulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
 
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El AudioModulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
 
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El MidiModulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
 
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. EdicionModulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
 
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su RepresentacionModulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
 
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
 
00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Guia del alumno.
 
00 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 2000 Sonido y musica por ordenador. Caso 20
00 Sonido y musica por ordenador. Caso 20
 

Último

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 

Último (15)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 

89 Php. Tablas Inno Db

  • 1. Tablas InnoDB Tipos de tablas Creación de una tabla InnoDB Aunque en los temas anteriores no hemos hecho alusión a ello, MySQL La creación de tablas tipo InnoDB requiere una de estas dos sentencias: permite usar diferentes tipos de tablas tales como: CREATE TABLE IF NOT EXISTS tabla (campo1, campo2,... ) Type=InnoDB s ISAM CREATE TABLE tabla (campo1, campo2,... ) Type=InnoDB MyISAM Este script crear una tabla InnoDB con idénticos campos a los utilizados en el caso de la s s InnoDB tabla demo4 con la que hemos venido trabajando hasta ahora. La sintaxis, muy similar a la utilizada allí es esta: Las tablas ISAM son las de formato más antiguo. Están limitadas a tamaños que no <? superen los 4 gigas y no permite $base="ejemplos"; copiar tablas entre máquinas con $tabla="demoINNO"; distinto sistema operativo. $c=mysql_connect ("localhost","pepe","pepa"); mysql_select_db ($base, $c); Las tablas MySAM son el resultado de la evolución de las anteriores, $crear="CREATE TABLE $tabla ("; ya que resuelven el problema que planteaban las anteriores y son el $crear.="Contador TINYINT(8) UNSIGNED ZEROFILL NOT NULL formato por defecto de MySQL a AUTO_INCREMENT,"; partir de su versión 3.23. $crear.="DNI CHAR(8) NOT NULL, "; $crear.="Nombre VARCHAR (20) NOT NULL, "; Las tablas del tipo InnoDB tienen $crear.="Apellido1 VARCHAR (15) not null, "; una estructura distinta que $crear.="Apellido2 VARCHAR (15) not null, "; MyISAM, ya que utilizan un sólo $crear.="Nacimiento DATE DEFAULT '1970-12-21', "; archivo por tabla en ver de los $crear.="Hora TIME DEFAULT '00:00:00', "; tres habituales en los tipos $crear.="Sexo Enum('M','F') DEFAULT 'M' not null, "; anteriores. $crear.="Fumador CHAR(0) , "; Incorporan un par de ventajas $crear.="Idiomas SET(' Castellano',' Francés','Inglés', importantes, ya que permiten ' Alemán',' Búlgaro',' Chino'), "; realizar transacciones y definir $crear.=" PRIMARY KEY(DNI), "; reglas de integridad referencial. $crear.=" UNIQUE auto (Contador)"; $crear.=")"; Creación y uso de # esta es la única diferencia con el proceso de tablas InnoDB # creación de tablas MyISAM $crear.=" Type=InnoDB"; La creación de tablas de este tipo if(mysql_query ($crear ,$c)) { no presenta ninguna dificultad echo "<h2> Tabla $tabla creada con EXITO </h2><br>"; añadida. El proceso es idéntico a las tablas habituales sin más que }else{ añadir Type=InnoDB después de echo "<h2> La tabla $tabla NO HA PODIDO CREARSE "; cerrar el paréntesis de la sentencia # echo mysql_error ($c)."<br>"; de creación de la tabla. $numerror=mysql_errno ($c); if ($numerror==1050){echo "porque YA EXISTE</h2>";} Una vez creadas, las tablas }; InnoDB se comportan –a efectos mysql_close($c); de uso– exactamente igual que las ?> que hemos venido utilizando en las páginas anteriores. No es preciso hacer ningún tipo de modificación en la sintaxis. Por tanto, es Crear tabla totalmente válido todo lo ya InnoDB comentado respecto a: altas, modificaciones, consultas y bajas. ¡Cuidado! Las transacciones Bajo Windows, al crear una base de datos o tabla InnoDB el nombre de la misma aparecerá Uno de los riesgos que se plantean en minúsculas independientemente de la sintaxis que hayamos utilizado en su creación. en la gestión de bases de datos es que pueda producirse una Si observas el ejemplo anterior, hemos puesto demoINNO como nombre de la tabla. Sin interrupción del proceso mientras embargo, si miras el directorio c:mysql verás que aparece el fichero demoinno.frm con se está actualizando una o varias minúsculas. tablas. Pongamos como ejemplo el cobro de nuestra nómina. Son necesarias dos anotaciones simultáneas: ll cargo en la cuenta Las primeras transacciones del Organismo pagador y el abono en nuestra cuenta bancaria. Si se interrumpiera fortuitamente el <? proceso en el intermedio de las $base="ejemplos"; dos operaciones podría darse la # escribimos el nombre de la tabla en MINUSCULAS circunstancia de que apareciera # para asegurar la compatibilidad entre plataformas registrado el pago sin que se $tabla="demoinno"; llegaran a anotar los haberes en $conexion=mysql_connect("localhost","pepe","pepa"); nuestra cuenta. mysql_select_db ($base, $conexion); # insertamos la sentencia BEGIN para indicar el comienzo Las transacciones evitan este tipo de situaciones ya que los registros # de una transacción de los datos se registran de mysql_query("BEGIN",$conexion); manera provisional y no toman /* hasta que no aparezca una sentencia que finalice la transacción carácter definitivo hasta que una (ROLLBACK ó COMMIT) las modificaciones en la tabla serán registradas instrucción confirme que esas de forma "provisional") */ anotaciones tienen carácter mysql_query("INSERT $tabla (DNI,Nombre,Apellido1,Apellido2, definitivo. Para ello, MySQL Nacimiento,Sexo,Hora,Fumador,Idiomas) dispone de tres sentencias: VALUES BEGIN, COMMIT y ROLLBACK. ('111111','Alvaro','Alonso','Azcárate','1954-11-23',
  • 2. 'M','16:24:52',NULL,3)",$conexion); Sintaxis de las if (mysql_errno($conexion)==0){ transacciones echo "Registro AÑADIDO<br>"; }else{ Existen tres sentencias para if (mysql_errno($conexion)==1062){ gestionar las transacciones. Son echo "No ha podido añadirse el registro <br>"; las siguientes: echo "Ya existe un registro con este DNI<br>"; }else{ mysql_query("BEGIN",$c) $numerror=mysql_errno($conexion); Su ejecución requiere que este $descrerror=mysql_error($conexion); activa la conexión $c con el echo "Se ha producido un error nº $numerror<br>"; servidor de base de datos e indica echo "<br>que corresponde a: $descrerror<br>"; a MySQL que comienza una } transacción. } # indicamos el final de la transacción, en este caso con ROLLBACK Todas las sentencias que se # por lo tanto el registro con DNI 111111 no será insertado en la tabla ejecuten a partir de ella tendrán mysql_query("ROLLBACK",$conexion); carácter provisional y no se # incluyamos una nueva transacción ejecutarán de forma efectiva hasta que encuentre una sentencia de mysql_query("BEGIN",$conexion); finalización. mysql_query("INSERT $tabla (DNI,Nombre,Apellido1,Apellido2, Nacimiento,Sexo,Hora,Fumador,Idiomas) mysql_query("ROLLBACK",$c) VALUES ('222222','Genoveva','Zarabozo','Zitrón','1964-01-14', Mediante esta sentencia 'F','16:18:20',NULL,2)",$conexion); advertimos a MySQL que finaliza la if (mysql_errno($conexion)==0){ transacción pero que no debe echo "Registro AÑADIDO"; hacerse efectiva ninguna de las modificaciones incluidas en ella. }else{ if (mysql_errno($conexion)==1062){ mysql_query("COMMIT",$c) echo "No ha podido añadirse el registro <br>"; echo "Ya existe un registro con este DNI"; Esta sentencia advierte a MySQL }else{ que ha finalizado la transacción y $numerror=mysql_errno($conexion); que debe hacer efectivos todos $descrerror=mysql_error($conexion); los cambios incluidos en ella. echo "Se ha producido un error nº $numerror"; echo "<br>que corresponde a: $descrerror"; Precauciones a tener en } cuenta } # indicamos el final de la transacción, en este caso con COMMIT Cuando se utilizan campos # por lo tanto el registro con DNI 222222 si será insertado en la tabla autoincrementales en tablas mysql_query("COMMIT",$conexion); InnoDB los contadores se van # leamos el contenido de la tabla para ver el resultado incrementando al añadir registros $resultado= mysql_query("SELECT * FROM $tabla" ,$conexion); (incluso de forma provisional) con print "<br>Lectura de la tabla depués del commit<br>"; lo cual si se aborta la inclusión con while ($registro = mysql_fetch_row($resultado)){ un ROLLBACK ese contador foreach($registro as $clave){ mantiene el incremento y en echo $clave,"<br>"; inserciones posteriores partirá de } ese valor acumulado. } Por ejemplo. Si partimos de una mysql_close(); tabla vacía y hacemos una ?> transacción de dos registros (número 1 y número 2 en el campo autoincremental) y la finalizamos con ROLLBACK, no se Ejecutar el ejemplo insertarán pero en una inserción posterior el contador Integridad referencial en tablas InnoDB autoincremental comenzará a partir del valor 2. Cuando se trabaja con varias tablas que tienen algún tipo de vínculo resulta interesante MySQL anuncia que a partir de la disponer de mecanismos que protejan o impidan acciones no deseadas. Supongamos, versión 5.0.3 se incluirá una nueva como veremos en los ejemplos posteriores que pretendemos utilizar una tabla con datos de sentencia para permitir que se alumnos y otra tabla distinta para las calificaciones de esos alumnos. Si no tomamos puedan renumerar los campos ninguna precaución (bien sea mediante los script o mediante el diseño de las tablas) podría autoincrementales. darse la circunstancia de que incluyéramos calificaciones a alumnos inexistentes, en materias de las que no están matriculados, etcétera. También podría darse la circunstancia Elementos necesarios de que diéramos de baja a un alumno pero que se mantuvieran las calificaciones para la integridad vinculadas a él. Todas estas circunstancias suelen producir efectos indeseados y las tablas InnoDB pueden ser diseñadas para prever este tipo de situaciones. referencial Sintaxis para la vinculación de tablas La integridad referencial ha de establecerse siempre entre dos Los vínculos entre tablas suelen establecer en el momento de la creación de la tabla tablas. Una de ellas ha de vinculada. comportarse como tabla principal (suele llamarse tabla padre y la otra sería la tabla vinculada ó CREATE TABLE tabla (campo1, campo2,... tabla hijo. KEY nombre (campo de vinculacion ), FOREIGN KEY (campo de vinculacion) Es imprescindible: REFERENCES nombre_de la tabla principal (Indice primario de la tabla principal) ) Type=InnoDB s Que la tabla principal tenga un índice primario donde el campo de vinculacion ha de ser un índice (no es necesario que sea PRIMARY KEY (PRIMARY KEY) ni UNIQUE) y donde Indice primario de la tabla principal ha de ser un índice primario s Que la tabla vinculada (PRIMARY KEY) de la tabla principal. Debe haber plena coincidencia (tanto en tipos como tenga un índice (no es contenidos) entre ambos índices. necesario que sea ni único ni primario) asociado a campos de tipo idéntico a <? los que se usen para índice $base="ejemplos"; de la tabla principal. $tabla1="principal"; $tabla2="vinculada"; Si observas el código fuente del $c=mysql_connect ("localhost","pepe","pepa"); ejemplo que tienes a la derecha mysql_select_db ($base, $c); podrás observar que utilizamos el # creación de la tabla principal type InnoDB
  • 3. número del DNI (único para $crear="CREATE TABLE IF NOT EXISTS $tabla1 ("; alumno) como elemento de $crear.="DNI CHAR(8) NOT NULL, "; vinculación de la tabla de datos $crear.="Nombre VARCHAR (20) NOT NULL, "; personales con la que incluye las $crear.="Apellido1 VARCHAR (15) not null, "; direcciones. $crear.="Apellido2 VARCHAR (15) not null, "; # el indice primario es imprescindible. Recuerda que debe Borrado de tablas # estar definido sobre campos NO NULOS vinculadas $crear.=" PRIMARY KEY(DNI) "; $crear.=")"; Si pretendemos eliminar una tabla $crear.=" Type=InnoDB"; principal recibiremos un mensaje # creamos la tabla principal comprobando el resultado de error tal como puedes ver si if(@mysql_query ($crear ,$c)){ ejecutas este ejemplo cuyo código print "La tabla ".$tabla1." ha sido creada<br>"; fuente tienes aquí. cómo es lógico, }else{ antes de ejecutarlo habrás de print "No se ha creado ".$tabla1." ha habido un error<br>"; tener creada la tabla cuyo código } fuente tienes a la derecha. # crearemos la tabla vinculada $crear="CREATE TABLE IF NOT EXISTS $tabla2 ("; Las tablas vinculadas si permiten $crear.="IDENTIDAD CHAR(8) NOT NULL, "; el borrado y una vez que éstas ya han sido eliminadas (o quitada la $crear.="calle VARCHAR (20), "; vinculación) ya podrán borrarse sin $crear.="poblacion VARCHAR (20), "; problemas las tablas principales. Si $crear.="distrito VARCHAR(5), "; ejecutas este ejemplo podrás # creamos el índice (lo llamamos asociador) para la vinculación observar que borramos ambas # en este caso no será ni primario ni único tablas siguiendo el orden que # Observa que el campo IDENTIDAD de esta tabla CHAR(8) permite hacerlo. Primero se borra # es idéntico al campo DNI de la tabla principal la vinculada y luego la principal. $crear.=" KEY asociador(IDENTIDAD), "; Este es el código fuente del script. #establecemos la vinculación de ambos índices $crear.=" FOREIGN KEY (IDENTIDAD) REFERENCES $tabla1(DNI) "; ¡Cuidado! $crear.=") TYPE = INNODB"; # creamos (y comprobamos la creación) la tabla vinculada Si has borrado las tablas con if(@mysql_query ($crear ,$c)){ los ejemplos anteriores no print "La tabla ".$tabla2." ha sido creada<br>"; olvides crearlas de nuevo }else{ para poder visualizar los print "No se ha creado ".$tabla2." ha habido un error<br>"; ejemplos siguientes. } mysql_close(); ?> Modificación o borrado de campos vinculados Crear tablas vinculadas Las sentencias MySQL que deban modificar o eliminar campos Modificación de estructuras utilizados para establecer vínculos entre tablas requieren de un La modificación de estructuras en tablas vinculadas puede hacerse de forma idéntica a parámetro especial (CONSTRAINT) la estudiada para los casos generales de MySQL siempre que esas modificaciones no -puede ser distinto en cada una de afecten a los campos mediante los que se establecen las vinculaciones entre las tablas- que es necesario tablas. conocer previamente. La forma de visualizarlo es Aquí tienes un ejemplo en se borran y añaden campos en ambas tablas. Como puedes ver ejecutar la sentencia: SHOW la sintaxis es exactamente la misma que utilizamos en temas anteriores. CREATE TABLE nombre tabla que devuelve como resultado un array <? asociativo con dos índices. Uno de $base="ejemplos"; ellos -llamado Table- que contiene $tabla="principal"; el nombre de la tabla y el otro - Create Table- que contiene la $tabla1="vinculada"; estructura con la que ha sido $c=mysql_connect ("localhost","pepe","pepa"); creada la tabla pero incluyendo el mysql_select_db ($base, $c); parámetro CONSTRAINT seguido de su valor. Ese valor es if(mysql_query("ALTER TABLE $tabla ADD Segundo_Apellido VARCHAR(40)",$c)){ precisamente el que necesitamos print "Sea ha creado el nuevo campo en ".$tabla."<br>"; para hacer modificaciones en los } campos asociados de las tablas if(mysql_query("ALTER TABLE $tabla DROP Apellido2",$c)){ vinculadas. print "Sea ha borrado el campo Apellido 2 en ".$tabla."<br>"; Pulsando en este enlace cuyo } código fuente tienes aquí podrás if(mysql_query("ALTER TABLE $tabla1 ADD DP VARCHAR(5)",$c)){ visualizar el resultado de la print "Sea ha creado el nuevo campo en ".$tabla1."<br>"; ejecución de esa sentencia. } Conocido el valor de parámetro if(mysql_query("ALTER TABLE $tabla1 DROP distrito",$c)){ anterior el proceso de borrado del print "Sea ha borrado el campo distrito en ".$tabla1."<br>"; vínculo actual requiere la siguiente } sintaxis: mysql_close(); ALTER TABLE nombre de la tabla ?> DROP FOREIGN KEY parametro Cuando se trata de añadir un nuevo vínculo con una tabla ejecutar el ejemplo principal habremos de utilizar la siguiente sentencia: En este otro ejemplo determinaremos el valor de CONSTRAINT y modificaremos campos asociados de la tabla vinculada. ALTER TABLE nombre de la tabla ADD [CONSTRAINT parametro] FOREIGN KEY parametro <? REFERENCES tabla principal(clave $base="ejemplos"; primaria) $tabla="vinculada"; $tabla1="principal"; El parámetro CONSTRAIT $c=mysql_connect ("localhost","pepe","pepa"); (encerrado en corchetes en el mysql_select_db ($base, $c); párrafo anterior) es OPCIONAL y $resultado=mysql_query( "SHOW CREATE TABLE $tabla",$c); solo habría de utilzarse en el caso de que existiera ya una vinculación $v=mysql_fetch_array($resultado); previa de esa tabla. # extreamos de Create Table la cadena que empiza por CONSTRAINT
  • 4. # y que acaba por FOREING KEY lo guardamos en el array $coin preg_match ('/CONSTRAINT.*FOREIGN KEY/', $v['Create Table'], $coin); La función preg_match # extraemos el parametro quitando el CONSTRAINT que lleva delante # y el FOREIGN KEY que lleva al final En el ejemplo de la derecha $para=str_replace("FOREIGN KEY",'',str_replace("CONSTRAINT",'',$coin utilizamos esta función cuya [0])); sintaxis es la siguiente: print "El valor de CONSTRAINT es: ".$para."<br>"; preg_match( pat, cad, coin ) # eliminamos el vinculo con la clave externa incluyendo en la sentancia # el valor del parametro obtenido el proceso anterior donde pat es un patrón de if(mysql_query("ALTER TABLE $tabla DROP FOREIGN KEY $para",$c)){ búsqueda, cad es la cadena que la print "Se ha realizado con éxito el borrado del vínculo<br>"; han de realizarse las búsquedas y } coin es un arroay que recoge # añadimos el nuevo vínculo (en este caso rehacemos el anterior todas las coincidencias # pero el proceso es idéntico) encontradas en la cadena. if(mysql_query("ALTER TABLE $tabla ADD CONSTRAINT $para El patrón de búsqueda que hemos FOREIGN KEY(IDENTIDAD) REFERENCES $tabla1(DNI)",$c)){ utilizado en el ejemplo print "Se ha reestablecido con éxito vínculo<br>"; /CONSTRAINT.*FOREIGN KEY/ } debe interpretarse de la siguiente forma. Los caracteres / indican el mysql_close(); comienzo y el final del patrón, el . ?> indica que entre CONSTRAIT y FOREING se permite cualquer carácter para admitir la ejecutar el ejemplo coincidencia y, además, * indica que ese caracter cualquier puede repetirse cero o más veces. Añadir registros a la tabla vinculada ¡Cuidado! Si ejecutas este ejemplo habiendo seguido la secuencia de estos materiales verás que se produce un error nº 1216. Es lógico que así sea porque estamos intentando añadir un Es posible que el script de la registro a la tabla vinculada y ello requeriría que en el campo DNI de la tabla principal derecha te de un error como existiera un registro con un valor igual al que pretendemos introducir en la tabla vinculada. consecuencia de que hemos podido modificar campos en Insertar en tabla Ver script los ejemplos anteriores. Si vinculada eso ocurre, borra aquí las tablas y genéralas de nuevo Añadiremos un registro a la tabla principal con el DNI anterior: pulsando aquí. Insertar en tabla Ver script principal ¡Cuidado! y ahora ya podremos ejecutar -sin errores- el script que inserta datos en la tabla Los resultados que obtengas vinculada. Podremos ejecutar aquel script tantas veces como queramos ya que -el campo el ejecutar los ejemplos de IDENTIDAD está definido como KEY y por tanto permite duplicados- no hemos establecido borrado y modificación de la condición de índice PRIMARIO ó UNICO. datos pueden arrojar resultados distintos según los Borrar o modificar registros en la tabla principal contenidos de las tablas que, a su vez, serán Sin intentamos borrar un registro de la tabla principal mediante un script como el que consecuencia de los tienes en este ejemplo verás que se produce un error nº 1217 advirtiéndonos de que no ejemplos que hayas se realiza el borrado porque existen registros en la tabla vinculada con valores asociados al ejecutado anteriormente y de índice del campo que pretendemos borrar y, de permitir hacerlo, se rompería la integridad la secuencia de los mismos. referencial ya que quedarían registros huérfanos en la tabla vinculada. Siempre puedes volver a las condiciones iniciales de los Borrar en tabla Ver script enlaces de la advertencia principal anterior. Sin tratamos de modificar un registro de la tabla principal y la modificación afecta al índice que realiza la asociación con la tabla (o tablas) vinculadas se produciría -por las Opciones adicionaes de mismas razones y en las mismas circunstancias- un error nº 1217 que impediría la FOREIGN KEY modificación. Modificar DNI en tabla Ver script La claúsula FOREIGN KEY permite principal añadirte -detrás de la definición ya comentada y sin poner coma Si -al tratar de borrar o modificar un registro de la tabla principal– no existieran en la separándola de ella- los parámetros ON DELETE y ON tabla (o tablas vinculadas) registros asociados con él, el proceso de modificación se UPDATE en las que se permite realizaría sin ningún problema y sin dar ningún mensaje de error o advertencia. especificar una de las siguientes opciones: Automatización de procesos ON DELETE RESTRICT Creamos dos tablas idénticas a las anteriores incluyendo algunos datos en ellas. Esta condición (es la condición por defecto de MySQL y no es preciso escribirla) indica a MySQL que <? interrumpa el proeceso de $base="ejemplos"; borrado y de un mensaje de error $tabla1="principal1"; cuando se intente borrar un $tabla2="vinculada1"; registro de la tabla principal $c=mysql_connect ("localhost","pepe","pepa"); cuando en la tabla vinculada mysql_select_db ($base, $c); existan registros asociados al valor # creación de la tabla principal type InnoDB que se pretende borrar. $crear="CREATE TABLE IF NOT EXISTS $tabla1 ("; ON DELETE NO ACTION $crear.="DNI CHAR(8) NOT NULL, "; Es un sinónimo de la anterior. $crear.="Nombre VARCHAR (20) NOT NULL, "; $crear.="Apellido1 VARCHAR (15) not null, "; ON DELETE CASCADE $crear.="Apellido2 VARCHAR (15) not null, "; Cuando se especifica esta opción, $crear.=" PRIMARY KEY(DNI) "; al borrar un registro de la tabla $crear.=")"; principal se borrarán de forma $crear.=" Type=InnoDB"; automática todos los de la tabla # creamos la tabla principal comprobando el resultado vinculada que estuvieran asociados al valor de la clave foránea que se if(@mysql_query ($crear ,$c)){ trata de borrar. Con ello se print "La tabla ".$tabla1." ha sido creada<br>";
  • 5. conseguiría una actualización }else{ automática de la segunda tabla y print "No se ha creado ".$tabla1." ha habido un error<br>"; se mantendría la identidad } referencial. # crearemos la tabla vinculada ON DELETE SET NULL $crear="CREATE TABLE IF NOT EXISTS $tabla2 ("; Con esta opción, al borrar el $crear.="IDENTIDAD CHAR(8) NOT NULL, "; registro de la tabla principal no se $crear.="calle VARCHAR (20), "; borrarían los que tuviera $crear.="poblacion VARCHAR (20), "; asociados la tabla secundaria pero $crear.="distrito VARCHAR(5), "; tomarían valor NULL todos los #creamos la tabla vinculada las opciones de DELETE y UPDATE índices de ella coincidentes con la $crear.=" KEY asociador(IDENTIDAD), "; clave primaria de la tabla principal. #establecemos la vinculación de ambos índices Para el caso de ON UPDATE las $crear.=" FOREIGN KEY (IDENTIDAD) REFERENCES $tabla1(DNI) "; opciones son estas: $crear.=" ON DELETE CASCADE "; $crear.=" ON UPDATE CASCADE "; ON UPDATE RESTRICT $crear.=") TYPE = INNODB"; ON UPDATE CASCADE # creamos (y comprobamos la creación) la tabla vinculada ON UPDATE SET NULL if(@mysql_query ($crear ,$c)){ Su comportamiento es idéntico a print "La tabla ".$tabla2." ha sido creada<br>"; sus homónimas del caso anterior. }else{ print "No se ha creado ".$tabla2." ha habido un error<br>"; ¡Cuidado! } # añadimos registros a la tabla principa1 El uso de la opción SET mysql_query("INSERT $tabla1 (DNI,Nombre,Apellido1,Apellido2) NULL requiere que el campo VALUES ('111111','Robustiano','Iglesias','Pérez')",$c); indicado en FOREIGN KEY mysql_query("INSERT $tabla1 (DNI,Nombre,Apellido1,Apellido2) esté permita valores nulos. Si VALUES ('222222','Ambrosio','Morales','Gómez')",$c); está definido con flag NOT # añadimos registros a la tabla vinculada1 NULL (como ocurre en los mysql_query("INSERT $tabla2 (IDENTIDAD,calle,poblacion,distrito) ejemplos que tienes al VALUES ('111111','Calle Asturias,3','Oviedo','33001')", margen) daría un mensaje de $c); error. mysql_query("INSERT $tabla2 (IDENTIDAD,calle,poblacion,distrito) VALUES ('111111','Calle Palencia,3','Logroño','78541')",$c); mysql_query("INSERT $tabla2 (IDENTIDAD,calle,poblacion,distrito) ¡Cuidado! VALUES ('222222','Calle Anunciación,3','Algeciras','21541')",$c); mysql_close(); Al incluir ON DELETE y ON ?> UPTADE (si se incluyen ambas) han de hacerse por Ver contenidos de este mismo orden. Crear tablas y datos Ver codigo fuente tablas Si se cambiara este orden daría un mensaje de error y no se ejecutarían. Modificar registros en cascada <? $base="ejemplos"; $tabla="principal1"; $conexion=mysql_connect("localhost","pepe","pepa"); mysql_select_db($base,$conexion); # modificamos un registro mysql_query("UPDATE $tabla SET DNI='123456' WHERE DNI='111111'", $conexion); # borramos un registro mysql_query("DELETE FROM $tabla WHERE (DNI='222222')",$conexion); if (mysql_errno($conexion)==0){echo "<h2>Tablas actualizadas</b></H2>"; }else{ print "Ha habido un error al actualizar"; } mysql_close(); ?> Ver contenido de la Actualizar en cascada tabla Para que puedas retornar a las condiciones iniciales, desde este enlace podrás borrar las tablas creadas para actualización en cascada. De esta forma podrás volver a crearlas, cuando desees, en las condiciones iniciales. Anterior Indice Siguiente