lunes, 14 de mayo de 2012
lunes, 7 de mayo de 2012
Creación de bases de datos
¿Qué es una tabla?
Como por ejemplo
en Word, una tabla es una lista de datos, organizados por columnas y filas. Por
ejemplo, la siguiente tabla muestra unas películas dentro de una lista.
imagen 1.
Dentro de un
sistema gestor de bases de datos, la información se puede organizar dentro de
tablas, en las que solo tendremos que decidir qué columnas queremos que tenga y
de que tipo va a ser la información que tendrán (Numérico, texto, etc)
Creando una
base de datos
El nombre de
nuestra base de datos será Videoteca. Se abrirá una ventana, donde abajo del todo veremos “Crear
una base de datos”, en ella escribiremos el nombre de nuestra nueva base de
datos, en este caso: Videoteca.
imagen 2
PD: en lo nombres
no podemos escribir caracteres como, comas, acentos, ñ, etc.
Si todo ha ido
bien, ahora nos pondrá que ya esta creada.
imagen 3
Crear
tablas y campos para la base de datos
En el apartado
anterior hemos aprendido a crear una base de datos MySQL, y he creado una, a la
cual la he llamado “Videoteca”. Ahora el siguiente paso seria crear las tablas
y los campos que nos hagan falta para posteriormente meter los datos.
Creando una
Tabla y sus campos en MySQL
Existen varias
formas y programas diferentes para crear una tabla en una base de datos MySQL, como
phpMyAdmin, el motivo de hacerlo desde
phpMyAdmin y no de otra forma es porque comúnmente, en todos los servidores ya
sean caseros o de un hosting privados siempre suele tener un phpMyAdmin a mano.
En primer lugar
vamos a nuestro phpMyAdmin y seleccionamos la base de datos que hemos creado anteriormente
(Videoteca) como vemos en la siguiente imagen:
imagen 4
Ahora se cargara
la base de datos y nos saldrá un mensaje que pone “no se han encontrado tablas
en la base de datos” y más abajo veremos un pequeño formulario para crear
nuestra primera tabla.
En nombre
pondremos película y en número de campos pondremos 3.
imagen 5
Ahora damos a
continuar y se nos cargara la pagina para crear los campos, en este caso serán
los 3 que hemos puesto antes.
Veremos que
tendremos que rellenar varios datos, pero no tenemos que preocuparnos, ya que
explicaremos uno a uno lo que significa.
·
En Campo,
pondremos el nombre del campo.
·
En Tipo,
debemos poner el tipo de datos que se van a incluir en el campo, por ejemplo
pondríamos:
o
VARCHAR si vamos a incluir un texto inferior a 255
caracteres ejemplo (nombres, DNI, direcciones).
o
TEXT si vamos a incluir un texto más largo de 255
caracteres ejemplo (noticias).
o
INT si deseamos escribir exclusivamente números.
o
DATE para poner fechas, o DATETIME, si
queremos poner hora y fecha.
·
En Longitud,
deberemos de poner el número de caracteres máximo que puede contener dicho
campo, esto no hace falta para todos los tipos de datos, ya que por ejemplo
para los de tipo DATE, o TEXT no hace falta, pero para los INT y VARCHAR es
imprescindible.
·
En Nulo,
podemos elegir Null o Not Null dependiendo si queremos que el campo pueda estar
vacío (sin datos) o no.
·
En predeterminado,
podemos poner lo que queramos que se ponga en el campo en el caso de que no se
rellenen los datos o que se rellene de forma incorrecta.
·
En extra,
vemos que podemos seleccionar Auto_Increment, esto nos sirve para llevar un
orden de los datos que tenemos, por ejemplo, creamos un campo llamado id, de
tipo INT y le ponemos auto_increment, de esta forma cada vez que se cree un
nuevo dato en este campo se le sumara 1 a la id anterior, de forma que podremos
llevar un pequeño orden.
Debemos de poner
en cada uno de los 3 campos:
Campo 1
Nombre: id_pelicula
Tipo: INT
Nulo: Not Null
Extra: Auto_increment
Y marcamos la llave de Primaria![Descripción: http://www.cristalab.com/images/tips/php/crear-mysql/crear-mysql07.png](file:///C:/Users/PERSONAL/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)
Nombre: id_pelicula
Tipo: INT
Nulo: Not Null
Extra: Auto_increment
Y marcamos la llave de Primaria
![Descripción: http://www.cristalab.com/images/tips/php/crear-mysql/crear-mysql07.png](file:///C:/Users/PERSONAL/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)
Campo 2
Nombre: pelicula
Tipo: VARCHAR
Longitud: 30
Nulo: Not Null
Nombre: pelicula
Tipo: VARCHAR
Longitud: 30
Nulo: Not Null
Campo 3
Nombre: Director
Tipo: VARCHAR
Longitud: 30
Nulo: Not Null
Nombre: Director
Tipo: VARCHAR
Longitud: 30
Nulo: Not Null
Índice
Un índice (o KEY,
o INDEX) es un grupo de datos que MySQL asocia con una o varias columnas de la
tabla. En este grupo de datos aparece la relación entre el contenido y el
número de fila donde está ubicado.
Los índices -como
los índices de los libros- sirven para agilizar las consultas a las tablas,
evitando que mysql tenga que revisar todos los datos disponibles para devolver
el resultado.
Creación de índices
Podemos crear el
índice a la vez que creamos la tabla, usando la palabra INDEX seguida del nombre del índice a crear y columnas a indexar (que
pueden ser varias):
INDEX nombre_indice (columna_indexada, columna_indexada2...)
La sintaxis es ligeramente distinta segun la clase de índice:
INDEX nombre_indice (columna_indexada, columna_indexada2...)
La sintaxis es ligeramente distinta segun la clase de índice:
PRIMARY KEY (nombre_columna_1
[,nombre_columna2...]) UNIQUE INDEX nombre_indice (columna_indexada1
[,columna_indexada2 ...]) INDEX nombre_index (columna_indexada1
[,columna_indexada2...])
Podemos también
añadirlos a una tabla después de creada:
ALTER TABLE nombre_tabla ADD INDEX nombre_indice (columna_indexada);
ALTER TABLE nombre_tabla ADD INDEX nombre_indice (columna_indexada);
Si queremos
eliminar un índice: ALTER TABLE tabla_nombre DROP INDEX nombre_indice¿para
que sirven ?
LOs index permiten
mayor rápidez en la ejecución de las consultas a la base de datos tipo SELECT
... WHERE
La regla básica es
pues crear tus índices sobre aquellas columnas que vayas a usar con una
cláusula WHERE, y no crearlos con aquellas columnas que vayan a ser objeto de
un SELECT: SELECT texto from tabla_libros WHERE autor = Vazquez; En
este ejemplo, la de autor es una columna buena candidata a un indice; la de
texto, no.
Otra regla básica es que son mejores candidatas a indexar aquellas columnas que presentan muchos valores distintos, mientras que no son buenas candidatas las que tienen muchos valores idénticos, como por ejemplo sexo (masculino y femenino) porque cada consulta implicará siempre recorrer prácticamente la mitad del índice.
Otra regla básica es que son mejores candidatas a indexar aquellas columnas que presentan muchos valores distintos, mientras que no son buenas candidatas las que tienen muchos valores idénticos, como por ejemplo sexo (masculino y femenino) porque cada consulta implicará siempre recorrer prácticamente la mitad del índice.
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. En las
últimas versiones de MySQL, el motor InnoDB está empezando a
reemplazar a este tipo de tablas por su capacidad de ejecutar transacciones de tipo ACID y
bloqueo de registros e integridad referencial.
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
Para:
especificar que deseas usar el tipo de tablas MyISAM, se indica con la opción ENGINE al crear la tabla o modificarla, por ejemplo
CREATE TABLE t (i INT) ENGINE = MYISAM;
La principal
característica de este tipo de almacenamiento es la gran velocidad que obtiene
en las consultas, ya que no tiene que hacer comprobaciones de la integridad
referencial, ni bloquear las tablas para realizar las operaciones por la
ausencia de características de atomicidad. Este tipo de tablas está
especialmente indicado para sistemas que no tienen un número elevado de
inserciones como pueden ser las páginas web.
Creación de tablas
Muchas son las
opciones que se ofrecen al generar tablas. No vamos a tratarlas detalladamente
pues sale de lo estrictamente práctico. Tan sólo mostraremos algunos de los
tipos de campos que pueden ser empleados en la creación de tablas con sus
características:
Tipo
|
Bytes
|
Descripción
|
INT o INTEGER
|
4
|
Números enteros. Existen
otros tipos de mayor o menor longitud específicos de cada base de datos.
|
DOUBLE o REAL
|
8
|
Números reales (grandes y
con decimales). Permiten almacenar todo tipo de número no entero.
|
CHAR
|
1/caracter
|
Alfanuméricos de longitud
fija predefinida
|
VARCHAR
|
1/caracter+1
|
Alfanuméricos de longitud
variable
|
DATE
|
3
|
Fechas, existen multiples
formatos específicos de cada base de datos
|
BLOB
|
1/caracter+2
|
Grandes textos no indexables
|
BIT o BOOLEAN
|
1
|
Almacenan un bit de
información (verdadero o falso)
|
Las tablas InnoDB
Creación de una
tabla InnoDB
La creación
de tablas de este tipo no presenta ninguna dificultad añadida. El proceso es
idéntico a las tablas habituales sin más que añadir Type=InnoDB después
de cerrar el paréntesis de la sentencia de creación de la tabla.
Este script crea una tabla InnoDB con
idénticos campos a los utilizados en el caso de la tabla MyISAM que hemos visto en páginas anteriores. La
sintaxis, muy similar a la utilizada allí es esta:
<?php
#definimos (en minusculas) el nombre de la
nueva tabla
$tabla="demoinno";
# escribimos la cadena que contiene la
sentencia de creación de la nueva tabla
$crear="CREATE TABLE $tabla (";
$crear.="Contador TINYINT(8) UNSIGNED ZEROFILL NOT NULL
AUTO_INCREMENT,";
$crear.="DNI CHAR(8) NOT NULL, ";
$crear.="Nombre VARCHAR (20) NOT NULL, ";
$crear.="Apellido1 VARCHAR (15) not null, ";
$crear.="Apellido2 VARCHAR (15) not null, ";
$crear.="Nacimiento DATE DEFAULT
'1970-12-21', ";
$crear.="Hora TIME DEFAULT '00:00:00',
";
$crear.="Sexo Enum('M','F') DEFAULT 'M'
not null, ";
$crear.="Fumador CHAR(0) , ";
$crear.="Idiomas SET(' Castellano','
Francés','Inglés',
' Alemán',' Búlgaro',' Chino'), ";
$crear.=" PRIMARY KEY(DNI), ";
$crear.=" UNIQUE auto (Contador)";
$crear.=")";
# esta es la única diferencia con el proceso
de
# creación de tablas MyISAM
$crear.=" Type=InnoDB";
/* tenemos completa la sentencia MYSQL solo falta ejecutarla crear la conexión y
ejecutarla */
/*incluimos los parámetros de conexión */
include('mysqli.inc.php');
/* incluimos dos opciones de proceso y de
programacion orientada a objetos. Podemos ejecutar
los ejemplos pasado mediante el metodo GET el
tipo elegido. */
if(!empty
($_GET['tipo'])){
$tipo_script=$_GET['tipo'];
}else{
$tipo_script="objetos";
}
/*En caso de tipo proceso utilizaríamos esto
*/
if ($tipo_script=="proceso"){
/****** Programación mediante
procesos ***********/
#conexion,
selección de base de datos y verificacion de errores segun ejemplos anteriores
$conexion=@mysqli_connect
($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);
if(!mysqli_connect_errno()==0){
print "<Mbr>No ha podido realizarse la conexión mediante
procesos<br>";
print "Error número: ". mysqli_connect_errno()."
equivalente a: ". mysqli_connect_error();
exit();
}
#
Creación. Los parámetros requieren el orden aquí indicado al revés del caso
mysql
if(mysqli_query($conexion,$crear)){
print "La tabla ha sido CREADA";
}else{
print "<br>No ha podido crearse la base de datos mediante
procesos<br>";
print "Error : ". mysqli_error($conexion);
exit();
}
mysqli_close($conexion);
}
/* en caso de programacion orientada a
objetos */
if ($tipo_script=="objetos"){
#conexion, selección de base de datos y verificacion de errores segun
ejemplos anteriores
$objeto=@new
mysqli ($cfg_servidor,$cfg_usuario,$cfg_password,$cfg_basephp1);
if(!$objeto->connect_errno==0){
print "
No ha podido realizarse la conexión mediante objetos<br>";
No ha podido realizarse la conexión mediante objetos<br>";
print "Error número: ". $objeto->connect_errno."
equivalente a: ". $objeto->connect_error;
exit();
}
if($objeto->query($crear)){
print "La tabla ha sido CREADA";
}else{
print "<br>No ha podido
crearse la tabla mediante objetos<br>";
print "Error : ". $objeto->error;
exit();
}
$objeto->close();
}
?>
Suscribirse a:
Entradas (Atom)