jueves, 20 de septiembre de 2012





mysql> ALTER TABLE cliente DROP FOREIGN KEY id_cliente;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> describe prestamo;
+-----------------+---------+------+-----+---------+----------------+
| Field           | Type    | Null | Key | Default | Extra          |
+-----------------+---------+------+-----+---------+----------------+
| numero_prestamo | int(11) | NO   | PRI | NULL    | auto_increment |
| importe         | int(11) | YES  |     | NULL    |                |
+-----------------+---------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

mysql> describe cliente;
+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| id_cliente     | int(11)     | NO   | PRI | NULL    | auto_increment |
| nombre_cliente | varchar(20) | YES  |     | NULL    |                |
| calle_cliente  | varchar(20) | YES  |     | NULL    |                |
| ciudad_cliente | varchar(20) | YES  |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> alter table prestamo ADD CONSTRAINT key FOREIGN KEY (numerp_prestamo) REFERENCES cliente(id_cliente) ON DELETE CASCADE ON UPDATE;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key FOREIGN KEY (numerp_prestamo) REFERENCES cliente(id_cliente) ON DELETE CASCA' at line 1
mysql> alter table prestamo ADD CONSTRAINT key FOREIGN KEY (numerp_prestamo) REFERENCES cliente(id_cliente) ON DELETE CASCADE ON UPDATE CASCADE;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key FOREIGN KEY (numerp_prestamo) REFERENCES cliente(id_cliente) ON DELETE CASCA' at line 1
mysql> alter table prestamo ADD CONSTRAINT key FOREIGN KEY (numero_prestamo) REFERENCES cliente(id_cliente) ON DELETE CASCADE ON UPDATE CASCADE;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key FOREIGN KEY (numero_prestamo) REFERENCES cliente(id_cliente) ON DELETE CASCA' at line 1
mysql> ALTER TABLE prestamo ADD FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente);
ERROR 1072 (42000): Key column 'id_cliente' doesn't exist in table
mysql> describe prestamo;
+-----------------+---------+------+-----+---------+----------------+
| Field           | Type    | Null | Key | Default | Extra          |
+-----------------+---------+------+-----+---------+----------------+
| numero_prestamo | int(11) | NO   | PRI | NULL    | auto_increment |
| importe         | int(11) | YES  |     | NULL    |                |
+-----------------+---------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

mysql> alter table prestamo add(id_cliente INT NOT NULL);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE prestamo ADD FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> describe prestamo;
+-----------------+---------+------+-----+---------+----------------+
| Field           | Type    | Null | Key | Default | Extra          |
+-----------------+---------+------+-----+---------+----------------+
| numero_prestamo | int(11) | NO   | PRI | NULL    | auto_increment |
| importe         | int(11) | YES  |     | NULL    |                |
| id_cliente      | int(11) | NO   | MUL | NULL    |                |
+-----------------+---------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> describe cliente;
+----------------+-------------+------+-----+---------+----------------+
| Field          | Type        | Null | Key | Default | Extra          |
+----------------+-------------+------+-----+---------+----------------+
| id_cliente     | int(11)     | NO   | PRI | NULL    | auto_increment |
| nombre_cliente | varchar(20) | YES  |     | NULL    |                |
| calle_cliente  | varchar(20) | YES  |     | NULL    |                |
| ciudad_cliente | varchar(20) | YES  |     | NULL    |                |
+----------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

lunes, 17 de septiembre de 2012

Drop y Alter

ALTER {DATABASE | SCHEMA} [db_name]
    alter_specification [, alter_specification] ...

alter_specification:
    [DEFAULT] CHARACTER SET charset_name
  | [DEFAULT] COLLATE collation_name
ALTER DATABASE le permite cambiar las características globales de una base de datos. Estas características se almacenan en el fichero db.opt en el directorio de la base de datos. Para usar ALTER DATABASE, necesita el permiso ALTER en la base de datos.

ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...

alter_specification:
    ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
  | ADD [COLUMN] (column_definition,...)
  | ADD INDEX [index_name] [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        PRIMARY KEY [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [index_name] [index_type] (index_col_name,...)
  | ADD [FULLTEXT|SPATIAL] [index_name] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        [reference_definition]
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name column_definition
        [FIRST|AFTER col_name]
  | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP INDEX index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] new_tbl_name
  | ORDER BY col_name
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE
  | table_options
ALTER TABLE le permite cambiar la estructura de una tabla existente. Por ejemplo, puede añadir o borrar columnas, crear o destruir índices, cambiar el tipo de columnas existentes, o renombrar columnas o la misma tabla. Puede cambiar el comentario de la tabla y su tipo.
La sintaxis para varias de las alteraciones permitidas es similar a cláusulas del comando CREATE TABLE. Esto incluye modificaciones table_options , para opciones tales como ENGINE, AUTO_INCREMENT, y AVG_ROW_LENGTH.

DROP [TEMPORARY] TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...
    [RESTRICT | CASCADE]
DROP TABLE borra una o más tablas. Debe tener el permiso DROP para cada tabla. Todos los datos de la definición de tabla son borrados, así que tenga cuidado con este comando!
Use IF EXISTS para evitar un error para tablas que no existan. Un NOTE se genera para cada tabla no existente cuando se usa IF EXISTS.

RESTRICT y CASCADE se permiten para hacer la portabilidad más fácil. De momento, no hacen nada.

martes, 4 de septiembre de 2012

Motor de base de datos:

-El Motor de base de datos es el servicio principal para almacenar, procesar y proteger los datos. El Motor de base de datos proporciona acceso controlado y procesamiento de transacciones rápido para cumplir con los requisitos de las aplicaciones consumidoras de datos.

MyISAM:

-MyISAM es la tecnología de almacenamiento de datos usada por defecto por el sistema administrador de bases de datos relacionales MySQL. Este tipo de tablas están basadas en el formato ISAM pero con nuevas extensiones.

Cada tabla de tipo MyISAM se guarda en tres archivos. Los archivos tienen el nombre de la tabla y una extensión que indica el tipo de archivo,
  • .frm almacena la definición de la tabla
  • .MYD (MyData) contiene los registros de la tabla
  • .MYI (MyIndex) contiene los índices de la tabla
InnoDB:

-InnoDB es una tecnología de almacenamiento de datos de código abierto para la base de datos MySQL, incluido como formato de tabla estándar en todas las distribuciones de MySQL AB a partir de las versiones 4.0. Su característica principal es que soporta transacciones de tipo ACID y bloqueo de registros e integridad referencial.

Transacciones de tipo ACID:

-En concreto ACID es un acrónimo de Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español.
  • Atomicidad: es la propiedad que asegura que la operación se ha realizado o no, y por lo tanto ante un fallo del sistema no puede quedar a medias.
  • Consistencia: Integridad. Es la propiedad que asegura que sólo se empieza aquello que se puede acabar. Por lo tanto se ejecutan aquellas operaciones que no van a romper las reglas y directrices de integridad de la base de datos. La propiedad de consistencia sostiene que cualquier transacción llevará a la base de datos desde un estado válido a otro también válido.
  • Aislamiento: es la propiedad que asegura que una operación no puede afectar a otras. Esto asegura que la realización de dos transacciones sobre la misma información sean independientes y no generen ningún tipo de error.
  • Durabilidad: es la propiedad que asegura que una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema.
Diferencia entre MyISAM y InnoDB:

-Estas son algunas de las diferencias entre los dos:
  • InnoDB se recupera de un problema volviendo a ejecutar sus logs, mientras que MyISAM necesita repasar todos los índices y tablas que hayan sido actualizados y reconstruirlos si esos cambios no han sido escritos en disco. El primer proceso requiere más o menos el mismo tiempo siempre, mientras que el segundo aumenta con el tamaño de la base de datos.
  • MyISAM deja al sistema operativo la tarea de hacer la caché de las lecturas y escrituras de los registros, mientras que InnoDB realiza él mismo la tarea, combinando cachés de registro y de índice. InnoDB no envía directamente los cambios en las tablas al sistema operativo para que las escriba, lo que puede hacerlo mucho más rápido que MyISAM en ciertos escenarios.
  • InnoDB almacena físicamente los registros en el orden de la clave primaria, mientras que MyISAM los guarda en el orden en que fueron añadidos. Cuando la clave primaria se escoge de acuerdo con las necesidades de las consultas más habituales esto puede suponer una mejora sustancial del rendimiento. Por otro lado, si los datos se insertan en un orden que difiera sustancialmente del orden de la clave primaria, se obliga a InnoDB a reordenar mucho los datos para mantenerlos en el orden adecuado.
  • InnoDB no dispone de la compresión de datos de la que disfruta MyISAM, de modo que tanto el espacio en disco como la caché en la memoria RAM pueden ser más grandes. Este problema se ha reducido en MySQL 5.0, reduciéndolo en aproximadamente un 20%.
  • Cuando opera con transacciones ACID, InnoDB debe escribir en disco al menos una vez por cada transacción, aunque puede combinar las escrituras de varias inserciones concurrentes. Para los discos duros típicos, esto supone un límite de aproximadamente 200 transacciones por segundo, por lo que aumentarlas exige controladores de disco con caché de escritura y sistema de alimentación ininterrumpido para mantener la integridad. InnoDB ofrece diversos modos de funcionamiento que reducen este efecto, pero conllevan una pérdida de integridad transaccional. MyISAM no tiene ese problema porque no soporta transacciones.
Como habilitar MyISAM e InnoDB en Mysql:

Lo primero que tenemos que hacer es conectarnos con un usuario con suficientes privilegios a nuestro MySQL y ejecutar el comando show engines.
mysql> show engines;
+------------+---------+----------------------------------------------------------------+
| Engine     | Support | Comment                                                        |
+------------+---------+----------------------------------------------------------------+
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                          |
| BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      | 
| FEDERATED  | NO      | Federated MySQL storage engine                                 | 
| ARCHIVE    | YES     | Archive storage engine                                         | 
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | 
+------------+---------+----------------------------------------------------------------+
Si InnoDB no aparece en el listado de show engines, deberemos hacer que MySQL lo cargue, para esto, tenemos algunas opciones, y según nuestra configuración funcionará una u otra:
Utilizando AppArmor: Si estamos usando AppArmor, deberemos editar el fichero /etc/apparmor.d/usr.sbin.mysqld y añadirle las siguientes líneas:
/usr/lib/mysql/plugin/ r, 
/usr/lib/mysql/plugin/* mr,
Después recargamos AppArmor y reiniciamos MySQL, por ejemplo así:
sudo /etc/init.d/apparmor reload
sudo /etc/init.d/mysql restart


 

C:\Archivos de programa\MySQL\MySQL Server 5.5\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.5.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use biblioteca;
Database changed
mysql> show tables;
+----------------------+
| Tables_in_biblioteca |
+----------------------+
| categoria            |
| libro                |
| usuario              |
+----------------------+
3 rows in set (0.00 sec)

mysql> select * from categoria;
+-----------------+-----------------+
| codigocategoria | nombrecategoria |
+-----------------+-----------------+
|               0 | Suspenso        |
|               1 | ciencia ficcion |
|               2 | infantiles      |
|               3 | terror          |
+-----------------+-----------------+
4 rows in set (0.00 sec)

mysql> select * from libro;
+-------------+----------+-------------------+---------+------+
| codigolibro | titulo   | autor             | edicion | isbn |
+-------------+----------+-------------------+---------+------+
|           0 | Librisin | Ramon Perez       | 4ta     | 5241 |
|           1 | Viajes   | Marina Lopez      | 1ra     | 9720 |
|           2 | Ciencia  | Rupertin Arriaga  | 5ta     | 5011 |
|           3 | Martires | Ramiro Buenavista | 3era    | 8941 |
+-------------+----------+-------------------+---------+------+
4 rows in set (0.00 sec)

mysql> select * from usuario;
+----+------------------+-----------------------+----------+------------+
| id | nombre           | direccion             | telefono | contrasena |
+----+------------------+-----------------------+----------+------------+
|  0 | Marcelo Herrera  | Burma 5014            |  6345178 | kndn       |
|  1 | Francisca Rubio  | Chalapa 8741          |  6419485 | jmsmf      |
|  2 | Cleodoro Pinto   | Rincon del valle 5044 |  3405513 | poedc      |
|  3 | Sostenes Ituarte | Oxigeno 7511          |  1905761 | kjcmo      |
+----+------------------+-----------------------+----------+------------+
4 rows in set (0.02 sec)

mysql> describe libro;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| codigolibro | int(11)     | NO   | PRI | NULL    |       |
| titulo      | varchar(30) | YES  |     | NULL    |       |
| autor       | varchar(30) | YES  |     | NULL    |       |
| edicion     | varchar(30) | YES  |     | NULL    |       |
| isbn        | int(11)     | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> describe categoria;
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| codigocategoria | int(11)     | NO   | PRI | NULL    |       |
| nombrecategoria | varchar(30) | YES  |     | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> describe usuario;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | NO   | PRI | NULL    |       |
| nombre     | varchar(30) | YES  |     | NULL    |       |
| direccion  | varchar(30) | YES  |     | NULL    |       |
| telefono   | int(11)     | YES  |     | NULL    |       |
| contrasena | varchar(30) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql>