-- 3.- Realizar la inserción de, al menos, dos registros por cada una
-- de las tablas a través de la línea de comandos.
-- Incluir algunos registros en los que aparezca una agencia de viajes llamada 'miauto'.
-- Tabla Cliente
INSERT INTO Cliente VALUES ("","48867822X","Manolito Garcia","657228779","Avenida Jose de Mora n8");
INSERT INTO Cliente VALUES ("","58726687V","Antonio Recio Matamoros","677256661","Mirador de Montepinar");
-- Tabla Avala
INSERT INTO Avala VALUES (1,2);
INSERT INTO Avala VALUES (2,1);
-- Tabla Reserva
INSERT INTO Reserva VALUES ("",1,600,True,"miauto");
INSERT INTO Reserva VALUES ("",2,5000,False,"Batmovil");
-- Tabla Fecha_Reserva
INSERT INTO Fecha_Reserva VALUES (1,"2012-05-30","2012-7-3");
INSERT INTO Fecha_Reserva VALUES (2,"2013-08-05",NULL);
-- Tabla Coche
INSERT INTO Coche VALUES ("9871JXD","Honda","Civic","Negro",11);
INSERT INTO Coche VALUES ("7865LOL","Opel","Astra GTC","Rojo",3);
-- Tabla Incluye
INSERT INTO Incluye VALUES (1,"9871JXD",450.50,12);
INSERT INTO Incluye VALUES (2,"7865LOL",320,22);
-- Todo esto lo hacemos identificados como root
-- mysql -u root -p
---4.- Crearse, al menos, dos ficheros de datos para inserción masiva de los mismos en sus correspondientes tablas. Realizar la inserción.
--tabla1
68912564H Chuck Norris 670885972 Calle Murillo n5
71335837T Amador Rivas 631670091 Calle Corredera n6 2D
55687803A Armando Jaleos 669801030 Avenida Jose de Mora n17
--tabla2
6812WAU Seat Leon \N 1
5103HAH Mazda RX-8 Rojo 3
9721MNZ Peugeot 308 Blanco 9
LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/BD/Ejercicio1/4fichero1' INTO TABLE Cliente;
LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/BD/Ejercicio1/4fichero2' INTO TABLE Coche;
-- Esto lo ejecutamos una vez identificados como root de la siguiente -- forma
mysql -u root -p --local-infile
-- 5.- El cliente de nuestra base datos nos ha llamado y nos dice que necesita
-- saber de los clientes, además, la provincia en que residen que, por defecto,
-- será Granada.
-- Modificar la base de datos para que se contemple esta situación.
ALTER TABLE Cliente ADD (
Provincia varchar(20) DEFAULT "Granada"
);
-- Todo esto lo hacemos identificados como root
-- mysql -u root -p
-- 6.- Modificar los precios de los coches de manera que se incremente en un 7%.
UPDATE Incluye SET Precio_Coche=Precio_Coche*1.07;
-- Todo esto lo hacemos identificados como root
-- mysql -u root -p
-- 7.- La agencia 'miauto' ha cambiado de nombre y ahora se llama 'nuestroauto'.
-- Se desea actualizar esta situación en la base de datos.
UPDATE Reserva SET Agencia="nuestroauto" WHERE Agencia="miauto";
-- 8 Crearse un usuario llamado 'cargador_datos' con contraseña de acceso 'mipass'. Este usuario
-- solamente podrá realizar carga de datos masiva desde ficheros.
CREATE USER cargador_datos@'localhost' IDENTIFIED BY 'mipass';
GRANT FILE ON *.* TO cargador_datos@'localhost' IDENTIFIED BY 'mipass';
-- Se aplica el permiso FILE a todas las bases de datos ya que
-- "supùestamente" es un permiso global y da error al aplicarlo
-- a una base de datos especifica.
-- El error 1142 a la hora de ejecutar la inserción desde fichero
-- en el ejercicio 10, se solventa aplicando también permisos de
-- insert.
GRANT INSERT ON *.* TO cargador_datos@'localhost' IDENTIFIED BY 'mipass';
-- Fuerza la aplicación de privilegios en el momento.
FLUSH PRIVILEGES;
--9 Crearse un nuevo fichero de datos para carga masiva para una de las tablas de la base de datos.
69872211K Ricardin 958112342 Calle Marquez Torres n4
71395872I Fulanito 618411267 Calle Cabeza n2
-- Todo esto lo hacemos identificados como root
-- mysql -u root -p
-- 10.- Accediendo con ese usuario, realizar la carga de datos masiva, del fichero
-- creado anteriormente, en nuestra base de datos.
LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/BD/Ejercicio1/9fichero3' INTO TABLE Ejercicio1.Cliente;
-- Identificandonos con cargador_datos:
-- mysql -u cargador_datos -p --local-infile
-- 11.- Comprobar que este usuario no puede realizar una consulta a la base de datos.
SELECT * FROM Ejercicio1.Cliente;
-- Estando identificados como "cargador_datos"
-- Tras ejecutar la consulta la consola devolverá el siguiente error:
-- ERROR 1142 (42000): SELECT command denied to user 'cargador_datos'@'localhost' for table 'Cliente'
-- 12.- Crear un usuario 'mi_otro_yo' con contraseña 'miotropass' que tenga todos los permisos para la base de datos.
CREATE USER mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';
GRANT ALL PRIVILEGES ON *.* TO mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';
GRANT GRANT OPTION ON *.* TO mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';
-- Forzamos la aplicación de privilegios en el momento.
FLUSH PRIVILEGES;
-- Todo esto lo hacemos identificados como root
-- mysql -u root -p
--13 Con este usuario, eliminar el usuario 'cargador_datos' y crearse uno nuevo llamado 'consultor' sin contraseña y que únicamente tenga permisos de realización de consultas sobre la tabla de clientes.
-- meto en consola: mysql -u mi_otro_yo -p --local-infile
use mysql
-- para borrar usuarios primero hay que quitarle sus permisos
REVOKE all privileges ON *.* FROM cargador_datos@localhost;
-- da error:ERROR 1045 (28000): Access denied for user
-- 'mi_otro_yo'@'localhost' (using password: YES)
CREATE USER consultor@'localhost';
GRANT select ON *.* TO consultor@'localhost';
-- da error:mysql> GRANT select ON *.* TO consultor@'localhost';
-- ERROR 1045 (28000): Access denied for user 'mi_otro_yo'@'localhost' (using password: YES)
-- Para solucionarlo hay que dar permiso de GRANTS a mi_otro_yo y deja introducirlo.
-- meto en consola: mysql -u root -p --local-infile
use mysql
GRANT grant option ON *.* TO mi_otro_yo@'localhost';
lunes, 17 de diciembre de 2012
Sentencias básicas MySQL
-->
Conectarse a mysql:
mysql [-h IP] -u usuario -p
[nombrebasedatos] [--local-infile]
Mostrar variables del sistema-- show
variables;
Utilizar una base de datos----- use
nbasedatos;
Mostar todas las bases de datos----
show databases;
Crear una base de datos-----
create database nombre;
Borrar una base de datos---- drop
database nombre;
Mostrar tablas de una base de
datos--- show tables;
Crear tablas----- create table
nombre(
campo1 tipodato(X) restricciones,
campo2 tipodato restricciones
);
Definicion de claves foraneas
----------- foreign key (campo) references tablaref(campo)
on delete cascade --- cuando
borras borra los registros de la tabla padre de la tabla hija
on delete set null --- Cuando
borres o actualices el registro de una tabla padre:
- establece NULL la o las columnas de clave foranea en la tabla hija.
- Solo valido si las columnas de clave foranea no se han definido como not null.
On delete no action – Su
borra o actualiza un valor de clave primaria no sera permitido si
en la tabla referenciada hay un valor de clave foranea
relacionado.
Modificar tablas -- alter table
add/modify/drop resto de sentencias;
LTER TABLE PRUEBAS
ADD(
OMBRE VARCHAR (5)
lter table PRUEBA
modify
ODEC varchar (2)
PRIMARY KEY AUTO_INCREMENT;
Renombrar base
de datos -------- rename table
prueba to prueba2;
Copiar tablas (solo estructura)--
create table nuevatabla like tablavieja;
Copiar tablas (con registros) –
create table nombretabla select * from tablavieja;
Cambiar registro de una tabla--
update tabla set id=55 where id=1;
Añadir registros-- insert into
ntabla values('valor', 1, NULL)
insert into
ntabla(campo1,campo2) values ('valor1','valor2');
Insertar registro desde fichero de
texto plano--
load data local infile 'ruta fichero'
into table ntabla;
los valores se separan por
tabulaciones y los registros null por /N
Borrar tabla--- drop table
nombre;
Borrar registros de una tabla----
delete from table;
Mostrar registros de una tabla----
select * from table;
Ver usuarios creados---------
select * from user.mysql;
Crear usuarios locales--------
create user 'nombre'@'localhost' IDENTIFIED BY 'pass';
Crear usuarios globales------ create
user 'nombre'@'%' IDENTIFIED BY 'pass';
Borrar usuarios--------------- drop
user 'nombre'@'localhost';
para borrarlos se necesita quitarle
todos los permisos antes ( revoke all on *.* to usuario; )
Ver privilegios--------------- show
grants for usuario;
Dar privilegios-------------- grant
privilegio on objeto from usuario identified by 'pass';
con esta sentecia si no existe el
usuario te lo crea por ello la parte de la contraseña.
Para dar permisos de asignacion de
permisos le añadimos with grant option;
grant select matricula on
Ejercicio1.coches to 'usuario'@'localhost';
INDEX--- Indices
Los compos llaves
son indices por defecto.
Los campos que
hacen referencia a los campos calve no son indices pero se pueden
definir como tales.
INDEX
[identificador] (campo1,...)
Para comprobar si
el index se ha definido en la tabla: show create table tabla;
y entonces en la
descripción al lado del campo index tiene que salir “key”.
MODIFICAR TAMAÑO
DE CAMPO
si un campo de
lonngitud (5) tiene un registro de 5 caracteres o digitos, al cambiar
de longitud (3) este sera acortado a tamaño 3.
DEFAULT
no modifica datos
existentes
si se crea un campo
nuevo con default se aplica a todo.
Principales
tipos de datos
Números enteros
pequeños---------- tinyint
Números con coma
------------------- float(ent,dec)
Cadena de
caracteres----------------- Varchar
Binarios (V – F)
---------------------- Bool
Fecha
----------------------------------Date
unsigned --- no
permite signo
autoincrement –
autoincrementable (codigos)
PRIMARY KEY
si añades un campo
como primary key se anula el anterior
ENUM (tipo de
dato)
Solo acepta los
valores que se especifican
nombrecampo
ENUM('opcion1','opcion2',..)
alter table
departamento modify
sede varchar (21)
default 'Mates';
Ejemplo de sentencias sobre usuarios
-- 8 crar usuario
USE mysql
CREATE USER cargador_datos@'localhost' IDENTIFIED BY 'mipass';
-- 9
-- dar privilegios de carga masiva
GRANT file on *.* to cargador_datos@'localhost';
-- 10
-- meto en consola: mysql -u cargador_datos -p --local-infile
LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/Apuntes/Base de Datos/Ejercicio1/insert- cargador.txt' INTO TABLE Ejercicio1.coches;
-- no me deja cargar datos, para que funcione: añadir permiso INSERT
GRANT insert ON *.* TO cargador_datos@'localhost';
-- 11
SELECT * FROM Ejercicio1.coches;
-- ERROR 1142 (42000): SELECT command denied to user 'cargador_datos'@'localhost' for table -- 'coches'
-- 12
-- meto en consola:mysql -u root -p --local-infile
use mysql
CREATE USER mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';
GRANT all ON *.* TO mi_otro_yo@'localhost';
-- 13
-- meto en consola: mysql -u mi_otro_yo -p --local-infile
use mysql
-- para borrar usuarios primero hay que quitarle sus permisos
REVOKE all privileges ON *.* FROM cargador_datos@localhost;
-- da error:ERROR 1045 (28000): Access denied for user -- 'mi_otro_yo'@'localhost' (using password: YES)
--14
CREATE USER consultor@'localhost';
GRANT select ON *.* TO consultor@'localhost';
-- da error:mysql> GRANT select ON *.* TO consultor@'localhost';
-- ERROR 1045 (28000): Access denied for user 'mi_otro_yo'@'localhost' (using password: YES)
-- Para solucionarlo hay que dar permiso de GRANTS a mi_otro_yo y deja introducirlo.
-- meto en consola: mysql -u root -p --local-infile
use mysql
GRANT grant option ON *.* TO mi_otro_yo@'localhost';
USE mysql
CREATE USER cargador_datos@'localhost' IDENTIFIED BY 'mipass';
-- 9
-- dar privilegios de carga masiva
GRANT file on *.* to cargador_datos@'localhost';
-- 10
-- meto en consola: mysql -u cargador_datos -p --local-infile
LOAD DATA LOCAL INFILE '/home/usuario/Escritorio/Apuntes/Base de Datos/Ejercicio1/insert- cargador.txt' INTO TABLE Ejercicio1.coches;
-- no me deja cargar datos, para que funcione: añadir permiso INSERT
GRANT insert ON *.* TO cargador_datos@'localhost';
-- 11
SELECT * FROM Ejercicio1.coches;
-- ERROR 1142 (42000): SELECT command denied to user 'cargador_datos'@'localhost' for table -- 'coches'
-- 12
-- meto en consola:mysql -u root -p --local-infile
use mysql
CREATE USER mi_otro_yo@'localhost' IDENTIFIED BY 'miotropass';
GRANT all ON *.* TO mi_otro_yo@'localhost';
-- 13
-- meto en consola: mysql -u mi_otro_yo -p --local-infile
use mysql
-- para borrar usuarios primero hay que quitarle sus permisos
REVOKE all privileges ON *.* FROM cargador_datos@localhost;
-- da error:ERROR 1045 (28000): Access denied for user -- 'mi_otro_yo'@'localhost' (using password: YES)
--14
CREATE USER consultor@'localhost';
GRANT select ON *.* TO consultor@'localhost';
-- da error:mysql> GRANT select ON *.* TO consultor@'localhost';
-- ERROR 1045 (28000): Access denied for user 'mi_otro_yo'@'localhost' (using password: YES)
-- Para solucionarlo hay que dar permiso de GRANTS a mi_otro_yo y deja introducirlo.
-- meto en consola: mysql -u root -p --local-infile
use mysql
GRANT grant option ON *.* TO mi_otro_yo@'localhost';
Creacion de una BD
CREATE TABLE cliente (
codigo INT(4) UNSIGNED AUTO_INCREMENT,
DNI VARCHAR(9) UNIQUE,
nombre VARCHAR(30),
telefono VARCHAR(9),
direccion VARCHAR(40),
PRIMARY KEY(codigo)
);
CREATE TABLE avala (
codigo_avalador INT(4) UNSIGNED,
codigo_avalado INT(4) UNSIGNED,
PRIMARY KEY (codigo_avalador,codigo_avalado),
FOREIGN KEY (codigo_avalador) REFERENCES cliente(codigo),
FOREIGN KEY (codigo_avalado) REFERENCES cliente(codigo)
);
CREATE TABLE reservas (
codigo INT(5) AUTO_INCREMENT,
codigo_cliente INT(4) UNSIGNED NOT NULL,
entregado BOOL,
precio_total DEC(3,2),
agencia VARCHAR(10),
PRIMARY KEY(codigo),
INDEX(codigo_cliente),
FOREIGN KEY (codigo_cliente) REFERENCES cliente(codigo)
);
CREATE TABLE ficha_reserva (
codigo_reserva INT(5) PRIMARY KEY,
inicio DATE,
fin DATE,
FOREIGN KEY (codigo_reserva) REFERENCES reservas(codigo)
);
CREATE TABLE coches (
matricula VARCHAR(7) PRIMARY KEY,
color VARCHAR(10),
marca VARCHAR(15),
modelo VARCHAR(10),
garaje INT(3)
);
CREATE TABLE incluye (
codigo_reserva INT(5),
matricula VARCHAR(7),
litros_gasolina TINYINT UNSIGNED,
precio_coche DEC(8,2),
PRIMARY KEY (codigo_reserva, matricula),
FOREIGN KEY (codigo_reserva) REFERENCES reservas(codigo),
FOREIGN KEY (matricula) REFERENCES coches(matricula)
);
codigo INT(4) UNSIGNED AUTO_INCREMENT,
DNI VARCHAR(9) UNIQUE,
nombre VARCHAR(30),
telefono VARCHAR(9),
direccion VARCHAR(40),
PRIMARY KEY(codigo)
);
CREATE TABLE avala (
codigo_avalador INT(4) UNSIGNED,
codigo_avalado INT(4) UNSIGNED,
PRIMARY KEY (codigo_avalador,codigo_avalado),
FOREIGN KEY (codigo_avalador) REFERENCES cliente(codigo),
FOREIGN KEY (codigo_avalado) REFERENCES cliente(codigo)
);
CREATE TABLE reservas (
codigo INT(5) AUTO_INCREMENT,
codigo_cliente INT(4) UNSIGNED NOT NULL,
entregado BOOL,
precio_total DEC(3,2),
agencia VARCHAR(10),
PRIMARY KEY(codigo),
INDEX(codigo_cliente),
FOREIGN KEY (codigo_cliente) REFERENCES cliente(codigo)
);
CREATE TABLE ficha_reserva (
codigo_reserva INT(5) PRIMARY KEY,
inicio DATE,
fin DATE,
FOREIGN KEY (codigo_reserva) REFERENCES reservas(codigo)
);
CREATE TABLE coches (
matricula VARCHAR(7) PRIMARY KEY,
color VARCHAR(10),
marca VARCHAR(15),
modelo VARCHAR(10),
garaje INT(3)
);
CREATE TABLE incluye (
codigo_reserva INT(5),
matricula VARCHAR(7),
litros_gasolina TINYINT UNSIGNED,
precio_coche DEC(8,2),
PRIMARY KEY (codigo_reserva, matricula),
FOREIGN KEY (codigo_reserva) REFERENCES reservas(codigo),
FOREIGN KEY (matricula) REFERENCES coches(matricula)
);
Suscribirse a:
Entradas (Atom)