Diferencia entre revisiones de «Plantilla:PHP/SQL»
(No se muestran 69 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
<div id=parrafo> | <div id=parrafo> | ||
===SQL=== | ===SQL=== | ||
− | '''''SQL''''' es un lenguaje de consultas estructuradas o Structured Query Language. Es un lenguaje de 4º | + | '''''SQL''''' es un lenguaje de consultas estructuradas o Structured Query Language. Es un lenguaje de 4º generación donde el programador o usuario del lenguaje especifica lo '''''qué''''' quiere, pero no establece el '''procedimiento''' a seguir para conseguirlo, no dice '''''cómo''''' ha de hacer el sistema para conseguirlo |
{{MRM_Ejemplo|Title=Lenguaje no procedural Vs lenguaje procedural)| | {{MRM_Ejemplo|Title=Lenguaje no procedural Vs lenguaje procedural)| | ||
− | ;Con lenguaje no | + | ;Con lenguaje no procedural (tipo SQL) |
<source lang=sql> | <source lang=sql> | ||
Dime todos los empleados de más de 45 años | Dime todos los empleados de más de 45 años | ||
Línea 25: | Línea 25: | ||
Lenguaje para gestionar bases de datos '''relacionales''' cuyas '''''instrucciones o sentencias''''' especifican lo '''''qué''''' se quiere, no '''''cómo''''' se va a realizar}} | Lenguaje para gestionar bases de datos '''relacionales''' cuyas '''''instrucciones o sentencias''''' especifican lo '''''qué''''' se quiere, no '''''cómo''''' se va a realizar}} | ||
====Lenguajes dentro de SQL==== | ====Lenguajes dentro de SQL==== | ||
− | '''''SQL''''' no es, como su nombre indica, solamente un lenguaje de consultas, | + | '''''SQL''''' no es, como su nombre indica, solamente un lenguaje de consultas, sino que proporciona todas las instrucciones necesarias para '''''gestionar''''' una base de datos.<br /> |
'''''SQL''''' incorpora tres tipos de lenguajes: de '''''Definición''', de '''''Control''''', de '''''Manipulación'''''.<br /> | '''''SQL''''' incorpora tres tipos de lenguajes: de '''''Definición''', de '''''Control''''', de '''''Manipulación'''''.<br /> | ||
− | Las | + | Las instrucciones de '''''SQL''''' se conocen como '''''sentencias''''', y todas se caracterizan por que empiezan por una palabra reservada que identifica a qué lenguaje de los tres que tiene '''''SQL''''' pertenece esa instrucción.<br /> |
{{MRM_Puntos clave|Title=Lenguajes SQL| | {{MRM_Puntos clave|Title=Lenguajes SQL| | ||
;DDL | ;DDL | ||
:Lenguaje de '''''definición''''' de datos. | :Lenguaje de '''''definición''''' de datos. | ||
− | ::Las sentencias de este lenguajes permite crear nuevos elementos en la base de datos como usuarios, tablas, | + | ::Las sentencias de este lenguajes permite crear nuevos elementos en la base de datos como usuarios, tablas, índices, etc. |
− | + | ;DCL | |
:Lenguaje de '''''control''''' de datos | :Lenguaje de '''''control''''' de datos | ||
::Las sentencias de este lenguaje permite gestionar permisos sobre los elementos y acciones sobre la consistencia de los datos | ::Las sentencias de este lenguaje permite gestionar permisos sobre los elementos y acciones sobre la consistencia de los datos | ||
− | + | ;DML | |
− | + | ||
:Lenguaje de '''''manipulación''''' de datos | :Lenguaje de '''''manipulación''''' de datos | ||
::Sin duda son las instrucciones o sentencias mas utilizadas en un Gestor | ::Sin duda son las instrucciones o sentencias mas utilizadas en un Gestor | ||
::Con ellas podemos manipular lo que se conoce como la extensión o contenido de la base de datos. Es decir actuar sobre las tuplas (insertar, modificar y borrar), y consultar | ::Con ellas podemos manipular lo que se conoce como la extensión o contenido de la base de datos. Es decir actuar sobre las tuplas (insertar, modificar y borrar), y consultar | ||
}} | }} | ||
+ | [[Archivo:T111.png]] | ||
+ | <hr /> | ||
+ | ====Sentencias DDL==== | ||
+ | <br /> | ||
{{MRM_Definicion|Title=Sentencias DDL| | {{MRM_Definicion|Title=Sentencias DDL| | ||
;CREATE | ;CREATE | ||
Línea 59: | Línea 62: | ||
ALTER table usuarios ADD direccion varchar(20); | ALTER table usuarios ADD direccion varchar(20); | ||
</source> | </source> | ||
+ | }} | ||
+ | |||
+ | =====Instrucción CREATE===== | ||
+ | ;Sintaxis de la instrucción | ||
+ | [[Archivo:ddl_t1.png]]<br /> | ||
+ | *Los nombres de las columnas son identificadores | ||
+ | <hr /> | ||
+ | ;Tipos de datos para las columnas | ||
+ | [[Archivo:ddl_t2.png]]<br /> | ||
+ | <hr /> | ||
+ | ;Especificación de Restricciones | ||
+ | [[Archivo:ddl_t3.png]]<br /> | ||
+ | <hr /> | ||
+ | ;Definición de Restricciones | ||
+ | [[Archivo:ddl_t4.png]]<br /> | ||
+ | <hr /> | ||
+ | ;Definición de Restricciones | ||
+ | [[Archivo:ddl_t5.png]]<br /> | ||
+ | <hr /> | ||
+ | ;Restricción unique | ||
+ | [[Archivo:ddl_t6.png]]<br /> | ||
+ | <hr /> | ||
+ | ;Restrición Foreign Key | ||
+ | [[Archivo:ddl_t7.png]]<br /> | ||
+ | <hr /> | ||
+ | ;Restricción Ckeck | ||
+ | [[Archivo:ddl_t8.png]]<br /> | ||
+ | <hr /> | ||
+ | ;Creacción de tabla como resultado de una consulta | ||
+ | [[Archivo:ddl_t9.png]]<br /> | ||
+ | <hr /> | ||
+ | |||
+ | {{MRM_Actividad|Title=Crear una base de datos| | ||
+ | Crea la base de datos dado el siguiente enunciado | ||
+ | Clientes ('''''DNI''''', nombre, dirección, edad (mayor de 18 años y menor de 65), sexo (H, M, N_A), por defecto N_A) | ||
+ | Facturas ('''''Número''''' , fecha (por defecto la fecha actual, importe total, cantidad_productos) | ||
+ | }} | ||
+ | |||
+ | {{MRM_Actividad|Title=Realiza el sql de la siguiente estructura| | ||
+ | |||
+ | [[Archivo:cliente_factura_sql.png]] | ||
+ | |||
+ | <source lang=sql> | ||
+ | drop table cliente; | ||
+ | drop table facturas; | ||
+ | |||
+ | create table cliente( | ||
+ | dni varchar2(10) primary key, | ||
+ | nombre varchar2(10) default 'mi nombre' | ||
+ | ); | ||
+ | create table factura( | ||
+ | num number primary key, | ||
+ | fecha date default sysdate, | ||
+ | cantidad number default 10, | ||
+ | cliente varchar2(10), | ||
+ | constraint cliente_factura foreign key (cliente) references cliente(dni) on delete set null | ||
+ | ); | ||
+ | |||
+ | insert into cliente (dni) values ( 1); | ||
+ | insert into cliente (dni) values ( 2); | ||
+ | insert into cliente (dni) values ( 3); | ||
+ | insert into cliente (dni) values ( 4); | ||
+ | |||
+ | insert into factura(num, cliente) values ( 1, 1); | ||
+ | insert into factura(num, cliente) values ( 2, 1); | ||
+ | insert into factura(num, cliente) values ( 3, 1); | ||
+ | insert into factura(num, cliente) values ( 4, 2); | ||
+ | insert into factura(num, cliente) values ( 5, 3); | ||
+ | insert into factura(num, cliente) values ( 6, 3); | ||
+ | insert into factura(num, cliente) values ( 7, 4); | ||
+ | insert into factura(num, cliente) values ( 8, 4); | ||
+ | </source> | ||
+ | |||
+ | |||
+ | }} | ||
+ | |||
+ | ====Alter table==== | ||
+ | ;La sentencia ALTER TABLE se utiliza para añadir, eliminar o modificar las columnas en una tabla existente. | ||
+ | |||
+ | *SQL ALTER TABLE | ||
+ | [[Archivo:ddl_alter_t1.png]] | ||
+ | <source lang=sql> | ||
+ | ALTER TABLE table_name | ||
+ | ADD column_name datatype | ||
+ | </source> | ||
+ | Eliminar una columna de una tabla | ||
+ | <source lang=sql> | ||
+ | ALTER TABLE table_name | ||
+ | DROP COLUMN column_name | ||
+ | </sql> | ||
+ | |||
+ | Modificar co cambiar el tipo de datos de una columna de una tabla | ||
+ | <source lang=sql> | ||
+ | ALTER TABLE table_name | ||
+ | MODIFY column_name datatype | ||
+ | </source> | ||
+ | {{Nota|Ojo no violar restricciones con la modificación de la tabla}} | ||
+ | {{MRM_Actividad|Title=Modifica la tabla anterior| | ||
+ | *Añade un atributo a cada tabla con un valor por defecto | ||
+ | *Modifica el tipo de dato de dni a 15 caracteres. | ||
+ | *Elimina los atributos añadidos | ||
+ | }} | ||
+ | |||
+ | {{MRM_Actividad|Title=Alter table| | ||
+ | *Supongamos que tenemos el siguiente esquema | ||
+ | En un departamento hay empleados | ||
+ | cada empleado pertenece a un solo departamento | ||
+ | Cada departamento es dirigido por un empleado | ||
+ | Un empleado puede dirigir varios departamentos | ||
+ | *En él vemos dos tablas con referencias cruzadas | ||
+ | [[Archivo:relaciones_dobles.png]] | ||
+ | *Excribe las sentencias sql que generen la estructura de base de datos | ||
+ | <source lang=sql> | ||
+ | |||
+ | CREATE TABLE EMPLEADO ( | ||
+ | dni varchar2(20), | ||
+ | direccion varchar2(15), | ||
+ | nombre varchar2(20) not null, | ||
+ | telefono number, | ||
+ | departamento number, | ||
+ | CONSTRAINT valor_telefono check(telefono > 600000000), | ||
+ | CONSTRAINT clave_ppal_empleados primary key (dni), | ||
+ | CONSTRAINT nom_tel_unico_emp unique(nombre, telefono) | ||
+ | ); | ||
+ | |||
+ | CREATE TABLE DEPARTAMENTO( | ||
+ | numero number, | ||
+ | nombre varchar2(15), | ||
+ | ubicacion varchar2(20) not null, | ||
+ | director varchar2(20), | ||
+ | constraint numero primary key (numero), | ||
+ | constraint director foreign key (director) references EMPLEADO(dni) | ||
+ | ); | ||
+ | |||
+ | alter table EMPLEADO | ||
+ | add CONSTRAINT pertenece foreign key (departamento) references DEPARTAMENTO(numero); | ||
+ | |||
+ | </source> | ||
+ | ;Ahora si queremos eliminar las tablas, directamente no lo podremos hacer | ||
+ | |||
+ | {{MRM_Clave|Title=Importante a la hora de borrar| | ||
+ | |||
+ | ;No se puede eliminar una tabla si está siendo referenciada por otra | ||
+ | *Primero habría que eliminar esa referencia | ||
+ | *En general se deben eliminar las tablas en orden inverso en el que se crearon | ||
+ | }} | ||
+ | <source lang=sql> | ||
+ | alter table departamento | ||
+ | drop constraint director; | ||
+ | drop table empleado; | ||
+ | drop table departamento; | ||
+ | </source> | ||
+ | }} | ||
+ | }} | ||
+ | ====Drop table==== | ||
+ | [[Archivo:ddl_drop_t1.png]] | ||
+ | *Elimina una tabla de forma completa | ||
+ | *Si solo quire elminiar su contenido usa la claúsula '''''trunctate''''' | ||
+ | {{MRM_Actividad|Title=Drop| | ||
+ | *Prueba a borrar una tabla | ||
}} | }} | ||
+ | ====Sentencias DCL==== | ||
+ | <br /> | ||
{{MRM_Definicion|Title=Sentencias DCL| | {{MRM_Definicion|Title=Sentencias DCL| | ||
;GRANT | ;GRANT | ||
:para asignar privilegios | :para asignar privilegios | ||
<source lang=SQL> | <source lang=SQL> | ||
− | GRANT ALL ON database.* TO 'manuel'@'localhost' | + | GRANT ALL ON database.* TO 'manuel'@'localhost' |
− | #Asigna todos los privilegios sobre las tablas de la base de datos database al usuario manuel | + | #Asigna todos los privilegios sobre las tablas |
+ | #de la base de datos 'database' | ||
+ | # al usuario 'manuel' | ||
</source> | </source> | ||
;REVOKE | ;REVOKE | ||
Línea 73: | Línea 240: | ||
;COMMIT | ;COMMIT | ||
:Confirma una transacción de manera permanente en la base de datos | :Confirma una transacción de manera permanente en la base de datos | ||
+ | |||
;ROLLBACK | ;ROLLBACK | ||
:Desace todos los cambios en la base de datos desde la ultima transacción confirmada | :Desace todos los cambios en la base de datos desde la ultima transacción confirmada | ||
+ | {{MRM_Actividad| | ||
+ | |||
+ | *Prueba a hacer una inserción | ||
+ | *Después sal y vuelve a entrar a ver si está la tupla | ||
+ | Esto es por que por defecto se hace un rollback a todo lo hecho | ||
+ | *Haz lo mismo haciendo un commit | ||
+ | Ahora los cambios se mantienen | ||
}} | }} | ||
+ | }} | ||
+ | |||
+ | ====Sentencias DML==== | ||
+ | <br /> | ||
{{MRM_Definicion|Title=Sentencias DML| | {{MRM_Definicion|Title=Sentencias DML| | ||
;INSERT | ;INSERT | ||
Línea 81: | Línea 260: | ||
:Esta acción pude devolver algún tipo de valor booleano indicando se se ha insertado o no la tupla | :Esta acción pude devolver algún tipo de valor booleano indicando se se ha insertado o no la tupla | ||
<source lang=sql> | <source lang=sql> | ||
− | INSERT into usuarios (nombre, password) values("manuel", "password_no_segura"); | + | INSERT into usuarios (nombre, password) |
+ | values("manuel", "password_no_segura"); | ||
</source> | </source> | ||
;DELETE | ;DELETE | ||
Línea 90: | Línea 270: | ||
;UPDATE | ;UPDATE | ||
:Actuliza tuplas (0 o más) de una o más tablas | :Actuliza tuplas (0 o más) de una o más tablas | ||
− | :Las dos últimas sentencias ('''''UPDATE Y DELETE''''') | + | :Las dos últimas sentencias ('''''UPDATE Y DELETE''''') suelen devolver un entero. |
+ | : Este valor indica el número de tuplas actualizadas o borradas (0 o n) | ||
+ | : Un error se detalla con el valor (-1 o false). | ||
<source lang=php> | <source lang=php> | ||
UPDATE usuarios SET nombre="alicia" WHERE nombre="manolo"; | UPDATE usuarios SET nombre="alicia" WHERE nombre="manolo"; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
}} | }} | ||
− | |||
− |
Última revisión de 22:04 14 may 2018
Contenido
SQL
SQL es un lenguaje de consultas estructuradas o Structured Query Language. Es un lenguaje de 4º generación donde el programador o usuario del lenguaje especifica lo qué quiere, pero no establece el procedimiento a seguir para conseguirlo, no dice cómo ha de hacer el sistema para conseguirlo
Lenguaje no procedural Vs lenguaje procedural)
| |
Dime todos los empleados de más de 45 años o SELECT * FROM empleados WHERE edad>45; Lenguaje procedural (tipo php o java) Abre la tabla empelados Lee desde el primer registro hasta el último (Bucle) Verifica si ese empleado tiene mas de 45 Si es así añádelo a la lista de resultado Muestra la lista de resultado
|
Lenguaje para gestionar bases de datos relacionales cuyas instrucciones o sentencias especifican lo qué se quiere, no cómo se va a realizar |
Lenguajes dentro de SQL
SQL no es, como su nombre indica, solamente un lenguaje de consultas, sino que proporciona todas las instrucciones necesarias para gestionar una base de datos.
SQL incorpora tres tipos de lenguajes: de Definición, de Control, de Manipulación.
Las instrucciones de SQL se conocen como sentencias, y todas se caracterizan por que empiezan por una palabra reservada que identifica a qué lenguaje de los tres que tiene SQL pertenece esa instrucción.
|
Sentencias DDL
CREATE DATABASE usuarios; CREATE TABLE usuario( password VARCHAR(200), nombre varchar2(40) );
DROP TABLE usuario;
ALTER TABLE usuarios ADD direccion VARCHAR(20); |
Instrucción CREATE
- Sintaxis de la instrucción
- Los nombres de las columnas son identificadores
- Tipos de datos para las columnas
- Especificación de Restricciones
- Definición de Restricciones
- Definición de Restricciones
- Restricción unique
- Restrición Foreign Key
- Restricción Ckeck
- Creacción de tabla como resultado de una consulta
DROP TABLE cliente; DROP TABLE facturas; CREATE TABLE cliente( dni varchar2(10) PRIMARY KEY, nombre varchar2(10) DEFAULT 'mi nombre' ); CREATE TABLE factura( num NUMBER PRIMARY KEY, fecha DATE DEFAULT sysdate, cantidad NUMBER DEFAULT 10, cliente varchar2(10), CONSTRAINT cliente_factura FOREIGN KEY (cliente) REFERENCES cliente(dni) ON DELETE SET NULL ); INSERT INTO cliente (dni) VALUES ( 1); INSERT INTO cliente (dni) VALUES ( 2); INSERT INTO cliente (dni) VALUES ( 3); INSERT INTO cliente (dni) VALUES ( 4); INSERT INTO factura(num, cliente) VALUES ( 1, 1); INSERT INTO factura(num, cliente) VALUES ( 2, 1); INSERT INTO factura(num, cliente) VALUES ( 3, 1); INSERT INTO factura(num, cliente) VALUES ( 4, 2); INSERT INTO factura(num, cliente) VALUES ( 5, 3); INSERT INTO factura(num, cliente) VALUES ( 6, 3); INSERT INTO factura(num, cliente) VALUES ( 7, 4); INSERT INTO factura(num, cliente) VALUES ( 8, 4);
|
Alter table
- La sentencia ALTER TABLE se utiliza para añadir, eliminar o modificar las columnas en una tabla existente.
- SQL ALTER TABLE
ALTER TABLE TABLE_NAME ADD column_name datatype
Eliminar una columna de una tabla
ALTER TABLE TABLE_NAME DROP COLUMN column_name </sql> Modificar co cambiar el tipo de datos de una columna de una tabla <SOURCE lang=sql> ALTER TABLE TABLE_NAME MODIFY column_name datatype
(: Ojo no violar restricciones con la modificación de la tabla)
En un departamento hay empleados cada empleado pertenece a un solo departamento Cada departamento es dirigido por un empleado Un empleado puede dirigir varios departamentos
CREATE TABLE EMPLEADO ( dni varchar2(20), direccion varchar2(15), nombre varchar2(20) NOT NULL, telefono NUMBER, departamento NUMBER, CONSTRAINT valor_telefono CHECK(telefono > 600000000), CONSTRAINT clave_ppal_empleados PRIMARY KEY (dni), CONSTRAINT nom_tel_unico_emp UNIQUE(nombre, telefono) ); CREATE TABLE DEPARTAMENTO( numero NUMBER, nombre varchar2(15), ubicacion varchar2(20) NOT NULL, director varchar2(20), CONSTRAINT numero PRIMARY KEY (numero), CONSTRAINT director FOREIGN KEY (director) REFERENCES EMPLEADO(dni) ); ALTER TABLE EMPLEADO ADD CONSTRAINT pertenece FOREIGN KEY (departamento) REFERENCES DEPARTAMENTO(numero);
ALTER TABLE departamento DROP CONSTRAINT director; DROP TABLE empleado; DROP TABLE departamento;
|
}}
Drop table
- Elimina una tabla de forma completa
- Si solo quire elminiar su contenido usa la claúsula trunctate
Sentencias DCL
GRANT ALL ON DATABASE.* TO 'manuel'@'localhost' #Asigna todos los privilegios sobre las tablas #de la base de datos 'database' # al usuario 'manuel'
|
Sentencias DML
INSERT INTO usuarios (nombre, password) VALUES("manuel", "password_no_segura");
DELETE FROM usuarios WHERE nombre="manuel";
UPDATE usuarios SET nombre="alicia" WHERE nombre="manolo"; |