Date post: | 12-Aug-2015 |
Category: |
Documents |
Upload: | diego-prieto-huber |
View: | 88 times |
Download: | 0 times |
SQLSistemas Gestores de Bases de Datos3º CAS – IES El Rincón
Agustín Jiménez Guerra
Índice
Introducción
Características SQL
Componentes SGBD
Aplicaciones
Instrucciones SQL
Tipos de Sentencias SQL
Índice
Instrucción SELECTDiferentes tipos de consultasSELECT con predicado: WHERETipos de datosFunciones:
TiposEscalares Colectivas
Agrupamiento de filas: GROUP BY, HAVINGConsultas sobre varias tablas
Instrucción INSERTInstrucción DELETEInstrucción UPDATE
Índice
Creación de bases de datosTablas
Relaciones entre tablasConstrains
VistasComposición de consultas
UnionIntersectMinus o Except
ÍndicesSinónimos
Índice
Transact SQLProcedimientos almacenados
Triggers
Funciones definidas por el usuario
Cursores
Transacciones
Índice
Transact SQLAdministración
Herramientas de administraciónCreación de gruposRegistro de servidoresSeguridadDefinir usuariosFunciones definidas por el usuarioPermisos de las tablasCopias de seguridadMantenimiento de bases de datos
Introducción SQL
Lenguaje para acceso a la información almacenada en Bases de Datos relacionalesBases de datos Relacionales
Información en tablas (entidad): filas o registros (tuplas) y columnas o campos (atributos) La mayoría de las Bases de datos actuales son relacionales
Básicamente se puede introducir datos, almacenar datos, recuperar datos y trabajar con ellos
SQL: Structure Query Language (Lenguaje estructurado de consultas)Es un lenguaje utilizado en muchos productos tanto para ordenadores tipo PC como para grandes sistemas, y corre en muchos sistemas operativos diferentesFue creado por IBM (SEQUEL).Existen unas especificaciones ANSI sobre el SQL, aunque no todos los productos las cumplen
Esta es una de las razones por lo que es muy usado
Características
Se puede manejar conjunto de registrosEstructura simpleGran potencia: Con una instrucción se puede obtener una consulta complejaFlexibilidad: Permite especificar muchas condicionesAcceso directo a datos (sin programación, en modo interactivo)Se puede usar SQL desde dentro de programas, o directamente interactivo dentro de un Query (preguntador), consultas abiertas
Por esta razón tanto lo pueden usar los programadores como los usuarios (que quieran acceder a los datos mediante consultas)
Características
SQL InteractivoEl usuario escribe sentencias en la línea de comandos o en una pantalla visual y son respondidas por el SGBD.
SQL EmbebidoPermite ejecutar sentencias en el interior de programas escritos en otros lenguajes. Se pone un delimitador antes de la sentencia SQL � PrecompiladorSQL.
SQL modularPermite compilar sentencias SQL separadas del lenguaje de programación y enlazadas (links) después con el resto de módulos objeto para crear el programa ejecutable. Los procedimientos almacenados son de este tipo.
Otra clasificación:SQL estático: Las sentencias incluidas en el programa no pueden cambiar durante la ejecución. Es sencillo y eficiente.SQL dinámico: Las sentencias pueden ser modificadas en tiempo de ejecución. Es potente
Componentes SGBD Relacional
S.G.B.D
CATÁLOGO B.D.
USUARIOS
Programa---------------------------SQL----------------
HARDWARE
Componentes SGBD Relacional
SGBDPrograma encargado de manejar y gestionar los datos almacenados en la BDPermiten acceder a los datos de forma lógica, sin atender a como están éstos organizados físicamente en la BDNo se tiene que tener en cuenta el uso de punteros sobre los datos, donde se graban, superficie
libre del disco, etc.Programas independiente de la organización física de los ficheros.Modelo externo de datos: Estructuras de datos que ven los usuarios (Tablas)Modelo interno de datos: Estructuras físicas que soportan los datos (punteros, ficheros, etc.)
SQLLenguaje que permite operar con tablas, (manejo de registros por consulta o actualización)Las operaciones con tablas se expresan en sentencias SQLLas sentencias SQL (interactivas o de programa), son enviadas al SGBD que las analiza y procesa.
El SGBD se responsabiliza de coordinar las peticiones de distintos usuarios sobre los mismos datos (integridad)
Componentes SGBD Relacional
CatálogoTambién llamado diccionario de datosEs un componente del SGBD que posee unas tablas donde se guarda información de todas las tablas de la BD (nombres de tablas, campos que tienen, características de los campos, tipo, tamaño, etc.)La información se actualiza cada vez que se añade una tabla a la BDCon SQL también se puede consultar tablas del catálogo
Componentes SGBD Relacional
SYSTABLESTablas y vistas de la base de datos (Tabla, propietario, número de campos, ...)
SYSCOLUMNSColumnas de cada tabla que está en SYSTABLES (campo, tabla, tipo, tamaño, ..)
SYSINDEXSÍndices del sistema (índice, tabla, usuario, ...)
SYSVIEWVistas de la base de datos (vista, tabla, usuario, ...)
Componentes SGBD Relacional
Estas tablas se pueden consultar con el SQL y por ejemplo, conocer:
Que tablas contienen el campo NOMBRE:SELECT TBNAME FROM SYSCOLUMNS WHERE NAME = ‘NOMBRE’Que campos tiene la tabla EMPLEADOS:SELECT NAME FROM SYSCOLUMNS WHERE TBNAME = ‘EMPLEADOS’Cuantas tablas posee el usuario USER1:SELECT COUNT (*) FROM SYSTABLES WHERE CREATOR = ‘USER1’
Con esto se puede ver la estructura de la base de datos. Las tablas que posee, los campos de cada tablas, etc.
Componentes SGBD Relacional
El catálogo se puede consultar con un SELECT
No se puede actualizar con: INSERT, UPDATE y DELETE (podría ser peligroso)
Para modificar la estructura de tablas, índices, vistas, etc. se usa: CREATE TABLE, CREATE INDEX, CREATE VIEW, ALTER TABLE, DROP TABLE, DROP INDEX y DROP VIEW.
Aplicaciones del SQL
Consulta y actualizaciones de datos almacenados en tablas relacionalesDescribir o crear nuevas tablas (definir tablas) y vistas
Generalmente lo realiza el Administrador de la Base de Datos (ABD o DBA)
Gestión de autorizaciones de accesoPara poder consultar o actualizar una tabla se debe estar autorizado (mediante sentencias SQL)
Instrucciones SQL
El usuario solo ve tablas (filas y columnas)Como están organizada físicamente da igual, eso es misión del SGBDEl ADB debe conocer algunas de esas características.
Los datos de una columna son homogéneosNo hay criterio de orden entre las filasCada columna tiene un nombre (para distinguirla de las otras)
Instrucciones SQLComponentes de una sentencia SQL
Palabras definidasTienen un significado en SQL
Nombres de tablas o camposse asignan al crear la BD
ConstantesValor determinado.
Signos<, >, =, <=, >=, <>, ( ), ...
VariablesSi se usa el SQL dentro de un programa.
SELECT campo1, campo2 FROM Tabla1 WHERE Código=101 2 2 1 2 1 2 4 3
Instrucciones SQL
Pasos al analizar la sentencia1. Selección Tabla1 de entre todas las tablas
2. Extraer los registros que tienen el valor 10 en el campo código
3. De los registros anteriores extrae campo1 y campo2
4. Devuelve el resultado
Tipos de sentencias SQL
Sentencias de manipulación de datos DML: Data Manipulation LanguagePermiten realizar consultas y mantenimientos de datos
Sentencias de definición de datosDDL: Data Definition LanguagePermiten crear objetos nuevos, alterar o destruir objetos existentes (tablas, índices, vistas, etc.)
Sentencias de control de datos DCL: Data Control LanguagePermiten el control de permisos, etc.
Tipos de sentencias SQL
Sentencias de manipulación de datos DML: Data Manipulation Language)Permiten realizar consultas y mantenimientos de datos.
SELECTExtraer o seleccionar datos de una o varias tablas (Consultas o Querys), dando como resultado una tabla de ninguna, una o varias filas (registros)
INSERTAñadir uno o varios registros a una tabla
UPDATEModificar uno o varios valores de uno o varios registros de una o varias tablas
DELETEBorrar uno o varios registros de una tabla
Tipos de sentencias SQL
Sentencias de definición de datosDDL: Data Definition LanguagePermiten crear objetos nuevos, alterar o destruir objetos existentes (tablas, índices, vistas, etc.)
CREATECrear nuevas tablas, índices o vistas
DROPDestruir tablas, índices o vistas
ALTERAlterar tablas
Tipos de sentencias SQL
Sentencias de control de datosDCL: Data Control Language
Permiten el control de varios aspectos
GRANTDar autorizaciones de acceso.
REVOKEDenegar autorizaciones de acceso
SELECT
Utilizada para realizar consultas
Permite recuperar información de una o varias tablas
Muy potente
SELECT
SELECT [ALL] Col1 [, Col2] … [[AS] Alias] DISTINCT *DISTINCT ROW Expresion1TOPPERCENT
FROM Tabla [[AS] Alias] [WHERE condición]
[GROUP BY Col1 [, Col2] …] [HAVING condición]
ORDER BY Col1 [DESC][ , Col2 [DESC] ] … Num1 [DESC][ , Num2 [DESC] ] …
[COMPUTE Expresion2 [BY Col1] ]
Consultas sencillas
SELECT
SELECTSeleccionar datos de una tablaSe eligen los campos a ser seleccionadosPuede ser una columna, varias o todasTambién se admiten expresiones
FROMIndica la tabla o tablas desde donde se van a seleccionar los datos (donde están los datos que se van a extraer en el SELECT)Si se trabaja con varias tablas se puede especificar en FROM una expresión para indicar que datos ha de buscarAquí es donde se establece la relación entre dos o más tablas
SELECT
WHERECondición o condiciones que deben cumplir los datos que se van a seleccionarEs un filtro de búsqueda que establece las condiciones que deben cumplir los registros, con lo que se limita el número de registros
ORDER BYOrden de clasificación en que se van a obtener los datosSe puede especificar el nombre del campo, campos, o expresión, o el número que hace el campo en el SELECTLa ordenación puede ser creciente (por defecto) o decreciente (DESC)
SELECT
GROUP BYAgrupa los registros que tengan valores iguales en los campos especificados
HAVINGDe entre todos los grupos, descarta los que no cumplan la condición dada
COMPUTEUsa funciones para producir filas adicionales que resuman los contenidos de grupos
SELECT
ALLPor defecto aparecen todos los registros, incluidos los que tienen valores iguales. Para que esto no ocurra, y restringir el número de registros a devolver (además del WHERE)DISTINCT
Para que en el resultado no aparezcan filas repetidas (si las hay las elimina), dejando sólo valores distintos
DISTINCTROWExclusivo de ACCESS. Es similar a DISTINCT pero busca duplicados en todos los campos de la tabla (no sólo en los campos seleccionados).TOP(n)
Exclusivo de ACCESS. Muestra los n primeros valores que cumplen la condición del WHERE
PERCENTSelecciona un % de registros
SELECT: Orden en que se ejecutan las instrucciones
Siempre que se ejecuta un SELECT se obtiene por resultado una tablas que puede tener una fila, varias o ninguna (vacía)1. FROMSelecciona la tabla de entre todas las tablas de la BDPor ahora es la tabla resultante de la sentencia (la resultante es igual a la tabla original)2. WHEREElimina de la tabla resultante los registros que no cumplen la condición3. GROUP BYSe forman grupos con las filas de la tabla resultante que tengan valores iguales en las columnas de
agrupamiento4. HAVINGDescarta los grupos que no satisfagan la condición5. SELECTSe evalúan las expresiones de la SELECT para cada grupo; produciendo por cada uno una fila en la tabla
resultante final; con tantos valores como expresiones o campos se hayan seleccionadoSi los registros no están agrupados selecciona en cada registro los campos que estén en el SELECT,
descartando los demás6. ORDER BYPresenta la tabla resultante final, clasificada (ordenada) por los campos indicados7. DISTINCT/ALLSe eliminan los valores de la tabla resultante que sean repetidos o iguales (si se elige DISTINCT). Por
defecto es ALL
SELECT CON PREDICADO
Condición del WHEREDistintos tipos:
SencillosComplejos
Condiciones de búsqueda en una operación pueden ser muy complejas
El predicado o la condición puede ser: Verdadera, Falsa o DesconocidaLos predicados pueden ser también Simples o Compuestos
SimplesSólo se pone una condición de comparación
CompuestosVarias condiciones enlazadas por un operador lógico (AND o OR)
SELECT CON PREDICADO
[WHERE condición]
Consultas con predicado sencillas
SELECT CON PREDICADO
[WHERE subselect]
[WHERE SELECT Col1 [, Col2] … [[AS] Alias] FROM Tabla [[AS] Alias] ]
Una Subselect, es una Select subordinada, que sólo puede devolver un valor, a menos que tenga un cuantificador (ALL, SOME, ANY), que puede devolver varios
Consultas con predicado complejas
SELECT CON PREDICADO
[WHERE Col1 IS [NOT] NULL]
[WHERE [ALL] (SELECT Col1 [, Col2] ... FROMTabla .... ])]SOMEANY
[WHERE expresión1 [NOT] BETWEEN expresión2 AND expresión3]
[WHERE Col1 [NOT] LIKE cte_alfanumérica]
Consultas con predicado complejas
SELECT CON PREDICADO
[WHERE expresión [NOT] IN constante1 [, constante2] ...]
[WHERE expresión [NOT] IN (SELECT Col1 [, Col2] ... FROM Tabla .......)]
[WHERE [NOT] EXIST (SELECT Col1 [, Col2] ... FROM Tabla ... )]
Consultas con predicado complejas
SELECT CON PREDICADO
PREDICADOS SIMPLES: WHERE condición.Selecciona las filas en que la condición es Verdadera
Un operando puede ser una expresión u otra sentencia SELECT (Subselect)Ésta debe ir entre paréntesis, y producir como resultado un valor único (tabla de una columna y una fila o ninguna fila)Si se utiliza SELECT no se puede utilizar ORDER BY
NULLSirve para preguntar si el valor contenido en una columna de un registro determinado es o no Nulo, y según lo sea o no tomará el valor V o F (no puede ser D)Un campo puede tener: dato, blanco o null (desconocido)
PREDICADOS CUANTIFICADOSSi se utiliza una sentencia Select subordinada en un predicado de comparación, su valor debe ser único como ya se ha dichoSe admite que el predicado tenga varios valores, si la sentencia subordinada es precedida de algún cuantificador: ALL, SOME o ANY (predicado cuantificado).El resultado de la Select subordinada deber ser una tabla con una columna (un campo) que puede contener 0 o más filasALL: Predicado cuantificado que es V si la comparación es Verdadera para todos y cada uno de los valores resultantes de la sentencia subordinadaSOME: Predicado cuantificado que es V si la comparación es V para uno cualquiera de los valores del resultado de la sentencia subordinadaANY: Igual que SOME
SELECT CON PREDICADO
BETWEENSirve para hallar si un valor está comprendido entre otros dos, o si no lo estáEl resultado es Verdadero si el valor de expresión 1 está comprendido entre el de expresión2 y expresión3, ambos inclusiveSi expresión1, expresión2 o expresión3 es NULL, el resultado es DesconocidoExpresión2 debe ser menor o igual que expresión3
V1 BETWEEN V2 AND V3 (V1>=V2) AND (V1<=V3)V1 NOT BETWEEN V2 AND V3 (V1<V2) OR (V1>V3)
LIKESirve para buscar combinaciones de caracteres que cumplan ciertas condicionesEn la constante alfanumérica se pueden utilizar máscaras
_ Sustituye a un carácter cualquiera% Sustituye a una cadena de caracteres cualquiera
Si el valor de nombre_columna está comprendido en la constante alfanumérica el resultado es VSi nombre_columna es NULL, el resultado es DSi nombre_columna y constante alfanumérica son Null, el resultado es V
SELECT CON PREDICADO
INSirve para preguntar si el resultado de una expresión está incluido en una lista de valoresLa lista de valores se puede especificar uno a uno, o se puede poner una sentencia Select subordinada que de una tabla de una columna, de donde se cogen los valores a comparar
EXISTEl predicado es V si la Select subordinada es una tabla con 1 o más filas (no es una tabla vacía)La SELECT puede tener varias columnas
PREDICADOS COMPUESTOSSon combinaciones de predicados simples enlazados con los operadores AND y/o OR
TIPOS DE DATOSNuméricos
EnterosBINARY: 0 – 1SMALLINT: -32768, +32767INTEGER: -2147483647, +2147483647AUTOINCREMENTMONEY
DecimalesDECIMAL (p,s): p=precisión (nº total de dígitos)
s=nº de dígitos de la parte decima
Coma flotanteREALFLOAT(n): 5.4E-79, 7.2E+75
n = precisión de bits de la mantisa (1,21)
Rojo no ANSI
TIPOS DE DATOS
AlfanuméricoTEXT, LONGTEXT, LONGCHAR, MEMO
Longitud fija: CHAR, VARCHAR, NCHAR, NVARCHAR, TEXT(n), CHARACTER, STRING
CHAR(n): n es la longitud (entre 1 y 254)
Longitud variable (los datos tienen una longitud mínima y máxima):
VARCHAR(n): n es la longitud (entre 9 y 32704).
TIPOS DE DATOS
FechaFecha: DATE dd.mm.aaaa
01.01.0001, 31.12.9999Hora: TIME hh:mm:ss
00:00:00, 24:00:00Instante: TIMESTAMP
dd.mm.aaaa.hh.mm.ss.mmmmmmDATETIME
GráficosIMAGE
TIPOS DE DATOS
TIPOS DE DATOS
http://office.microsoft.com/es-es/access/HA012315043082.aspx
http://office.microsoft.com/es-es/access/CH010499573082.aspx
TIPOS DE DATOS
Valor nuloSe puede poner nulos: NULL (desconocido)
No se pueden poner nulos: NOT NULL
ConstantesNuméricas: 3, +10, +3.04, 003.04, +3.14E-2, ...
Alfanuméricas: ‘ABC’, ‘abc’, ‘aB458c’, …
TIPOS DE DATOSValor nulo
Se puede poner nulos: NULL (desconocido)No se pueden poner nulos: NOT NULL
ConstantesNuméricas: 3, +10, +3.04, 003.04, +3.14E-2, ...Alfanuméricas: ‘ABC’, ‘abc’, ‘aB458c’, ...
ExpresionesEn una consulta se pueden realizar operaciones con los datos (valores de una columna sumados con los de otra o multiplicados por un número, etc.). Esto se realiza con expresionesTambién se utilizan en las condiciones de selección de registros
Expresión: Combinación de valores, operandos y paréntesis, que dan un valorOperandos: Campos, constantes, variables o registros especialesOperadores: Signos con los que se opera: Numéricos (+ - * /) y alfanumérico (||)Registros especiales
Palabras que representan un valorP.e. el registro especial USER, que indica el usuario que está conectado al sistema (cada vez que un usuario se conecta, el SGBD controla el acceso, por motivos de seguridad y confidencilidad). El contenido de este registro especial es alfunumérico de longitud fija y tamaño 8, y guarda en cada momento el identificador personal del usuario que ejecuta la instrucción
FUNCIONES
Las funciones del lenguaje SQL permiten realizar ciertas operacionesFunción
Representa un valor único que se obtiene al aplicar determinadas operaciones a otros valores dados (argumentos)
Las funciones pueden serEscalares
El resultado se obtiene a partir de un valor únicoDentro de las funciones escalares se distinguen tres grupos: Convertir valores, Funciones de tratamiento de cadenas y funciones de tratamiento de fechas
ColectivasEl resultado se obtiene a partir de una colección de valoresSe obtiene un valor como resultado de aplicar una determinada operación a los valores de una columna (separándolos en grupos)
FUNCIONES ESCALARES
Funciones para convertir valores INTEGER: Convierte un valor a un número entero
FLOAT: Convierte un valor a un float
DECIMAL: Convierte un valor a un decimal
DIGITS: Convierte un valor numérico a alfanumérico
HEX: Convierte un valor a hexadecimal
FUNCIONES ESCALARESFunciones de tratamiento de cadenas
LENGHT: Obtiene la longitud de un valorLENGHT (expresión)La tamaño del dato será:
Tipo argumento LongitudAlfanumérico TamañoEntero corto 2Entero largo 4Decimal pFlotante 8
SUBSTR: Extrae caracteres de una cadena.SUBSTR (expresión1, expresión2 [, expresión3])expresión1 es la cadena desde la que se va a extraer.expresión2 es la posición a partir de la cual se va a extraer.expresión3 es el número de caracteres a extraer
FUNCIONES ESCALARES
Funciones de tratamiento de cadenas|| : Este símbolo se utiliza para concatenar cadenas de caracteres. En algunos sistemas también se usa la función: CONCAT (cadena1, cadena2)RTRIM: Extrae caracteres de una cadena por la derecha. No funciona en todos los sistemas.LTRIM: Extrae caracteres de una cadena por la izquierda. No funciona en todos los sistemasUPPER: Convierte las letras de una cadena de caracteres a mayúsculas. No funciona en todos los sistemasLOWER: Convierte las letras de una cadena de caracteres a minúsculas. No funciona en todos los sistemas
FUNCIONES ESCALARES
Funciones de tratamiento de fechasConvertir de alfanumérico a fecha/horaDATE: Convierte una cadena de caracteres a: yyyy/mm/dd
DATE (expresión)
Convierte una cadena en una fecha o un número de días en una fecha (a partir del 1/1/0001).
TIME: Convierte una cadena de caracteres a: hh:mm:ssTIME (expresión)
FUNCIONES ESCALARES
Funciones de tratamiento de fechasConvertir de alfanumérico a fecha/hora
TIMESTAMP: Convierte una cadena de caracteres a: yyyy/mm/dd/hh/mm/ss/mmmmmm
TIMESTAMP (expresión)Los formatos que pueden tener los datos son:
Formato Fecha Formato HoraTipo
aaaa-mm-dd hh.mm.ss ISOmm/dd/aaaa hh.mm AM hh.mm PM
USAdd.mm.aaaa hh.mm.ss EURaaaa-mm-dd hh:mm:ss JIS
Para inicializar una variable fecha, se inicializa como si fuera alfanumérica
FUNCIONES ESCALARES
Funciones de tratamiento de fechasObtener un elemento de un dato fecha/hora
YEAR: Obtener el componente año de una fechaYEAR (expresión)
MONTH: Obtener el valor mes de una fechaMONTH (expresión)
DAY: Obtener el valor día de una fechaDAY (expresión)
HOUR: Obtener el valor hora de una horaHOUR (expresión)
MINUTE: Obtener el valor minuto de una horaMINUTE (expresión)
SECOND: Obtener el valor segundo de una horaSECOND (expresión)
MICROSECOND: Obtener el valor microsegundo de una horaMICROSECOND (expresión)
DAYS: Días transcurridos desde el 1/1/0001 hasta la fecha actualDAYS (expresión)
FUNCIONES ESCALARES
Funciones de tratamiento de fechasRealizar conversión de formatosCHAR: Convertir un valor de fecha a un valor alfanumérico
CHAR (expresión, tipo_formato)
Tipo formato: ISO, USA, EUR, JIS
FUNCIONES ESCALARES
Funciones de tratamiento de fechasDuraciones. Intervalos de tiempo
Duración de calendario: Se obtiene al restar dos fechas de 8 cifras (aaaa.mm.dd). Se obtiene un número que representa: 2 primeros dígitos número de años, 2 segundos dígitos número de meses y 2 últimos dígitos número de días
DATE(’18.4.2000’) – DATE(’31.12.1999’) = 318El 318 indica 0 años, 3 meses y 18 días
Duración de reloj: Se obtiene al restar dos horas. Las dos primeras cifras del número que se obtiene representa las horas, las dos segundas los minutos y las dos últimas los segundos
TIME(’18.50.55’) – TIME(’15.30.45’) = 32010El 32010 indica 3 horas, 20 minutos y 10 segundos
Duración explícita: Es un número seguido de una palabra que indica una unidad de tiempo (YEARS, MONTHS, DAYS, HOURS, MINUTES o SECONDS). Estas palabras también son funciones
FECHA_NACIMIENTO + 3 MONTHS + 20 DAYS
FUNCIONES ESCALARES
Funciones de tratamiento de fechasOperaciones con fechas
Se pueden realizar las siguientes operaciones:Fecha1 – Fecha2Fecha1 + duraciónFecha1 – duración
Operaciones con horasSe pueden realizar las siguientes operaciones:Hora1 – Hora2Hora1 + duraciónHora1 – duración
Registros especialesAdemás del registro especial USER ya comentado, existen otros como:CURRENT_DATE: Indica la fecha del sistema.CURRENT_TIME: Indica la hora del sistema.€
FUNCIONES COLECTIVAS
AVG: Calcula la media de los valores de un campo (columna)AVG (expresión)AVG([DISTINCT / ALL] expresión)El resultado es numérico.
MAX: Halla el máximo entre los valores de un campoMAX (expresión)El resultado es del mismo tipo que la expresión
MIN: Halla el mínimo entre los valores de un campoMIN (expresión)El resultado es del mismo tipo que la expresión
SUM: Calcula la suma de los valores de un campoSUM (expresión)SUM([DISTINCT / ALL] expresión)El resultado es numérico
FUNCIONES COLECTIVAS
COUNT: Halla cuantos valores hay en una colecciónCOUNT (expresión)COUNT (*) Número de filas que hay en el grupo al que se aplicaCOUNT ([DISTINCT / ALL] expresión)El resultado es numérico
FORMATO GENERALNombre_función ([DISTINC] campo)El DISTINCT elimina antes los valores repetidos. En una SELECT no se puede poner DISTINCT más de una vezNombre_función ([DISTINC] expresión)
AGRUPAMIENTO DE FILAS
Se pueden formar grupos de registros o filas de acuerdo a un determinado criterio, para aplicarles luego las funciones colectivasLos registros se pueden dividir en grupos y calcular subtotales, medias, etc.GROUP BY
Se incluye en la sentencia SELECT. Sirve para agrupar filas, y se escribe detrás del WHERE (si existe éste)GROUP BY col1 [, col2] ...
Se especifican las columnas o campos por los que se van a agrupar los registrosSe van a agrupar las filas de la tabla, tal que todas las que tengan el mismo valor en las columnas de agrupamiento forman un grupoPueden haber grupos de 1 registro (1 fila)Una vez se forman los grupos para cada uno se evalúan las expresiones de la cláusula SELECT (cada grupo produce 1 fila en la tabla final resultante)Las otras columnas que no se usan en los agrupamientos sólo se pueden usar como argumento de las funciones colectivas de la SELECT dando lugar a una fila en el resultado
AGRUPAMIENTO DE FILAS
HAVINGSe incluye en la sentencia SELECT. Sirve para descartar grupos de filas que cumplan una condición.HAVING condición
Después de haber separado las filas en uno o varios grupos, se descartan aquellos que no sastifagan la condiciónSi no se agrupan las filas con GROUP BY, se forma un grupo con todos los registrosGROUP BY debe preceder a HAVINGEl agrupamiento se puede hacer por GROUP BY o funciones colectivas en la SELECT o las dosSi se usa GROUP BY se agrupan las filas con igual valor en las columnas de agrupamiento, sino todos los registros forman un grupoUna vez formados los grupos: Se evaluan las expresiones de la SELECT dando lugar a una fila en el resultado
AGRUPAMIENTO DE FILAS
[GROUP BY Col1 [, Col2] …]
[HAVING condición]
Consultas con agrupamiento de filas
SELECT SOBRE VARIAS TABLAS
Se pueden manejar varias tablas en una sola sentencia SELECT
Si interviene más de una tabla es una instrucción SQL, para referirse a un campo de una tabla (puesto que pueden haber campos con el mismo nombre en varias tablas) se indica a que tabla pertenece
Propietario.Tabla.Columna
Esta operación también se denomina JOIN
SELECT SOBRE VARIAS TABLASFROM
Se especifican las distintas tablasWHERE
El WHERE que aparece después del FROM se aplica a una tabla formada por las filas que resulten de pegar una al lado de otra una fila de la 1ª tabla, y todas las de la 2ª, la 2ª fila de la 1ª tabla y todas las de la 2ª y así sucesivamente, formando todas las combinaciones posibles (producto cartesiano)Si no se pone WHERE aparecen todas las combinaciones
SELECT SOBRE VARIAS TABLASDespués de formar el producto cartesiano de las dos tablas, lo normal es quedarse sólo con las filas que cumplen unas determinadas condiciones
Usualmente que la clave ajena de la 1ª tabla sea igual a la clave primaria de la 2ª tabla, con tablas relacionadas
En la condición se pueden incluir columnas de distintas tablas (anteponiendo el nombre de la tabla)En la tabla final resultante se tiene:
Nº columnas: col . Tabla1 + col. Tabla2 + ...Nº filas: filas Tabla1 * filas Tabla2 * ...
SELECT SOBRE VARIAS TABLAS
Con la sentencia SELECT podemos seleccionar de dos o más tablas
SELECT columnas FROM tabla1, tabla2, ... tablaN
OJO. La SELECT no tiene ni idea de cómo están relacionadas las tablasSi le decimos que seleccione datos de dos tablas, combinará las dos tablas haciendo un producto cartesiano entre las dosPor cada fila de la primera tabla se incluyen todas las filas de la segunda tabla
SELECT SOBRE VARIAS TABLAS
SELECT SOBRE VARIAS TABLAS
Si existe una relación de 1 a N entre las tablas, lo que nos interesa es que, por cada fila de la tabla del lado N (“PIEZAS”) aparezca la fila relacionada en la tabla del lado 1 (“FABRICANTES”)
Queremos que en el resultado sólo aparezcan las filas sombreadas
¿cómo podemos hacer esto?
SELECT SOBRE VARIAS TABLAS
A esto se le llama la condición de emparejamiento de tablas
SELECT * FROM Piezas, Fabricantes
WHERE Piezas.Fabricante = Fabricantes.Codigo
Para hacer un emparejamiento de tablas no es necesario que haya unarelación de 1 a N entre ellas. Sin embargo, el emparejamiento detablas suele hacerse cuando queremos juntar dos o más tablasrelacionadas
SELECT SOBRE VARIAS TABLAS
Al hacer un emparejamiento de tablas, puede ocurrir que no queramos todas las columnas (SELECT *) sino solo unas cuantas de cada tabla. ¿qué ocurre si en las dos tablas hay columnas que tienen el mismo nombre?
Solución: Utilizamos prefijos. Antes del nombre de la columna ponemos el nombre de la tabla y un punto
Para que este trabajo no sea demasiado engorroso se pueden utilizar los alias (etiquetas) de tablas para abreviar el nombre de las mimas
SELECT SOBRE VARIAS TABLASEn el SELECT se pueden especificar nombres de columnas de cualquiera de las tablas especificadas en la cláusula FROM
Si en el SELECT se hace referencia a algún campo de tablas que se llamen igual, hay que ponerle el nombre de la tabla precediendo al del campo.
Nombres Locales
Los nombres locales son alias que se asignan a las tablas de una sentencia SELECT (su ámbito de utilización es la sentencia SELECT). Detrás del nombre de la tabla, se pone su nombre local, refiriéndonos a la tabla por su nombre local
SELECT SOBRE VARIAS TABLAS
SELECT SOBRE VARIAS TABLAS
INNER JOIN
Existe otra manera de realizar los emparejamiento. En lugar de utilizaruna condición de emparejamiento podemos utilizar la cláusulaINNER JOIN.
SELECT columnas FROM tabla1 INNER JOIN tabla 2 ON condición_emparejamiento
SELECT * FROM Piezas, Fabricantes WHERE Piezas.Fabricante = Fabricantes.Codigo
SELECT * FROM Piezas INNER JOIN Fabricantes ON Piezas.Fabricante = Fabricantes.Codigo
EQUIVALENTES
SELECT SOBRE VARIAS TABLASLa sentencia JOIN permite combinar registros de dos o más tablas en una base de datos relacional.
Tipos de JOIN:
Interno
Externo
Cruzado
Self-join (una tabla puede unirse consigo misma en casos especiales)
SELECT SOBRE VARIAS TABLASInner join (interno)
Cada registro en la tabla A es combinado con cada registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen
Es el más utilizadoTipos
Forma explícita
Forma implícita
SELECT SOBRE VARIAS TABLASInner join (interno) explícito
Inner join (interno) implícito
SELECT * FROM Empleado INNER JOIN Departamento ONEmpleado.IDDepartamento=Departamento.IDDepartamento
SELECT * FROM Empleado, Departamento WHEREEmpleado.IDDepartamento=Departamento.IDDepartamento
SELECT SOBRE VARIAS TABLASInner join (interno). Otra clasificación
De equivalenciausa comparaciones de igualdad en el predicado JOIN
No usa < o >
NaturalesLos columnas con el mismo valor se muestran sólo 1 vez
CruzadasProducto cartesiano de todos los registros de las 2 tablas
SELECT * FROM Empleado INNER JOIN Departamento ONEmpleado.IDDepartamento=Departamento.IDDepartamento
SELECT * FROM Empleado NATURAL JOIN Departamento
SELECT * FROM Empleado CROSS JOIN Departamento
SELECT * FROM Empleado, Departamento
SELECT SOBRE VARIAS TABLAS
OUTER JOIN
Supongamos lo siguiente:
SELECT SOBRE VARIAS TABLAS
OUTER JOIN
Si juntamos las dos tablas de la siguiente manera:
SELECT * FROM Piezas, Fabricantes WHERE Piezas.Fabricante = Fabricantes.Codigo
El resultado será:
¿dónde está la tuerca?
SELECT SOBRE VARIAS TABLAS
OUTER JOIN
El registro de la tuerca no aparece porque no cumple la condición deemparejamiento (Fabricante es NULL).¿Qué hacemos si queremos que aparezcan todos los registros de unatabla, a pesar de que no cumplan la condición de emparejamiento?OUTER JOIN.
SELECT columnas FROM tabla1 LEFT OUTER JOIN tabla 2 ON condición_emparejamiento
SELECT columnas FROM tabla1 RIGHT OUTER JOIN tabla 2 ON condición_emparejamiento
SELECT SOBRE VARIAS TABLAS
OUTER JOIN
Si realizamos la siguiente consulta:
SELECT * FROM Piezas LEFT OUTER JOIN Fabricantes ON Piezas.Fabricante = Fabricantes.Codigo
El resultado será:
SELECT SOBRE VARIAS TABLAS
OUTER JOIN
La consulta coge todas las filas de la tabla de la izquierda (Piezas) y lasjunta con la otra tabla. Por cada fila de la tabla izquierda:
• Si la fila cumple la condición de emparejamiento, las dos filas sejuntan como si fuese una INNER JOIN.
• Si la fila no cumple la condición de emparejamiento, se ponenlos datos de la fila correspondiente a la tabla de la izquierda y elresto de los datos se dejan a NULL.
La RIGHT OUTER JOIN es igual, pero con la tabla de la derecha.También existe un FULL OUTER JOIN, que coge todas las filas deambas tablas.
SELECT SOBRE VARIAS TABLAS
OUTER JOIN
Pueden abreviarse:LEFT OUTER JOIN -> LEFT JOINRIGHT OUTER JOIN -> RIGHT JOINFULL OUTER JOIN -> FULL JOIN
INSERTAñadir Registros
Añadir una o más filas completas a una tabla.Una filaINSERT INTO Tabla [(Col1, Col2, ...)] VALUES (Valor1, Valor2, ...)
• No hace falta insertar todos los campos, ni en el mismo orden en que están en la tabla• Si se omite Col1, Col2, ..., entonces hay que poner todos los campos y en el mismo orden.• Si no se pone nada en un campo: NULL
Varias filasINSERT INTO Tabla[(Col1, Col2, ...)] SELECT .....
• Si se usa una instrucción SELECT dentro de otra, se le llama Subselect o Select subordinada• Todas las filas que resulten de ejecutar la SELECT se insertan en la tabla• No se puede hacer referencia en el SELECT a la tabla en la que se está insertando• El número de columnas del SELECT deber ser igual al número de nombres en la lista de
columnas
INSERT
INSERT INTO Tabla [(Col1, Col2, ...)] VALUES (Valor1, Valor2, ...)
INSERT INTO Tabla[(Col1, Col2, ...)] SELECT .....
Insertado de registros
DELETEBorrar Registros
• Borrar filas de una tabla (la fila completa no parcialmente)
DELETE FROM Tabla [Nombre_Local] [WHERE condición]
• Si no se pone la cláusula WHERE se borran todos los registros de la tabla (no la tabla)
DELETE
DELETE FROM Tabla [Nombre_Local] [WHERE condición]
Borrado de registros
UPDATEModificar Registros
• Modificar o actualizar varias filas de una tabla ( no tiene que ser la fila completa)
UPDATE Tabla [Nombre_Local] SET Col1=expresión1[,Col2=expresión2] ...
[WHERE condición]
• En expresión se puede poner NULL
• Si se omite WHERE se actualizan todas las filas de la tabla
UPDATE
UPDATE Tabla [Nombre_Local] SET
Col1=expresión1 [,Col2=expresión2]...
[WHERE condición]
Modificación de registros
Administrar Bases de DatosLa base de trabajo es donde se organiza toda la información en SQL Server. Ésta es unaagrupación de tablas, vistas, procedimientos almacenados, funciones, etc., un servidor SQLServer puede contener multitud de bases de datos y cada una de ellas millones de objetos.
Crear nueva base de datos
Las bases de datos las podemos crear de diferentes formas, lo más normal es que utilicemosel administrador corporativo (SQL 2000-2005), managament console (SQL 2008) paracrearlas pero se pueden crear desde Transact-SQL o desde un programa realizado en VBcon SQL-DMO. Todas las bases de datos que creamos en SQL Server se crean a partir deun modelo que es la base de datos Model que instala SQL Server, esta base de datos lesirve a SQL Server como ejemplo y modelo para crear las nuevas bases de datos.
Crear nueva base de datos1. Desde el árbol de la izquierda, abrimos los nodos y nos posicionamos encima del nodo
“bases de datos”, con el botón derecho del ratón seleccionamos “Nueva base de datos”.2. En esta primera pantalla ponemos el nombre de la base de datos y el orden de
intercalación si queremos cambiarlo para hacerla compatible la base de datos conotras bases de datos existentes en otros servidores. Por defecto deja el orden deintercalación del SQL Server especificado en el proceso de instalación.
3. Pulsamos la siguiente opción, “Archivo de datos” para seleccionar la ruta donde estaráalojado el fichero físico de datos, por defecto estará en el directorio de instalación deSQL Server en “MSSQL\Data”. En esta opción también le daremos el tamaño delfichero físico o si queremos que se auto incremente a medida que la base de datoscrezca.
4. La siguiente opción, “Registro de transacciones” es similar al punto 3 solo que en lugarde especificar las opciones para el fichero de datos lo hacemos para el fichero detransacciones (fichero de registro o log).
Crear nueva base de datos
EL proceso es muy sencillo, como ejemplocreamos una base de datos llamada pruebascon un tamaño de 10 MB y limitada a 50 MB yun incremento de 5 MB.
El registro de transacciones lo creamos con untamaño de 5MB y limitado a 25 y unincremento de la base de datos de 5 MB.
USE masterGOCREATE DATABASE PruebasON( NAME = Pruebas_data, FILENAME = 'c:\program files\microsoft sql server\mssql\data\pruebas_data.mdf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5 )LOG ON( NAME = ‘Pruebas_log',FILENAME = 'c:\program files\microsoft sql server\mssql\data\pruebas_log.ldf',SIZE = 5MB,MAXSIZE = 25MB,FILEGROWTH = 5MB )
Crear nueva base de datos
Sintaxis:• NAME = Nombre_del_archivo_lógico,• FILENAME = Nombre_del_archivo_en_el_sistema (path completo)• SIZE = TAMAÑO (inicial)• MAXSIZE = (tamaño_máximo | UNLIMITED)(Tamaño máximo que puede tener la base de datos, UNLIMITED = tamaño ilimitado)•FILEGROWTH = Incremento del archivo (crecimiento en MB)
Para ejecutar esta código utilizaremos el Analizador de consultas (Query Analyzer)
ON (ARCHIVO BD)
• Especifica que los archivos de disco utilizados para almacenar las secciones de datos de la base de datos (archivos de datos) se definen explícitamente.
• ON es obligatorio cuando va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de datos del grupo de archivos principal
• Detrás de la lista de archivos del grupo de archivos principal se puede colocar una lista opcional de elementos <filegroup> separados por comas que definan los grupos de archivos de usuario y sus archivos
PRIMARY
• Especifica que la lista de elementos <filespec> asociada define el archivo principal
• El primer archivo especificado en la entrada <filespec> del grupo de archivos principal se convierte en el archivo principal
• Una base de datos sólo puede tener un archivo principal. Si no se especifica PRIMARY, el primer archivo enumerado en la instrucción CREATE DATABASE se convierte en el archivo principal
ARCHIVOS BASE DE DATOS• SQL Server asigna una base de datos a un conjunto de archivos del sistema operativo• Los datos y la información del registro nunca se mezclan en el mismo archivo, y cada archivo sólo
es utilizado por una base de datos• Los grupos de archivos se denominan colecciones con nombre de archivos que se utilizan como
ayuda en tareas de colocación de datos y administrativas, como las operaciones de copias de seguridad y restauración
• Archivos de base de datos • Las bases de datos de SQL Server utilizan tres tipos de archivos:
• Archivos de datos principales El archivo de datos principal es el punto de partida de la base de datos y apunta a los otros archivos de la base de datos
• Cada base de datos tiene un archivo de datos principal
• La extensión recomendada para los nombres de archivos de datos principales es .mdf.
• Archivos de datos secundarios Los archivos de datos secundarios son todos los archivos de datos menos el archivo de datos principal
• Puede que algunas bases de datos no tengan archivos de datos secundarios, mientras que otras pueden tener varios archivos de datos secundarios
• La extensión de nombre de archivo recomendada para los archivos de datos secundarios es .ndf.
• Archivos de registro Los archivos de registro almacenan toda la información de registro que se utiliza para recuperar la base de datos
• Como mínimo, tiene que haber un archivo de registro por cada base de datos, aunque puede haber varios
• La extensión de nombre de archivo recomendada para los archivos de registro es .ldf.
ARCHIVOS BASE DE DATOS• SQL Server no exige las extensiones de nombre de
archivo .mdf, .ndf y .ldf, pero estas extensiones ayudan a identificar las distintas clases de archivos y su uso
• En SQL Server, las ubicaciones de todos los archivos de una base de datos se guardan tanto en el archivo principal de la base de datos como en la base de datos maestra
LOG ON (ARCHIVO LOG)• Especifica que los archivos de disco utilizados para
almacenar el registro de la base de datos (archivos de registro) se definen explícitamente
• LOG ON va seguido de una lista de elementos <filespec> separados por comas que definen los archivos de registro
• Si no se especifica LOG ON, se crea automáticamente un archivo de registro cuyo tamaño es el 25 por ciento de la suma de los tamaños de todos los archivos de datos de la base de datos, o 512 KB, lo que sea mayor.
• LOG ON no se puede especificar en una instantánea de base de datos
Crear una base de datos sin especificar archivosUSE master; GO IF DB_ID (N'mytest') IS NOT NULL DROP
DATABASE mytest; GO
CREATE DATABASE mytest; GO -- Verify the database files and sizesSELECT name, size, size*1.0/128 AS [Size in MBs]
FROM sys.master_files WHERE name = N'mytest'; GO
Crear una base de datos que especifica los archivos de datos y de registro de transaccionesUSE master;
GO
IF DB_ID (N'Sales') IS NOT NULL DROP DATABASE Sales;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1);
-- execute the CREATE DATABASE statement
EXECUTE ('CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = '''+ @data_path + 'saledat.mdf'',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = '''+ @data_path + 'salelog.ldf'',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )' );
GO
Crear una base de datos mediante la especificación de múltiples archivos de datos y de registro de transaccionesUSE master;
GO
IF DB_ID (N'Archive') IS NOT NULL DROP DATABASE Archive;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1) FROM master.sys.master_files WHERE database_id = 1 AND file_id = 1);
-- execute the CREATE DATABASE statement
EXECUTE ('CREATE DATABASE Archive
ON PRIMARY
(NAME = Arch1,
FILENAME = '''+ @data_path + 'archdat1.mdf'',
SIZE = 100MB,
MAXSIZE = 200,
FILEGROWTH = 20),
( NAME = Arch2, FILENAME = '''+ @data_path + 'archdat2.ndf'',
SIZE = 100MB,
MAXSIZE = 200,
FILEGROWTH = 20),
( NAME = Arch3, FILENAME = '''+ @data_path + 'archdat3.ndf'',
SIZE = 100MB,
MAXSIZE = 200,
FILEGROWTH = 20)
LOG ON
(NAME = Archlog1,
FILENAME = '''+ @data_path + 'archlog1.ldf'',
SIZE = 100MB,
MAXSIZE = 200,
FILEGROWTH = 20),
(NAME = Archlog2,
FILENAME = '''+ @data_path + 'archlog2.ldf'',
SIZE = 100MB,
MAXSIZE = 200,
FILEGROWTH = 20)' );
GO
Configurar la Base de Datos
Se pueden modificar las opciones deconfiguración de las bases de datosexcepto el nombre, la ruta de los ficherosy el “Nombre de intercalación”.
Para acceder a la opción de propiedadespulsamos con el botón derecho del ratónen la base de datos que vamos a modificary seleccionamos propiedades.
Mónica Frey Grimm
Copia de SeguridadUna de las cosas más importantes respecto a nuestra base de datos son las copias deseguridad, que debemos hacerlas regularmente por lo que pudiera pasar, teniendo una copiade seguridad de la base de datos, si por cualquier motivo tenemos un desastre o hay querestaurar la base de datos, siempre podremos hacerlo recuperando la copia.
Las copias debemos hacerlas en función de la utilización de la base de datos, si por ejemplouna base de datos no se actualiza nada más que una vez a la semana, la copia de seguridad lapodemos hacer después de actualizar la base de datos, si por el contrario se actualiza deforma constante es bueno realizar las copias diarias o dos veces al día.
Las copias y restauración de las bases de datos al igual que casi todo lo que queramos hacerdesde SQL Server tenemos varias formas de hacerlo, desde el administrador corporativo quees la forma más usual de trabajar con SQL Server, en entorno gráfico o medianteprogramación a través de Transact-SQL o desdeVB,ASP, etc., con SQL-DMO.
Copia de SeguridadPara crear copias de seguridad desde eladministrador corporativo, seleccionamos la basede datos de la que queremos crear una copia deseguridad y con el botón derecho del ratónseleccionamos Todas las tareas -> Copia de seguridad
de la base de datos.
Podemos decir que clase de copia queremoshacer:
• Base de datos completa.• Diferencial, esta forma solo copiara loscambios realizados desde la última copia.• Copiar el registro de transacciones.
Copia de Seguridad
Seleccionamos “agregar” y saldrá una pantalla donde especificaremos la ruta y el nombre del ficheroque queremos utilizar como copia, el fichero puede ser de nueva creación o uno existente, opodemos especificar un dispositivo ya existente o crear uno nuevo.
Un dispositivo de copia de seguridad no es más que un archivo igual que el que hubieramosseleccionado en la opción superior, pero estos a diferencia de los anteriores, podemos adminístraloy ver su contenido desde la opción del nodo Administración -> Copias de seguridad.
Una vez seleccionado donde alojaremos la copia, debemos elegir si sobrescribimos las copias quetenga el fichero o la nueva copia se anexa a las ya existentes en el fichero (en caso de ser unfichero con copias existentes).
Una vez hecho ésto seleccionamos la ficha “opciones” y habilitamos la opción “Comprobar la copia deseguridad al concluir”, para que una vez finalizada la copia de seguridad compruebe si se ha realizadocorrectamente.
Copia de Seguridad utilizando Transact-SQLUSE masterEXEC sp_addumpdevice 'disk', 'pruebas_1','G:\microsoft sql server espanol\MSSQL$TORMENTA\BACKUP\BACKUP.dat'-- Backup de la base de datosBACKUP DATABASE PRUEBAS TO Pruebas_1
� USE Master. Utilizamos la base de datos “Master” para ejecutar la primera sentenciaporque el procedimiento almacenado que ejecutamos para crear un dispositivo estaalojado en la base de datos “Master”.
� EXEC sp_ addumpdevice. Utilizamos éste procedimiento almacenado de la base dedatos “Master” para crear un dispositivo de copia de seguridad. Parámetros que recibe:
– disk, especifica que el archivo de seguridad será un archivo de disco.
– pruebas_1, nombre lógico que le damos al dispositivo de copia y es el que se verá desde eladministrador de copias.
– ruta, ruta física donde se alojará el fichero en disco, ruta y nombre del fichero.
� BACKUP , a continuación hacemos un Backup (copia de seguridad) de la base de datos PRUEBAS al dispositivo Pruebas_1.
Copia de Seguridad
Lo explicado hasta el momento sobre lascopias de seguridad esta muy bien y es muyútil, pero, muy pesado si cada día tenemosque entrar en el administrador corporativopara hacer una copia de seguridad, y muypeligroso si nos olvidamos, por eso hay loque se llama “programación de copias deseguridad”, con esta utilidad programamos latarea de copias de seguridad para que serealicen solas en una determinada fecha.
Copia de SeguridadPara programar el día y hora que serealizarán las copias realizamos lasmisma operaciones que para crearuna copia de seguridad pero tenemosque habilitar la opción “programar”, enla imagen de la pantalla anteriorpodemos ver esa opción al final de lapantalla, pulsando el botón podremosseleccionar día y hora para que lacopia de seguridad se ejecute sola.
Esta tarea queda guardad en la opcióndel Agente de SQL Server “trabajos”.
Restaurar copias de seguridad
Si se pueden hacer copias deseguridad lo lógico es que estascopias se puedan restaurar. Pararestaurar una copia de seguridadtenemos que seleccionar la base dedatos deseada y con el botónderecho pulsamos en la opción Todas
las tareas -> Restaurar base de datos.
Restaurar copias de seguridadEn esta pantalla, si restauramos la base de datos desde un fichero, seleccionamos “desdedispositivo”, pulsamos el botón “dispositivo” y en la siguiente pantalla pulsamos “agregar” yseleccionamos el fichero de copias de seguridad que queremos restaurar. Las opciones derestauración son las mismas que las de copias, podemos restaurar la base de datos:
� Completa.� Diferencial.� Registro deTransacciones.
En la siguiente ficha de esta pantalla “opciones”, seleccionamos las opciones derestauración de la copia:
� Forzar restauración sobre la base de datos existente, forzamos a que se restaure lacopia sobrescribiendo el fichero existente.
� Restaurar archivos de base de datos como, especifica el nombre del archivo físico y lógicode la restauración.
Restaurar copias de seguridad
Del mismo modo que podemos hacer copias de seguridad desde código transact-SQL oSQL-DMO, podemos restaurar bases de datos. La instrucción a utilizar es “Restoredatabase” , éste al igual que el “Backup” son amplios en parámetros y modos de uso porese motivo lo más recomendable es mirar la ayuda de SQL Server (libros en pantalla)donde se puede encontrar un apartado completo dedicado al transact-SQL (Referencia deTransact-SQL)
CREATE TABLE• Las tablas las suele crear el ADB (Administrador de la Base de Datos),
aunque un usuario también puede crearlas, si tiene permiso (tablas particulares)
• Normalmente las tablas SQL se usan en sistemas multiusuario, por varios usuarios a la vez, por lo que normalmente serán definidas por el ABD• Las pondrá a disposición de quien las necesite• El usuario tiene que tener autorización para ello
• Para crear nuevos objetos se utiliza el lenguaje DDL: Lenguaje de Definición de Datos
• Entre los objetos que se pueden crear están: Tablas, Vistas, Índices, Sinónimos, Condiciones de integridad referencial, Bases de datos, usuarios, trigger, función, procedimiento almacenado, etc.
• Cuando se crea un objeto, se almacena en el catálogo la definición del objeto y sus características, para poder ser usado, y una vez no es necesario, se borra el objeto del catálogo
CREATE TABLE• IDENTIFICADOR
• Es el nombre que se utiliza para designar un campo, tabla, vista, índice, etc. (un objeto del SGBD)
• Máximo de 10 caracteres (depende del sistema)
• Debe empezar por una letra mayúscula
• Si se escribe entre comillas se puede usar tanto letras mayúsculas como minúsculas (se especifica tal y como se pone)
CREATE TABLE• NOMBRE DE TABLA
• Como ya se indicó consta de tres partes si el sistema es distribuido, y sólo de dos si el sistema no es distribuido.
• Propietario.Tabla.Campo
• Propietario• Identificador que define al usuario propietario de la tabla
• Cuando un usuario se conecta al SGBD para trabajar con él tiene un identificador, de uso personal, asignado por el Administrador del Sistema
• El propietario de una tabla puede acceder y modificar datos y puede autorizar a otros usuarios a consultar y modificar datos de las tablas de su propiedad (mediante GRANT).
• El creador y propietario de una tabla es quien la define (CREATE)
• Tabla:• Es el identificador que se pone como nombre a la tabla
• Pueden haber dos o más tablas con el mismo nombre si son de propietarios distintos
• Cuando se escribe una sentencia SQL de manipulación de datos, se puede o no poner el identificador propietario para referirse a una tabla. Si no se pone, el sistema ejecuta la sentencia como si el propietario de la tabla es el usuario que la manda a ejecutar (utilizando el identificador personal del usuario)
• Campo• Columna de la tabla
• No debe existir ambigüedad al referirse a un campo ( si un campo está repetido en más de una tabla, hay que poner el nombre de la tabla, y si existen varias tablas con el mismo nombre, el nombre del propietario)
CREATE TABLE
• Sirve para definir tablas en un SGBD• Antes de referirse a una tabla, ésta debe estar definida en el catálogo
• Tabla• Nombre asignado a la tabla que se va a crear• Si no se pone lo contrario, el propietario es el usuario que está
ejecutando la orden• Col1, Col2, ...:
• Nombres asignados a los campos.• Tipo1, Tipo2, ...:
• Tipo de datos del campo
CREATE TABLE Tabla [Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [, Col2 Tipo2 [NOT NULL] [CHECK restricciones de columna]] …
CREATE TABLE• Tipos de datos
• INTEGER, INT: Entero largo.• SMALLINT: Entero corto.• FLOAT, REAL: Punto flotante.• DECIMAL(p,s): Decimal con precisión p, escala s.• CHARACTER(n), CHAR(n): Alfanumérico de
longitud fija.• VARCHAR(n): Alfanumérico de longitud variable.• DATE: Fecha.• TIME: Hora.• TIMESTAMP: Instante.
CREATE TABLE
NOT NULLNo se admite el valor nulo como dato en ese campo (hay que poner algo)
CREATE TABLE Tabla [Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] [, Col2 Tipo2 [NOT NULL] [CHECK restricciones de columna]] …
CREATE TABLE• CREATE TABLE Prueba
(Código NUMBER (3) CHECK (Código BETWEEN 1 AND 5))
• CREATE TABLE Empleado• (idemp CHAR(4) PRIMARY KEY,• nombre CHAR(40) NOT NULL,• salario NUMBER(10) NOT NULL,• iddep CHAR(2) NOT NULL,• FOREIGN KEY (iddep) REFERENCES departamento)
• La instrucción CREATE TABLE crea la tabla y no su contenido (está vacía). Para incluir registros en ella se usa la instrucción INSERT
• Un usuario no puede definir tablas sino ha sido autorizado para ello
CONSTRAINTS• Permiten definir la manera en que Database Engine
(Motor de base de datos) exigirá automáticamente la integridad de una BD
• Las restricciones definen reglas relativas a los valores permitidos en las columnas y constituyen el mecanismo estándar para exigir la integridad
CONSTRAINTS[ CONSTRAINT constraint_name ]
{ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR =
fillfactor | WITH ( < index_option > [ , ...n ] ) ] [ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] | [ FOREIGN KEY ] REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] [ NOT FOR REPLICATION ] |
CHECK [ NOT FOR REPLICATION ] ( logical_expression ) }
CONSTRAINTS• Tipos de constraints
• NULL/NOT NULL• La columna no acepta valores nulos
• CHECK• Limitación de los valores que se pueden asignar a una
columna• UNIQUE
• Exigen la unicidad de los valores de un conjunto de columnas
• En una restricción UNIQUE, dos filas de la tabla no pueden tener el mismo valor en las columnas
• Las claves principales también exigen exclusividad, pero no aceptan NULL como uno de los valores exclusivos
CONSTRAINTS• Tipos de constraints
• PRIMARY KEY• Identifican la columna o el conjunto de columnas
cuyos valores identifican de forma exclusiva cada una de las filas de una tabla
• Dos filas de la tabla no pueden tener el mismo valor de clave principal
• No se pueden asignar valores NULL a ninguna de las columnas de una clave principal
• Se recomienda utilizar una columna pequeña de tipo entero como clave principal
• Todas las tablas tienen que tener una clave principal
CONSTRAINTS• Tipos de constraints
• FOREIGN KEY• identifican y exigen las relaciones entre las tablas• Una clave externa de una tabla apunta a una clave candidata de otra tabla• No se puede insertar una fila que tenga un valor de clave externa, excepto
NULL, si no hay una clave candidata con dicho valor• ON DELETE controla las acciones que se llevarán a cabo si intenta eliminar
una fila a la que apuntan las claves externas existentes• NO ACTION especifica que la eliminación produce un error• CASCADE especifica que también se eliminan todas las filas con claves externas que
apuntan a la fila eliminada• SET NULL especifica que todas las filas con claves externas que apuntan a la fila
eliminada se establecen en NULL• SET DEFAULT especifica que todas las filas con claves externas que apuntan a la fila
eliminada se establecen en sus valores predeterminados
• ON UPDATE define las acciones que se llevarán a cabo si intenta actualizar un valor de clave candidata a la que apuntan las claves externas existentes
• Opciones NO ACTION, CASCADE, SET NULL y SET DEFAULT
CONSTRAINTS• Tipos de constraints
• CLUSTERED/NOT CLUSTERED• Indica que se ha creado un índice agrupado o no agrupado para la restricción
PRIMARY KEY o UNIQUE• De forma predeterminada, el valor de las restricciones PRIMARY KEY es
CLUSTERED, y el de las restricciones UNIQUE es NONCLUSTERED• En una instrucción CREATE TABLE, se puede especificar CLUSTERED tan
sólo para una restricción. Si especifica CLUSTERED para una restricción UNIQUE y especifica también una restricción PRIMARY KEY, el valor predeterminado de PRIMARY KEY es NONCLUSTERED.
• DEFAULT• Especifica el valor suministrado para la columna cuando no se ha especificado
explícitamente un valor durante la inserción• Las definiciones DEFAULT se pueden aplicar a cualquier columna excepto a
las definidas como timestamp o a aquellas que tengan la propiedad IDENTITY
CONSTRAINTS• Tipos de constraints
• IDENTITY • Indica que la nueva columna es una columna de identidad• Cuando se agrega una nueva fila a la tabla, el Database Engine (Motor de base
de datos) proporciona un valor incremental único para la columna• Las columnas de identidad se utilizan normalmente con las restricciones
PRIMARY KEY como identificadores de fila únicos de la tabla• La propiedad IDENTITY se puede asignar a las columnas tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0)
• Sólo se puede crear una columna de identidad para cada tabla• Las restricciones DEFAULT y los valores predeterminados enlazados no se
pueden utilizar en las columnas de identidad• En este caso, deben especificarse el valor de inicialización y el incremento, o
ninguno de esto valores. Si no se especifica ninguno, el valor predeterminado es (1,1).
• seed Es el valor que se utiliza para la primera fila cargada en la tabla.• increment Es el valor incremental que se agrega al valor de identidad de la
fila cargada anterior.
CONSTRAINTS: Ejemplos• CREATE TABLE cust_sample ( cust_id int PRIMARY
KEY, cust_name char(50), cust_address char(50), cust_credit_limit money, CONSTRAINT chk_idCHECK (cust_id BETWEEN 0 and 10000 ));
• CREATE TABLE part_sample (part_nmbr int PRIMARY KEY, part_name char(30), part_weight decimal(6,2), part_color char(15) );
CONSTRAINTS: Ejemplos• CREATE TABLE order_part (order_nmbr int,
part_nmbr int FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION, qty_ordered int);
ALTER TABLE• Se utiliza para modificar la estructura de la tabla• Los motivos por los que se modifica la estructura de una tabla pueden ser:
• Borrar alguna columna• Cambiar el tipo de alguna columna• Cambiar la longitud de algún atributo• Modificar el orden de las columnas• Añadir nuevas columnas
• ALTER TABLE Tabla • [ADD (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]]• [ADD (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] ...• [MODIFY (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]]• [MODIFY (Col1 Tipo1 [NOT NULL] [CHECK restricciones de columna]] ...• [DROP (Col1)]…
• ALTER TABLE asignatura• ADD (FOREIGN KEY (idprofesor) REFERENCES profesor)
ALTER TABLEALTER en SQL SERVER 2008
• ALTER TABLE tabla
• DROP COLUMN col1 (Borrar columna)
• ALTER COLUMN col1 (Modificar columna)
• ADD col2 tipo (Añadir columna)
DROP TABLE• Instrucción que se utiliza para borrar una tabla• Borra su contenido y su estructura• Si hay claves ajenas no se puede borrar (primero hay que
borrar la otra tabla)• Borra del catálogo la descripción de la tabla• Se pierden los datos que contiene la tabla• Si hay alguna vista basada en la tabla también se pierde• Se pierden los objetos basados en esta tabla (vistas, índices,
sinónimos, etc.). Borrado en cascada.
• DROP TABLE Tabla
CREATE VIEW• Se utiliza para definir una vista
• CREATE VIEW Vista [(Col1 [, Col2] ...] AS Subselect [WITH CHECK OPTION] [READ ONLY]
• Subselect: Sentencia SELECT sobre la que se va a realizar la vista (la que se va a grabar en el catálogo
• Vista: Nombre que se le va asignar a la vista
• La SUBSELECT puede tener: SELECT, FROM, WHERE, GROUP BY, HAVING
• La SUBSELECT no puede tener: UNION, INTERSECT, MINUS, ORDER BY
• El nombre de la vista se especifica de forma similar a una tabla
• Si no se pone el nombre del usuario el sistema lo pone automáticamente
• Propietario.Vista
• Col1, Col2, ...:
• Indica que las columnas que se van a evaluar en la Subselect se les va a dar ese nombre (es decir, que tiene distinto nombre en la vista que en la tabla desde donde se crean)
• Es opcional, si no se ponen se mantienen los mismos nombres
• Es obligatorio poner nombres en las columnas si los campos de la Subselect son calculados
• Si se especifica nombre en la columna debe tener el mismo número de columnas que la Subselect
• También se puede cambiar en las vistas el orden de las columnas (especificándolos en la SELECT con el nuevo orden).
• WITH CHECK OPTION:
• El dato a insertar cumple las restricciones puestas sobre las vista
• Indica que las operaciones de modificación (INSERT, UPDATE) realizadas sobre la vista, deben comprobar la condición de creación de la vista (el WHERE de la SELECT de la vista)
• READ ONLY: Si se pone esta opción no se puede escribir sobre la vista (sólo consultar)
CREATE VIEWUSE AdventureWorks ; GO IF OBJECT_ID ('hiredate_view', 'V') IS NOT NULL DROP VIEW hiredate_view ; GO CREATE VIEW hiredate_view
AS SELECT c.FirstName, c.LastName, e.EmployeeID,
e.HireDateFROM HumanResources.Employee e JOIN
Person.Contact c on e.ContactID = c.ContactID ; GO
CREATE VIEW• WITH ENCRYPTION (SQL SERVER)• Se muestran columnas calculadas, columnas con el nombre cambiado y varias
columnasUSE AdventureWorks ; GO IF OBJECT_ID ('Purchasing.PurchaseOrderReject', 'V') IS NOT NULL DROP
VIEW Purchasing.PurchaseOrderReject ;GO CREATE VIEW Purchasing.PurchaseOrderReject WITH ENCRYPTION
AS SELECT PurchaseOrderID, ReceivedQty, RejectedQty, RejectedQty / ReceivedQty AS RejectRatio, DueDateFROM Purchasing.PurchaseOrderDetailWHERE RejectedQty / ReceivedQty > 0 AND DueDate > CONVERT(DATETIME,'20010630',101) ; GO
CREATE VIEW• WITH CHECK OPTION (SQL SERVER)• Vista que hace referencia a cinco tablas y permite modificar datos
aplicados únicamente a los empleados que viven en Seattle.USE AdventureWorks ; GO IF OBJECT_ID ('dbo.SeattleOnly', 'V') IS NOT NULL DROP VIEW dbo.SeattleOnly ;GO
CREATE VIEW dbo.SeattleOnly AS SELECT c.LastName, c.FirstName, a.City, s.StateProvinceCodeFROM Person.Contact AS c JOIN HumanResources.Employee AS e ON c.ContactID = e.ContactID JOIN HumanResources.EmployeeAddress AS ea ON e.EmployeeID = ea.EmployeeID JOIN Person.Address AS a ON ea.AddressID = a.AddressID JOIN Person.StateProvince AS s ON a.StateProvinceID = s.StateProvinceID WHERE a.City = 'Seattle' WITH CHECK OPTION ; GO
CONSULTAR Y ACTUALIZAR VISTA• Una vista puede consultarse como una tabla más y para el usuario es como una tabla
SELECT Col1 [, Col2] ... FROM Vista• Si se hace una actualización sobre una vista (INSERT, UPDATE, DELETE), éstas deben ser repercutidas en las
tablas de base por el SGBD
• No siempre es posible:
• Si hay campos calculados• Si contiene una Yunción (JOIN: SELECT sobre varias tablas)• Tienen filas no repetidas (DISTINCT en la SELECT)• Tienen funciones colectivas• Tienen agrupamiento (GROUP BY, HAVING)• Tienen sentencias subordinadas que hacen referencia a la misma tabla• Se basa en otra vista que no es actualizable.• Tienen campos que provienen de cálculos, funciones, etc.
• SELECT * FROM VISTA1• DELETE FROM Vista1 WHERE condición ...• INSERT INTO Vista 1 Col1, Col2, ... VALUES Val1, Val2, ...• UPDATE Vista1 SET Col1=expresión1 [,Col2=expresión2] ...
[WHERE condición]
DROP VIEW• DROP VIEW
• Se utiliza para destruir una vista, y borrarla del catálogo
DROP VIEW Vista
• Vista: Nombre de la vista a destruir• Se borra del catálogo la vista (ya no se admiten referencias a
ella)• Al destruir una vista se pierde también las vistas que se
basen en ella, si las hay (se puede producir una destrucción en cadena)
VISTAS• UTILIDAD DE LAS VISTAS
• Prohibir el acceso a datos confidenciales. Se pueden hacer vistas sobre tablas privadas y hacer públicos parte de los datos (Vistas)
• Si una tabla contiene datos que no deben ser accesibles a algunos usuarios, se puede crear una vista en la que estos datos no aparezcan y autorizar a estos usuarios a trabajar con la vista y no con la tabla (datos protegidos). Se pueden esconder campos o registros que cumplan ciertas condiciones
• Permiten a distintos usuarios ver los mismos datos de diferentes formas (todos trabajan con la misma base de datos pero con distinta visión)
• Simplificar la percepción del usuario. La vista permite al usuario concentrarse sólo en los datos de su interés personal, y hacer caso omiso de los otros datos
• Simplificar la formulación de consultas complejas o repetitivas. Si una consulta es complicada y debe ser usada por usuarios sin mucha experiencia, se crea una vista y se deja hecha para su uso, a través de SELECTS sencillas. También se puede ahorrar tiempo (aunque el usuario no sea novato) si es una consulta larga o repetitiva, haciendo una vista, y trabajar con ella en lugar de con las tablas
• Aumentar la independencia de los programas con respecto a los datos (independencia lógica de los datos). Un SGBD tiene independencia física de los datos porque los usuarios no tienen nada que ver en la estructura física de los datos almacenados (no saben como se guardan los datos en disco). Y tiene independencia lógica de los datos porque los usuarios y los programas son independientes de la estructura lógica de la base de datos (reestructuración y crecimiento (incluir campos nuevos)). Si se cambian nombres a tablas (por cualquier razón), o se desglosa una tabla en dos, las sentencias SQL incluidas en los programas que se refieren a estas tablas, deben ser revisadas y cambiadas. Si se define una vista sobre la nueva estructura dejando en la vista los mismos nombres de las tablas viejas, el programa sigue valiendo
COMPOSICIÓN DE CONSULTAS
• Una composición de consultas es la unión del resultado de varias consultas formando una tabla única
• Consulta compuesta
• Es una consulta que resulta de unir otras dos (que también pueden ser compuestas)
• Para poderse realizar, las dos SELECTS deben tener el mismo número de columnas y del mismo tipo en cada posición relativa, obteniendo una tabla con las mismas columnas y tipos
• TIPOS: Union, Intersección, Minus
COMPOSICIÓN DE CONSULTAS• UNION
SELECT __________ UNION SELECT __________
• Se produce una tabla que contiene todas las filas resultantes del primer SELECT más todas las filas resultantes del segundo SELECT
• Si hay filas iguales se eliminan para que no hayan repeticiones• Dos filas son iguales si todos sus valores son iguales• Similar al operador OR
• UNION ALL.SELECT __________ UNION ALL SELECT __________
• Tabla que contiene todas la filas resultantes del primer SELECT más todas las resultantes del segundo SELECT, incluidas las que sean iguales
COMPOSICIÓN DE CONSULTAS
• INTERSECT
SELECT __________ INTERSECT
SELECT __________
• Halla los registros comunes a dos tablas
• Similar al operador AND
COMPOSICIÓN DE CONSULTAS• MINUS o EXCEPT
SELECT __________ EXCEPT SELECT ________SELECT __________ MINUS SELECT _________
• Halla los elementos que pertenecen al primer SELECT y que no pertenecen al segundo
• Toma todos los resultados de la primera instrucción SQL, y luego sustrae aquellos que se encuentran presentes en la segunda instrucción SQL para obtener una respuesta final
• Si la segunda instrucción SQL incluye resultados que no están presentes en la primera instrucción SQL, dichos resultados se ignoran
ÍNDICES• Tablas de gran tamaño, el proceso de recuperación de datos puede
ser lento• Por ejemplo
• Para un pedido hay que recorrer la tabla de líneas de pedido completa, de principio a fin
• Mecanismo para acelerar las búsquedas• Índice
• Lista de claves con una estructura tal que el servidor puede realizar búsquedas de forma muy rápida
• También puede establecer el orden en que se almacenan las filas en una tabla
• Cada vez que se inserta, modifica o elimina de una tabla de la cual depende uno o varios índices, el servidor tiene que actualizar la tabla de datos y todos los índices que existan (consistencia información)
ÍNDICES• El diseño físico es muy dependiente del SGBD que se use. En él se describen las distintas
formas de almacenar los datos, índices a utilizar, rutinas de compresión, parámetros físicos de la base de datos, etc
• En una sentencia SELECT se seleccionan ciertos registros en función de unas condiciones• Para recuperar los registros pedidos se puede hacer leyendo completamente la tabla o tablas
participantes (búsqueda secuencial)
• Si la tabla tiene muchos registros esto es muy lento• Los índices son ficheros auxiliares que se utilizan para leer directamente el registro necesario
(sin pasar por los registros previos), lo que se traduce en más rapidez• Un índice es una estructura de datos que permite acceder a las filas de una tabla siguiendo el
orden de los valores de alguna o algunas de sus columnas• El SGBD trabaja con bloques (unidad de transferencia de datos entre el disco y la memoria
en las operaciones de Lectura/Escritura), generalmente 4096 Bytes. Para obtener un registro por lo menos se ha de ver un bloque
• Un índice transforma el contenido de uno o más campos en una dirección. Si se da el valor de un campo (o varios), la dirección indica donde está (acceso directo a los datos)
• El índice suele guardarse en un fichero auxiliar donde se guardan todos los valores de los campos indexados ordenados y su dirección de bloque
ÍNDICES• El SGBD se encarga de mantener estos índices• Cada vez que se inserte o borre una fila hay que actualizar
los índices, lo que supone más tiempo• En una tabla se pueden definir uno o varios índices o
ninguno, sobre uno o varios campos• Se pueden crear los índices antes de que la tablas tenga
datos• Se pueden crear índices en tablas o vistas• Conclusión:
• Los índices aceleran las búsquedas• Los índices ralentizan las actualizaciones• Hay que pensar bien donde poner los índices
ÍNDICES• Un índice debe crearse sobre una tabla o vista• Índices: Agrupados y no agrupados• Agrupados (CLUSTERED)
• Sólo puede haber un índice agrupado por tabla• Establece el orden de las filas en la tabla a la que pertenece• Si no se pone índice agrupado las filas se almacenan en el
orden en que se introducen• Hace más fáciles las búsquedas en las tablas pero las
operaciones no son añadir fila y ya está (hay que insertarlas y cambiar su orden)
• Por defecto el índice agrupado es el índice agrupado a la clave principal, si hay
• Los índices no agrupados hacen referencia a las filas de datos correspondientes, basándose en el índice agrupado
ÍNDICES: CREATE INDEX• Generalmente el ABD es el que crea y destruye los índices, teniendo en
cuenta cuales pueden ser los más usados• El SGBD se encargará de usarlos si existen• Para crear un índice hay que especificar principalmente la tabla sobre la que
se va a crear y la columna o columnas que se van a utilizar para establecer el orden.
CREATE [UNIQUE] INDEX índice ON tabla (Col1 [ASC / DESC] [, Col2 [ASC/DESC] ] ...) [CLUSTERED] [WITH CHECK OPTION]
• Índice: Nombre que se le asigna al índice• Tabla: Tabla sobre la que se define el índice• DESC: Si se especifica, el orden del índice es de mayor a menor, si no se
pone es ASC por defecto• UNIQUE: Indica que los valores indexados no pueden repetirse (si se
intenta insertar o actualizar un valor repetido da un error). El índice no puede contener duplicados. Puede haber sólo un registro con campo nulo
ÍNDICES: CREATE INDEXCREATE [UNIQUE] INDEX índice ON tabla (Col1 [ASC / DESC] [, Col2 [ASC/DESC] ] ...) [CLUSTERED] [WITH CHECK OPTION]
• CLUSTER
• El índice CLUSTER (sólo puede haber uno por tabla) indica que las filas de la tabla correspondiente deben estar almacenadas físicamente según el orden de las columnas que impone el índice. En la inserción CLUSTER se almacena el registro físicamente tan próximo como sea posible a su posición de orden)
• Puede tener ventajas en ciertas operaciones• Crea un índice en el que el orden lógico de los valores de clave determina el orden físico de las
filas correspondientes de la tabla• Cree el índice agrupado antes de crear los índices no agrupados. Los índices no agrupados
existentes en las tablas se vuelven a generar al crear un índice agrupado.• WITH CHECK OPTION
• Exige que todas las instrucciones de modificación de datos ejecutadas en la vista (INSERT, UPDATE, DELETE) sigan los criterios establecidos en la SELECT de la vista.
• Cuando una fila se modifica mediante una vista, WITH CHECK OPTION garantiza que los datos permanezcan visibles en toda la vista después de confirmar la modificación
• Una vista se crea con una condición (vuelo de iberia), se inserta un registro en la vista (vuelo de binter). El vuelo se crea en la tabla, pero si se seleccioina la vista no está (no cumple la condición). Con CHECK OPTION no permitiría el INSERT sobre la vista
ÍNDICES: CREATE INDEXEjemplo:
CREATE TABLE t1 (a int, b int, c AS a/b);
CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c);
INSERT INTO t1 VALUES (1, 0);
ÍNDICES: CREATE INDEXEjemplo: Crear un índice no agrupado sencillo
CREATE INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (VendorID);
ÍNDICES: CREATE INDEXEjemplo: Crear un índice compuesto no agrupado
CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD
ON Sales.SalesPerson (SalesQuota, SalesYTD);
ÍNDICES: CREATE INDEXEjemplo: Crear un índice no agrupado único
CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure(Name);
ÍNDICES: DROP INDEX
• Sentencia que se utiliza para destruir un índice (borrarlo del catálogo)
DROP INDEX índice
• Si se destruye una tabla sobre la que hay índices definidos, también se destruyen éstos automáticamente
ÍNDICES• CUANDO USAR UN ÍNDICE
• Definir un índice en el campo clave, para asegurar que éste es único, además de ser un campo de acceso frecuente
• Usar en campos claves alternativas (DNI, Número de la Seguridad Social, número de cuenta corriente, etc.)
• Usar un índice para cada clave ajena, puesto que éstas son utilizadas en las yunciones (relaciones entre tablas)
• En campos que se usan frecuentemente en SELECTS• En campos que se necesiten tener ordenados• Si las tablas tienen pocas filas no es muy conveniente los
índices• Más índices de los debidos supone espacio y tiempo perdido• Menos índices de los debidos suponen lentitud
ÍNDICES� INTEGRIDAD REFERENCIAL
◦ Consiste en garantizar que cualquier clave ajena se corresponde con una clave primaria o es nula (por ejemplo, no hay empleados que pertenezcan a algún departamento inexistente)
◦ Esto es misión del SGBD (no del usuario, que si está haciendo una consulta interactiva no sabe como están los datos)
◦ Utilizando la integridad referencial se aumenta la calidad de los datos y se evitan errores
◦ Cuando se da de alta a un empleado, por ejemplo, es el SGBD el que verifica que existe el departamento, o cualquier clave ajena (y no el programador)
◦ También se comprueba, si se intenta borrar un departamento y tiene asignados empleados
◦ Rechazar operación si tiene empleados asignados: Restringir.
◦ Suprimir el departamento y los empleados: Propagar en cascada.
◦ Suprimir el departamento y poner a nulo el campo departamento en empleados: Hacer nula la clave ajena
◦ Es misión del ABD decidir si la integridad la realiza el SGBD o el programa del usuario (es mejor que la controle el Gestor por facilidad y por calidad de los datos)
SINÓNIMOS
� Los sinónimos se utilizan para poder identificar a las tablas con un nombre diferente al que se les dio en su creación (por ejemplo para simplificar su nombre original)
� Son alias que se le asigna a una tabla� Los sinónimos sólo son utilizables por el usuario que los ha creado
� Si un usuario quiere referirse a una tabla original con un sinónimo debe crearlo
� Se pueden crear diferentes sinónimos para una misma tabla� No se puede crear un sinónimo sobre una tabla con un nombre de sinónimo ya existente (aunque sea otra tabla)
SINÓNIMOS: CREATE SYNONYM
� Con esta orden se crea un sinónimo de una tabla
CREATE SYNONYM nombre_sinónimo FOR Tabla
� A partir del momento de la creación del sinónimo en cualquier sentencia SQL se puede usar indistintamente el nombre de la tabla o el nombre del sinónimo
� Se pueden crear sinónimos también para: Vistas, procedimientos almacenados, funciones,…
SINÓNIMOS: DROP SYNONYM
� Esta instrucción se usa para borrar un sinónimo de una tabla del catálogo de la base de datos
DROP SYNONYM nombre_sinónimo
Transact SQL
� Los SGBD permiten almacenar datos, recuperarlos y manipularlos
� Pueden almacenar y ejecutar la lógica necesaria para el tratamiento de esa información
� Utilización de un lenguaje basado en SQL
� Transact SQL: Lenguaje SQL de SQL Server
Transact SQL: Aplicaciones
� Utilización de tipos de datos
� Utilización de variables
� Estructuras de control del flujo de ejecución
� Funciones predefinidas
� No son aplicaciones ejecutables independientes, sino elementos que el servidor de datos puede ejecutar
Transact SQL: Aplicaciones
� Procedimientos almacenados
� Desencadenadores
� Funciones de usuario
� Ejecutar un proceso
� Desde un cliente hacer llamadas al servidor de base de datos
� NO se puede hacer◦ Diseñar una interfaz de usuario
◦ Solicitar de forma directa información al usuario
Transact SQL: Aplicaciones
� Procedimientos almacenados◦ Programa que se ejecuta bajo demanda
� Desencadenadores, disparadores o Triggers◦ El código se ejecuta automáticamente en el momento que se produce un cierto evento
� Funciones◦ Programa que realiza una tarea determinada bajo demanda
Transact SQL: Tipos de datos
� No sólo se puede trabajar con información alojada en columnas de tablas o vistas
� Datos almacenados temporalmente en variables
Transact SQL: Tipos de datos
� Tinyint (entero 0, 255)� Smallint (entero -32768, 32767)� Int (entero positivos y negativos grandes)� Bigint (entero positivos y negativos muy grandes)� Smallmoney (decimal -214758,3648; 214748,3647)
� Money (decimal grandes)� Real (decimal -3,4E+38; 3,4E+38)� Float (decimal -1,79E+308; 1,79E+308)� Bit (0, 1)
Transact SQL: Tipos de datos
� Decimal (decimales)� Char (longitud fija)� Varchar (longitud variable con un máximo)� Text (longitud variable sin máximo)� Binary � Varbinary� Image� Smalldatetime (fecha y hora 1/1/1900; 6/6/2079)� Datetime (fecha y hora 1/1/1753; 31/12/9999)
Transact SQL: Tipos de datos
� Nuevos sql server 2008◦ Date (fecha sin hora)◦ Time (hora sin fecha)◦ Datetime2 (igual a datetime pero con más fechas)◦ Datetimeoffset (fecha, hora y zona horaria)◦ Hierarchyid (relaciones entre filas de una tabla)◦ Geometry (coordenadas espaciales sobre un plano)◦ Gegraphy (coordenadas espaciales sobre una superficie elipsoidal)
Transact SQL: Tipos de datos
� No se pueden usar en columnas de una tabla pero sí en variables◦ Cursor� Almacena un cursor de datos asociado a una consulta o una vista
� Permite acceso a los datos fila a fila◦ Table� Almacenar en una variable una tabla completa� Se puede realizar sobre la variable cualquier operación válida en una tabla
� P.e.: crear una tabla virtual, temporal con el fin de devolver unos resultados elaborados a partir de los datos de la base
Transact SQL: Variables
� SQL: ◦ Los datos se almacenan en una tabla de la bd◦ Permanecen allí hasta que se recuperan
� Transact SQL (para lógica de proceso)◦ Se puede necesitar trabajar con datos temporales (variable)◦ No se almacenan en la bd◦ Variable: Identificador, nombre asociado a una posición de memoria◦ Almacenar valor (asignación), recuperarlo (lectura)
Transact SQL: Variables
� Antes de utilizar � Declarar◦ DECLARE @nombre tipo◦ @variable: @ para declaración, asignación, lectura◦ DECLARE @Suma int
� Asignación◦ SELECT @nombre = valor◦ SELECT @Suma = 12◦ SELECT @Suma = Count(numem) FROM temple
� El valor de una variable◦ Puede almacenarse en una tabla◦ Asignarlo a otra variable◦ Ser devuelto como resultado de una función o sp
Transact SQL: Variables
� Programa 1USE temple
DECLARE @suma int
SELECT @suma = COUNT(numem) FROM temple
PRINT @suma
Transact SQL: Variables
� Expresiones◦ Variables, constantes, resultado de funciones pueden ser operandos formando parte de expresiones
◦ Expresión: Operandos + operadores � Resultado
◦ Aritméticas (cálculos, con resultado) y Lógicas (relaciones � v, f t,f)
◦ Aritméticas (+ - * / %)
◦ Lógicas (= <> < <= > >= !< !>)
Transact SQL: Variables
� Programa 2USE temple
DECLARE @suma int
DECLARE @resultado int
SELECT @suma = COUNT(numem) FROM temple
SELECT @resultado = @suma * AVG(salar)
PRINT @resultado
Transact SQL: Variables
� Programa 3USE temple
IF (SELECT COUNT(numem) FROM temple) >10
PRINT ‘Hay muchos empleados’
ELSE
PRINT ‘La empresa es pequeña’
Transact SQL: Control de flujo
� SQL◦ Consulta o manipulación de datos sobre una tabla, vista, varias tablas, algunas filas
◦ Se ejecuta en un solo paso de manera incondicional
◦ No se controla la operación fila a fila
◦ La sentencia se ejecuta en el momento que se envía al servidor
Transact SQL: Control de flujo
� Transact SQL◦ Se puede desviar el flujo secuencial de ejecución según queramos◦ Alterar el flujo de ejecución basándonos en una expresión lógica (condicional) IF/ELSE◦ Que el flujo recorra varias veces las mismas sentencias (bucle) WHILE, WAITFOR◦ Desviar el flujo de ejecución a otro punto (salto) GOTO, BREAK, CONTINUE◦ Cuando la sentencia de control afecta no solo a la siguiente sentencia, sino a un grupo: BEGIN/END
Transact SQL: Variables
� Programa 4USE temple
DECLARE @contador smallintSELECT @contador = 1WHILE @contador !>10
� mientras contador no sea mayor que 10
BEGINPRINT @contadorSELECT @contador = @contador + 1
END
Transact SQL: Variables
� DECLARE @total int, @hoy datetime
� DECLARE @cp char(5) @ciudad varchar(30)
� Declarar una variable de tipo tabla (3 campos)
DECLARE @tablaempleados table
(numem char(5) PRIMARY KEY,
salar money,
nomem varchar(30))
Transact SQL: Variables
� Variable recién creada no tiene valor �asignación
� Asignación de valores simples◦ SELECT @suma = 10◦ SET @suma = 10
� Otras asignaciones◦ SELECT @suma = AVG(salar) FROM temple◦ Consulta de la cual se obtiene el resultado a asignar a la variable◦ SET no se puede utilizar
Transact SQL: Variables
� Variables predefinidas◦ Aparte de las variables que podamos declarar, podremos utilizar otras ya predefinidas
◦ Globales: Disponibles siempre (no hay que definirlas ni asignarles valor)
◦ @@nombre
Transact SQL: Variables� Variables predefinidas: Algunas◦ @@CONNECTIONS
� Nº de conexiones efectuadas desde que se inició SQL Server
◦ @@CURSOR_ROWS� Nº de filas del último cursor abierto
◦ @@FETCH_STATURS� Estado tras la última recuperación de fila a través de un cursor
◦ @@IDENTITY� Valor asignado a la última columna de identidad que se haya insertado
◦ @@ ROWCOUNT� Nº de filas afectadas por la última sentencia que se haya ejecutado
◦ @@SERVERNAME� Nombre del servidor
◦ @@SERVICENAME� Nombre del servicio
◦ @@VERSION� Información de versión del servidor
Transact SQL: Variables
� El valor de las variables predefinidas se obtiene con SELECT◦ SELECT @@SERVERNAME
◦ PRINT @@SERVERNAME
◦ SELECT @@SERVERVERSION AS ‘Versión de SQL Server’, @@SERVERNAME AS ‘Servidor’
Transact SQL: Variables
� Cursores◦ No utilizar si no es totalmente necesario◦ Ralentizan muchísimo el rendimiento de la aplicación◦ Intentar utilizar SQL complejas en lugar de cursores◦ Obtener un cursor para manipular un conjunto de datos◦ Se puede trabajar con un conjunto de datos fila a fila, en lugar de hacerlo con todos los datos� Definir el conjunto de datos: DECLARE� Abrir el cursor: OPEN� Recuperar los datos de una fila en variables: FETCH� Procesar� Liberar el cursor: DEALLOCATE
Transact SQL: Variables
� Cursores: Definir cursor1. Como variable global, luego se le asigna un valor2. Como objeto cursor1. DECLARE CursorNumem CURSOR FOR
SELECT numem, salar FROM temple � No se le pone @ a CursorNumem (no es una variable local).� Se le asigna un nombre a un objeto del tipo CURSOR� Cursor asociado a un conjunto de datos
2. DECLARE @CursorNumem cursorSET @CursorNumem = CURSOR FORSELECT numem, salar FROM temple
� La variable local podría utilizarse como cursor para distintos conjuntos de datos (cambiando la asignación)
Transact SQL: Variables
� Cursores: Abrir cursor◦ Después de definir el cursor: Abrirlo antes de poder acceder a las filas del conjunto de datos
◦ Desplazamiento secuencial (de la primera a la última)� DECLARE CursorNumem CURSOR FOR SELECT …
◦ Desplazamiento libre (a cualquier fila)� DECLARE CursorNumem SCROLL CURSOR FOR SELECT …
◦ Abrir el cursor� OPEN cursor (nombre del cursor o variable)
Transact SQL: Variables
� Cursores: Recuperar filas del conjunto◦ FETCH fila FROM cursor INTO variables
◦ fila� NEXT: Siguiente al actual o 1ª si se acaba de abrir
� PRIOR: Anterior
� FIRST: Primera
� LAST: Última
� ABSOLUTE nº: fila a recuperar
� RELATIVE +- nº: nº de filas a moverse adelante o atrás
◦ @@FETCHSTATUS� Determinar si la operación FETCH ha tenido éxito (devuelve 0)
Transact SQL: Variables
� Cursores: Liberar cursor◦ Después de usar el cursor, liberar los recursos utilizados� DEALLOCATE
Transact SQL: Variables
� Table◦ Tabla temporal en memoria
◦ Las sentencias SQL actúan sobre conjunto de datos
◦ Se pueden crear tablas virtuales o temporales (no se almacenan en la bd)� Definir variable table
� Usarla como una tabla: insertando filas, modificándolas, seleccionando datos, etc.
Transact SQL: Variables� Programa 5
USE temple
-- Variable que funciona como tabla
DECLARE @TbEmpleados table
(numem char(3) PRIMARY KEY,
salar money, fecin datetime)
-- Variables para ir recuperando los valores
DECLARE @varnumem char(3)
DECLARE @varsalar money
-- Cursor del que se recuperan los valores
DECLARE @CursorNumem
SET @CursorNumem = CURSOR FOR SELECT numem, salar FROM temple
-- Abrir el cursor y recuperar 1ª fila
OPEN @CursorNumem
FETCH NEXT FROM @CursorNumem INTO @varnumem, @varsalar
-- Recorrer la tabla mientras hayan filas
WHILE @@FETCHSTATUS=0
BEGIN
--Las insertamos en la variable table, junto con la fecha y la hora
INSERT INTO @TbEmpleados VALUES (@varnumem, @varsalar, GETDATE())
--Siguiente fila
FETCH NEXT FROM @CursorNumem INTO @varnumem, @varsalar
END
--Liberar el cursor
DEALLOCATE @CursorNumem
SELECT * FROM @TbEmpleados
Transact SQL: Funciones
� Realizan tareas concretas (no hay que programarlas)
� Código con un nombre, que para ejecutarlo hay que llamarlo y pasarle los parámetros si son necesarios
� Existen funciones predefinidas y globales
� Se pueden crear otras nuevas: funciones de usuario
Transact SQL: Funciones
� Algunas es necesario pasarles parámetros
� Algunas devuelven un valor o un objeto
� Tipos◦ Matemáticas
◦ De fecha
◦ De cadena
◦ Colectivas
◦ Estadísticas
Transact SQL: Funciones
� Funciones estadísticas◦ Operan sobre un conjunto de datos con el fin de obtener datos estadísticos� Máximo, mínimo, suma, media, número de valores, varianza, desviación típica
� max, min, sum, avg, count, var, stdev
� SELECT FUNCION(campo) FROM tabla / vista
Transact SQL: Funciones
� Programa 6USE temple
SELECT COUNT(numem), MAX(salar), MIN(salar) FROM temple
DECLARE @salariomaximo money
SELECT @salariomaximo = MAX(salar) FROM temple
SELECT numem, nomem, salar FROM temple WHERE salar=@salariomaximo
Transact SQL: Funciones
� Funciones matemáticas◦ Operadores aritméticos � Funciones básicas
◦ coseno, seno, tangente, raíz cuadrada, potencia, logaritmo, redondear números, …
◦ abs, acos, asin atan, atn2, ceiling, cos, cot, degrees, exp floor, log, log10, pi, power, radians, rand, round, sign, sin, sqrt, square, tan
◦ cast y convert: convertir datos numéricos en cadena de caracteres
Transact SQL: Funciones
� Programa 7DECLARE @exponente smallintSELECT @exponente = 0WHILE @exponente !> 8 BEGIN
PRINT ‘2 elevado a ‘ + CAST(@exponente AS CHAR) + ‘= ‘ +
CAST(POWER(2, @exponente) AS CHAR)
SELECT @exponente = @exponente + 1END
Transact SQL: Funciones
� Funciones de cadena◦ Cadena: secuencia de caracteres◦ Obtener nº caracteres, eliminar espacios sobrantes, invertir la secuencia, convertir a mayúsculas y minúsculas, extraer caracteres o subcadenas, reemplazar caracteres◦ ascii, char, charindex, difference, left, len, lower, ltrim, nchar, patindex, quotename, replace, replicate, reverse, right, rtrim, soundex, space, str, stuff, substring, unicode upper
Transact SQL: Funciones
� Programa 8USE temple
SELECT numem, SUBSTR(nomem, PATINDEX (‘% %’, nomem) + 1, LEN (nomem) AS ‘Apellidos empleado’
Obtiene los apellidos del empleados:
juan garcía garcía � garcía garcía
Transact SQL: Funciones
� Otras funciones:◦ De fecha:� http://msdn.microsoft.com/es-es/library/ms186724.aspx
◦ De conjunto de filas:� containstable, freetexttable, opendatasource, openquery, openrowset, openxml
◦ De seguridad:� http://msdn.microsoft.com/es-es/library/ms186236.aspx
Transact SQL: Funciones
� Funciones definidas por el usuario◦ Existen funciones de carácter general
◦ El usuario puede crear otras funciones más específicas
◦ Grupo de sentencias Transact SQL con un identificador (nombre función)
◦ Se ejecutan llamando al identificador
TRIGGERS
� También llamados disparadores o desencadenadores
� Son procedimientos almacenados que se ejecutan automáticamente, en lugar de ser invocados de manera explícita, en el momento en que se desencadena cierto suceso o evento
TRIGGERS
� Un trigger es un SP que se ejecuta automáticamente cada vez quetiene lugar la acción para la que se ha definido
� No se pueden invocar directamente, se puede ejecutar la acciónque activa el trigger
� No admite parámetros y no puede usar la instrucción RETURN� Puede devolver resultados (no se recomienda)� Se ejecutan en segundo plano y no deberían devolver más que
mensajes de error, cuando sea necesario� Dentro del Trigger se puede hacer referencia a objetos de otras
bases de datos (integridad referencial entre objetos de distintasBD)
Beneficios
TRIGGERS
� Se pueden definir varios trigger para cada acción INSERT,UPDATE o DELETE
� No representan una gran sobrecarga de trabajo para SQLServer
� No es recomendable complicar la lógica interna de losdesencadenadores
� Están asociados a una tabla o vista concreta
Beneficios
TRIGGERS
Tablas INSERTED y DELETED
� La tabla INSERTED◦ Las nuevas filas que se han insertado mediante la instrucciónINSERT◦ Los nuevos valores para las filas que se han modificado mediantela instrucción UPDATE
� La tabla DELETED◦ Las filas eliminadas por una instrucción DELETE◦ Los valores viejos de las filas modificadas por una instrucciónUPDATE
Si la acción original modificó varias filas a la vez, el trigger se activará una sola vezy las tablas INSERTED y DELETED contendrán varias filas con las modificaciones
TRIGGERS
Tablas INSERTED y DELETED
� INSERT◦ Los datos insertados se guardan en la tabla inserted◦ INSERT INTO hist …. FROM inserted
� DELETE◦ Los datos borrados se guardan en la tabla deleted◦ INSERT INTO hist …. FROM deleted
� UPDATE◦ Los valores nuevos del registro se guardan en inserted◦ Deleted guarda el registro modificado sin los cambios que se acabande hacer◦ INSERT INTO hist …. FROM inserted o deleted◦ Si no hay cambios:
� Si c1<>deleted.c1 or c2<>deleted.c2 … update� Else no grabar
TRIGGERS
Tablas INSERTED y DELETED
Liceo 2000 – SQL Server 2000 Mónica Frey Grimm
� Las tablas inserted y deleted son creadas automáticamente al entrar en un desencadenador
� Se puede recuperar datos de dichas tablas, pero no añadir� Los nombres de las columnas de estas tablas serán los
mismos que tengan las columnas originales en sus respectivas tablas o vistas
TRIGGERS
Tipos de trigger según el momento de su ejecución
� Desencadenadores INSTEAD OF. Se activan en lugar dela acción original, antes de que tenga lugar la modificación delobjeto base
� Desencadenadores AFTER. Se activan inmediatamentedespués de la modificación de los datos de la tabla base
Una tabla puede tener un número ilimitado de desencadenadores AFTER paracada acción, pero solamente un desencadenador INSTEAD OF por acción.
Las vistas sólo pueden tener desencadenadores INSTEAD OF.
TRIGGERS
Desencadenadores INSTEAD OF
� Se evita que la acción desencadenante sea ejecutada� Se activan automáticamente cuando se ejecuta la instrucción definida� Se activa antes de la ejecución de la acción. La tabla base aún no ha sufrido
modificaciones� Se puede acceder a las tablas Inserted y Deleted� Se pueden usar para controlar los datos antes de que tenga lugar la
modificación, en forma más compleja de la permitida por las restriccionesCHECK
� Dependiendo de las condiciones evaluadas podemos decidir entre hacerefectivos los cambios solicitados o dejarlos totalmente sin efecto
� En una tabla que tenga definida una restricción FOREIGN KEY conoperaciones CASCADE no se puede crear un trigger INSTEAD OF
TRIGGERS
Desencadenadores INSTEAD OF
� INSTEAD OF INSERT
◦ Permite cancelar en forma parcial o total, una operación INSERT� INSTEAD OF UPDATE
◦ Brinda la posibilidad de controlar los cambios antes de que seapliquen a los datos y decidir por último cuales aplicar
� INSTEAD OF DELETE
◦ Permite evitar la eliminación de filas específicas sin necesidad decancelar transacciones
Para cada tabla o vista se puede definir un solo desencadenador INSTEAD OFpor acción activadora (INSERT, UPDATE y DELETE):
TRIGGERS
Desencadenadores AFTERDespués del INSERT, UPDATE, DELETE
Se ejecutan una vez modificados los datos. Sin embargo, como latransacción todavía sigue en curso, podemos decidir la cancelación de laacción
A diferencia de los desencadenadores INSTEAD OF, para confirmar latransacción no hace falta hacer nada especial; ésta se completaráautomáticamente a menos que decidamos descartarla
Se puede definir un número indefinido de desencadenadores AFTER paracada tabla y acción (se ejecutarán uno tras otro en el orden en que sehan definido)
Verificar validez de la operación realizada, actuar sobre otras tablas
TRIGGERS
� Sólo pueden crearse escribiendo código◦ Desde el Management Studio con una consulta SQL
◦ Desde una tabla o vista / Nuevo desencadenador
◦ Desde el Analizador de consultas
Creación y eliminación de Triggers
TRIGGERS
Creación y eliminación de TriggersCREATE TRIGGER NombreTrigger
ON {NombreTabla/NombreVista}
[WITH ENCRYPTION]
{FOR/AFTER/INSTEAD OF} {[INSERT][,][UPDATE][,][DELETE]}
AS
BEGIN
<Cuerpo de la trigger>
END
CREATE TRIGGER tr_CustomersON CustomersAFTER INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí
CREATE TRIGGER tr_CustomersON CustomersFOR INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí
TRIGGERS
Creación y eliminación de Triggers
CREATE TRIGGER tr_Customers ON CustomersAFTER INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí
CREATE TRIGGER tr_Customers ON CustomersFOR INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí
CREATE TRIGGER isr_Customers ON CustomersAFTER INSERTAS-- Inserte sus instrucciones aquí
CREATE TRIGGER tr_Customers ON CustomersWITH ENCRYPTIONFOR INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí
CREATE TRIGGER isr_Customers ON CustomersINSTEAD OF INSERTAS-- Inserte sus instrucciones aquí
CREATE TRIGGER tr_Customers ON CustomersINSTEAD OF INSERT, UPDATE, DELETEAS-- Inserte sus instrucciones aquí
TRIGGERS
� Integridad referencial
� Actualización de una vista en la que participan múltiples tablas
� Realización de un registro o histórico de los cambios realizados en una tabla
Utilidad desencadenadores
TRIGGERS
� Utilidad principal triggers, mantener integridad de los datos◦ Verificando que los datos insertados o modificados son válidos: Validar información◦ Al eliminar una fila no se rompen relaciones entre datos◦ Esto se puede realizar también mediante restricciones CHECK, claves UNIQUE, referenciad de integridad entre tablas◦ En otros caso utilizar Triggers◦ Se lanza antes de hacer la grabación y en el propio triggerse puede hacer que no se grabe
Integridad referencial
TRIGGERS
� Facilita la actualización de una vista en la que participan múltiples tablas
Actualización vistas
TRIGGERS
Histórico� Realización de un registro de los cambios que se efectúanen una tabla� Cada vez que se efectúa un cambio, guardar el registro, indicar quien lo
cambió, cuando, que cambió, tipo de cambio� Se puede controlar desde el VB si se accede a una BD (por software)
� Con trigger funciona siempre independientemente desde donde se haga el acceso� Visual basic, php, asp� Administrador corporativo� Analizador de consultas� Conexiones desde access, …
� Insert � Insert tabla física, Insert tabla histórico� Delete � Delete tabla física, Insert tabla histórico� Update � Update tabla física, Insert tabla histórico
TRIGGERSEjemplo
--Hay varias personas que pueden registrar nuevos libros (quién y cuando resgistró libros)--Operación INSERT sobre la tabla Libros ���� Guardar algunos datos en otra tabla por cada inserción--Tabla HistLibros, campos: ISBN, quien, cuando--¿Cada empleado cada vez que inserta un libro lo escribe en la otra tabla?CREATE TRIGGER tr_NuevoLibroON LibrosFOR INSERT -- Es equivalente a AFTER INSERTASBEGIN
INSERT INTO HistLibros SELECT ISBN, SUSER_SNAME(), GETDATE()) FROM insertedEND
--Cada vez que se inserten filas en la tabla Libros se producirá automáticamente un registro en la --tabla HistLibros
TRIGGERSEjemplo
--Construir una vista con datos obtenidos de dos tablas relacionadas--Podemos hacer inserción de registro sobre esta vista con un trigger (no se puede hacer--inserciones en vistas compuestas de varias tablas directamente)--Se quiere añadir un empleado nuevo que está en un departamento que no existe en un edificio -------nuevoCREATE TRIGGERONINSTEAD OF INSERTASBEGIN
SET NOCOUNT ON --No devolver número de filas afectadas….
END
TRIGGERS
Determinación del orden de ejecución
Es imposible determinar un orden de ejecución específico para losdesencadenadores definidos para una misma acción
Se puede seleccionar que desencadenador se ejecutará en primer lugar ycuál lo hará al final
Se utiliza el procedimiento almacenado de sistema sp_settriggerorder
CREATE TRIGGER tr1_Customers ON CustomersAFTER UPDATEASPRINT 'Este es el desencadenador tr1'
CREATE TRIGGER tr2_Customers ON CustomersAFTER UPDATEASPRINT 'Este es el desencadenador tr2'
Creamos tres trigger de prueba para modificar su orden de ejecución
TRIGGERS
Determinación del orden de ejecución
CREATE TRIGGER tr3_Customers ON CustomersAFTER UPDATEASPRINT 'Este es el desencadenador tr3'
UPDATE CustomersSET ContactName = ContactName
Probamos el orden de salida con unaoperación simulada
-- Indica que el desencadenador tr3 será el primero en ejecutarseEXEC sp_settriggerorder 'tr3_Customers', 'FIRST', 'UPDATE'
-- Indica que el desencadenador tr2 será el primero en ejecutarseEXEC sp_settriggerorder 'tr2_Customers', 'LAST', 'UPDATE'
Indicamos cuál será el primer trigger y el último en ejecutarse
Probamos el orden de salida con la operación simulada ¿Qué ocurre?UPDATE Customers SET ContactName = ContactName
TRIGGERS
Controlar la modificación de columnas específicas
Dentro de un desencadenador podemos saber si unacolumna ha sufrido modificaciones.
Función UPDATE(). El valor de esta función es TRUE cuandola columna fue modificada.
COLUMNS_UPDATED(). Devuelve un patrón de bitsvarbinary que indica qué columnas de la tabla se insertaron ose actualizaron. Cada bit es 1 si la columna sufrió cambios y0 en caso contrario.
TRIGGERS
Controlar la modificación de columnas específicas
La función COLUMNS_UPDATED devuelve los bits en orden deizquierda a derecha, siendo el bit menos significativo el primero de laizquierda. El primer bit de la izquierda representa la primera columna dela tabla, el siguiente representa la segunda columna, etc.
COLUMNS_UPDATED devuelve varios bytes si la tabla en que se hacreado el desencadenador contiene más de 8 columnas, siendo el menossignificativo el primero de la izquierda. COLUMNS_UPDATED devolveráel valor TRUE en todas las columnas de las acciones INSERT porque enlas columnas se insertaron valores explícitos o implícitos (NULL).
TRIGGERS
Controlar la modificación de columnas específicas
CREATE TRIGGER tr_OrderDetailsON [Order Details]AFTER UPDATEAS--Verificamos si hubo cambios en la clave principalIF UPDATE(OrderID)BEGINPRINT 'No se permiten cambios a la clave principal'ROLLBACK TRANEND--Verificamos si hubo cambios en las columnas 2ª, 3ª y 5ªIF ((COLUMNS_UPDATED() & (22)) > 0)BEGINIF ((COLUMNS_UPDATED() & 2) = 2) PRINT 'Se modificó la columna ProductID'IF ((COLUMNS_UPDATED() & 4) = 4) PRINT 'Se modificó la columna UnitPrice'IF ((COLUMNS_UPDATED() & 16) = 16) PRINT 'Se modificó la columna Quantity'END
TRIGGERS
Controlar la modificación de columnas específicas
PRINT CHAR(10) + 'Modificamos las columnas ProductID y UnitPrice'
UPDATE [Order Details] SET ProductID = ProductID, UnitPrice = UnitPrice
PRINT CHAR(10) + 'Modificamos solamente la columna Quantity'
UPDATE [Order Details] SET Quantity = Quantity
PRINT CHAR(10) + 'Modificamos OrderID'
UPDATE [Order Details] SET OrderID = OrderID
Crea el siguiente grupo de sentencias SQL y ejecútalas
TRIGGERS
Controlar la modificación de columnas específicas
Modificamos las columnas ProductID y UnitPriceSe modificó la columna ProductIDSe modificó la columna UnitPrice
(2155 filas afectadas)
Modificamos solamente la columna QuantitySe modificó la columna Quantity
(2155 filas afectadas)
Modificamos OrderIDNo se permiten cambios a la clave principal
Debe dar el resultado siguiente:
TRIGGERS
Controlar la modificación de columnas específicas
Si tiene que probar actualizaciones que afectan a otras columnas que no sean las8 primeras de una tabla, debe utilizar la función SUBSTRING para probar siCOLUMNS_UPDATED devuelve el bit correcto.
CREATE TRIGGER tr1 ON Customers FOR UPDATE AS IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=20 AND
(SUBSTRING(COLUMNS_UPDATED(),2,1)=1 ) PRINT 'Las columnas 3, 5 y 9 han sido actualizadas'
GO
UPDATE Customers SET ContactName=ContactName, Address=Address, Country=Country GO
TRIGGERS
Controlar la modificación de columnas específicas
La función POWER Devuelve el valor de la expresión indicada elevada a lapotencia especificada.
Sintaxis
POWER ( numeric_expression , y )
IF (SUBSTRING(COLUMNS_UPDATED(),4,1) & 28) > 0
-- Estas dos líneas hacen exactamente lo mismo
IF (SUBSTRING(COLUMNS_UPDATED(),4,1) &
(POWER(2, (3-1)) + POWER(2, (4-1)) + POWER(2, (5-1))) > 0
TRIGGERS
Modificación de Triggers
Para modificar un Trigger existente se utiliza la instrucción ALTER TRIGGER.
Las sintaxis de ALTER TRIGGER es idéntica a la de CREATE TRIGGER.
Como los desencadenadores son objetos independientes, ningún objeto depende de ellos.
Podemos eliminarlos y volver a crearlos cada vez que sea necesario.
DROP TRIGGER se utiliza para borrar un desencadenador.
TRIGGERS
Deshabilitar los desencadenadores
Para acelerar algunos procesos se puede deshabilitar temporalmente un desencadenador. El histórico puede hacerse enorme
Para deshabilitar un Trigger se utiliza la instrucción ALTER TABLE con la opción DISABLE TRIGGER
Para volver a activar el Trigger se utiliza la instrucción ALTER TABLE con la opción ENABLE TRIGGER
ALTER TABLE [Order Details]DISABLE TRIGGER tr_OrderDetails
ALTER TABLE [Order Details]ENABLE TRIGGER tr_OrderDetails
ALTER TABLE EmployeesDISABLE TRIGGER tr_Employees, isr_Employees, udt_Employees
PROCEDIMIENTOS ALMACENADOS
� SQL Server no sólo manipula información gestionando tablas e índices procesando consultas, etc.
� Hasta ahora sólo hemos visto consultas interactivas con el SGBD◦ Se ejecuta y se ve el resultado de forma inmedianta
� Es capaz de ejecutar procedimientos almacenados◦ Procedimientos escritos en Transact-SQL y almacenados en la propia BD◦ Mejoran la seguridad y la integridad de los datos
� Se puede crear la estructura de la BD con que trabajarán las aplicaciones y la lógica para la manipulación de esos datos
PROCEDIMIENTOS ALMACENADOS
� Características◦ Se ejecuta bajo demanda◦ Puede recibir y devolver parámetros◦ Facilitar la acción de futuros usuarios y aplicaciones� Con las vistas: Simplificar consultas, simplificar inserciónde datos en múltiples tablas.
� Queremos saber las ventas de un día, un mes, una semanao entre 2 fechas: Podría utilizarse una consulta SQL, peroel usuario debe saber SQL
� Procedimientos almacenados, simplifican esta labor
PROCEDIMIENTOS ALMACENADOS: BENEFICIOS
� Instrucciones precompiladas◦ La primera vez que se ejecuta el SP, SQL Servercrea y almacena en memoria un plan de ejecuciónque volverá a usar cada vez que se ejecute el SP◦ Se ejecutan mucho más rápidos que unainstrucción SQL (se almacenan ya compilados)◦ SQL Server no tiene más que ejecutar el código,sin necesidad de efectuar un análisis sintáctico yuna compilación previa
PROCEDIMIENTOS ALMACENADOS: BENEFICIOS
� Optimizan el tráfico en la red◦ Cuando ejecutamos un SP que contiene muchasinstrucciones SQL hacemos una única llamada alSQL Server indicando el nombre delprocedimiento, no cada instrucción por separado
� Mecanismo de seguridad◦ Si no queremos dar permisos a los usuarios sobreciertos objetos podemos crear SP que seencarguen de manipular dichos objetos y darpermisos a los usuarios para ejecutar estos SP
PROCEDIMIENTOS ALMACENADOS: BENEFICIOS
� Programación modular◦ Todas las instrucciones que conforman el SP se ejecutarán en el servidor como un todo◦ Se puede incluir lógica condicional, mediante las instrucciones de control de flujo (IF..ELSE, WHILE) disponibles en Transact-SQL
� Pueden usar parámetros◦ Tanto para recibir datos como para devolverlos a la aplicación que los llama◦ Un usuario puede no tener muchos conocimientos de SQL y se le puede facilitar el trabajo mediante SP (no tener que poner siempre la instrucción SQL)
� Ejecución automática◦ Se ejecutan a petición del usuario o las aplicaciones, aunque podemos configurarlos para que se ejecuten automáticamente al iniciarse SQL Server
PROCEDIMIENTOS ALMACENADOS: TIPOS� Procedimientos almacenados del sistema
� Procedimientos almacenados definidos por el usuario
� Procedimientos almacenados temporales
� Procedimientos almacenados extendidos
PROCEDIMIENTOS ALMACENADOS: TIPOS
� Procedimientos almacenados del sistema◦ Se crean automáticamente en las bases de datosdel sistema durante la instalación◦ Son una forma de interactuar con las tablas delsistema◦ Para casi todas las tareas administrativas que serealizan en el SQL Server hay un SP◦ El nombre de todos los SP de sistema globalestiene el prefijo sp_◦ Se pueden ejecutar desde cualquier BD
PROCEDIMIENTOS ALMACENADOS: TIPOS
� Procedimientos almacenados del sistema
USE Northwind
GO
sp_helpdb
PROCEDIMIENTOS ALMACENADOS: TIPOS
� Procedimientos almacenados definidos por el usuario◦ Para implementar la lógica de negocio◦ Puede involucrar múltiples instrucciones y condiciones◦ La aplicación solo llamaría al SP y no tendría que ejecutar elconjunto de resultados por separado◦ Se crean con la instrucción
CREATE PROCEDUREy se almacena en la base de datos actual◦ Los nombres deben ser únicos◦ Si creamos un procedimiento en la tabla master con elprefjo sp_, este SP será accesible desde cualquier base dedatos◦ Si creamos un SP con el prefijo sp_ en nuestra base de datos y
existe uno igual en la master, se ejecutará el de la base dedatos y solo en caso que no existiera ejecutaría el de la master
PROCEDIMIENTOS ALMACENADOS: TIPOS
� Procedimientos almacenados definidos por el usuario
USE Northwind
CREATE PROCEDURE sp_MostrarBaseDeDatos
AS
SELECT ‘Northwind’
USE master
CREATE PROCEDURE sp_MostrarBaseDeDatos
AS
SELECT ‘Master’
USE Northwind
EXEC sp_MostrarBaseDeDatos
USE Master
EXEC sp_MostrarBaseDeDatos
PROCEDIMIENTOS ALMACENADOS: TIPOS
� Procedimientos almacenados temporales◦ Son creados por los usuarios◦ Se almacenan en la tempdb◦ SQL Server los elimina automáticamente al desconectar la sesión en la que han sido creados◦ Usan el prefijo # para los locales y el prefijo ##para los globales
PROCEDIMIENTOS ALMACENADOS: TIPOS
� Procedimientos almacenados temporales
USE Northwind
CREATE PROCEDURE #leerNombreBaseDeDatos
AS
SELECT db_name() AS nombre_bdEjecute este código y expanda la carpeta“Procedimientos Almacenados” de la tabla“tempdb” y estará nuestro SP.
Cierre la ventana del Analizador deConsultas donde creó el SP y vuelve a lacarpeta de la tempdb.
PROCEDIMIENTOS ALMACENADOS: TIPOS
� Procedimientos almacenados extendidos◦ Programas DLL escritos en C++◦ Extienden capacidades de SQL Server◦ Están en la base de datos master◦ Su nombre empieza por xp_◦ Se utilizan para fines administrativos◦ El usuario puede crear SP de este tipo,programándolo en C++ y luego añadiéndolo a SQLServer utilizando el SP del sistemasp_addextendedproc
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado◦ Se puede crear desde el Managament Studio o desde una consulta SQL◦ Managament Studio� En la BD donde se va a crear� Crear Procedimiento almacenado (carpeta programación
� Escribir el contenido� Comprobar sintaxis� Asignar permisos� Guardar como plantilla
CREATE PROCEDURE HoraActual
AS
SELECT CURRENT_TIMESTAMP
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado
CREATE PROCEDURE NombreSP
[
@Param1 tipodatos [=valorPredeterminado] [OUTPUT],
@Param1 tipodatos [=valorPredeterminado] [OUTPUT],...
]
AS
... Cuerpo del SP ...
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: recepción y devolución de parámetros◦ Mayor utilidad cuanto más flexible sea◦ En el ejemplo siguiente:� Buscar los apellidos que empiezan por a� Buscar los apellidos que empiezan por cualquier letra que se le pasa
◦ También sería útil que se le pudiera pasar un resultado al usuario o aplicación que lo solicita, en lugar de quedarse almacenado en la tabla del que deberá ser recuperado
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: recepción y devolución de parámetros◦ Cualquier sp puede recibir parámetros si los necesita ◦ Irán detrás del nombre, especificando la variable y su tipo◦ Si se ejecuta el sp sin parámetros ���� error◦ El error se evita poniéndole al parámetro un valor por defecto � Usado si se llama al sp sin parámetro alguno◦ Devolver resultados desde el sp1. Código de retorno del sp ���� RETURN(valor)
valor: constante, consulta SQL, expresión2. Usar parámetros de salida (el sp devuelve un dato
���� OUTPUT
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: recepción y devolución de parámetros
CREATE PROCEDURETotaliza
@ISBN char(13)
AS
... Cuerpo del SP ...
CREATE PROCEDURE NombreSP
[
@Param1 tipodatos [=valorPredeterminado] [OUTPUT],
@Param1 tipodatos [=valorPredeterminado] [OUTPUT],...
]
AS
... Cuerpo del SP ...
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: Ejemplos
CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40)
AS
SELECT * FROM Employees
WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’
CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40) = ‘a’
AS
SELECT * FROM Employees
WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’
Exec buscarEmpleadosPorApellido ‘a’
Exec buscarEmpleadosPorApellido
PROCEDIMIENTOS ALMACENADOS
� Ejecutar el procedimiento almacenado◦ EXECUTE o EXEC nombre_procedimiento
CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40)
AS
SELECT * FROM Employees
WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’
CREATE PROCEDURE buscarEmpleadosPorApellido
@apellidoEmp varchar(40) = ‘a’
AS
SELECT * FROM Employees
WHERE lastname LIKE ‘%’ + @apellidoEmp + ‘%’
Exec buscarEmpleadosPorApellido ‘a’
Exec buscarEmpleadosPorApellido
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: Instrucción RETURN◦ Se usa para salir sin condiciones de un SP (desdecualquier punto del SP)◦ Tiene un valor de retorno de tipo entero◦ El valor de retorno predeterminado es 0◦ Se puede utilizar RETURN para devolver un códigode error
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: Instrucción RETURN
CREATE PROCEDURE ObtenerEmpleado
@idEmpleado int
AS
IF NOT EXISTS(SELECT * FROM EmployeesWHERE employeeid=@idEmpleado)
RETURN –1
ELSE
SELECT * FROM EmployeesWHERE employeedid=@idEmpleado
RETURN
PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURETotaliza
@ISBN char(13)= NULL --El parámetro es NULL por defecto
AS
BEGIN
IF @ISBN IS NULL --Si no se pasa parámetro
INSERT INTO Totales
SELECT (GETDATE(), NULL, SUM(importe) FROM Ventas
ELSE -- si se pasa parámetro
INSERT INTO Totales
SELECT (GETDATE(), @ISBN, SUM(importe) FROM Ventas WHERE ISBN=@ISBN
END
-- Si no se pasa parámetro, valor por defecto NULL y se totalizan todas las ventas
-- si se pasa el parámetro, se suman las filas correspondientes a ese libro
PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURETotaliza
@ISBN char(13)= NULL --El parámetro es NULL por defecto
AS
BEGIN
IF @ISBN IS NULL --Si no se pasa parámetro
-- Devolvemos directamente el RETURN
RETURN(SELECT SUM(importe) FROM Ventas)
ELSE -- si se pasa parámetro
RETURN(SELECT (SUM(importe) FROM Ventas WHERE ISBN=@ISBN)
END
-- En lugar de realizar una inserción en una tabla, se devuelve directamente el resultado
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: Ejemplo con parámetro de salida (OUTPUT)
CREATE PROCEDURE ObtenerDireccionEmpleado
@idEmpleado int,
@Direccion varchar(100) OUTPUT
AS
SELECT @Direccion= address + ‘ . ’ + city + ‘ . ‘ +
region + ‘ . ‘ + postalcode + ‘ . ‘ + country
FROM Employees
WHERE employeeid = @idEmpleado
DECLARE @DireccionSP varchar(100)
EXEC ObtenerDireccionEmpleado 12, @Direccion=@DireccionSP OUTPUT
PRINT @DireccionSP
PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURETotaliza
@ISBN char(13)= NULL --El parámetro es NULL por defecto
@Total money OUTPUT -- Parámetro de salida
AS
BEGIN
IF @ISBN IS NULL --Si no se pasa parámetro
-- Devolvemos el resultado en
SELECT @Total=SUM(importe) FROM Ventas)
ELSE -- si se pasa parámetro
SELECT @Total=SUM(importe) FROM VentasWHERE ISBN=@ISBN)
END
-- En lugar de realizar una inserción en una tabla, se devuelve directamente el resultado
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: Devolución de conjunto de datos◦ Además de para actuar sobre tablas, insertando datos o extrayendo información procesada, un sp puede devolver un conjunto de datos procedentes de tablas físicas de la BD o contenidos en una variable table
◦ Simplifican la obtención de datos de múltiples tablas� Similar a las vistas, pero con parámetros
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: Manejo de errores◦ La función del sistema @@ERROR devuelve elcódigo de error de la última instrucción ejecutada◦ Este valor cambia cada vez que se ejecuta unainstrucción, por lo tanto hay que controlar el errorinmediatamente después de ejecutar la instrucción◦ RAISERROR� Se usar para generar explícitamente un error
RAISERROR (id_mensaje | texto_mensaje, gravedad, estado) WITH opción
PROCEDIMIENTOS ALMACENADOS
� Crear procedimiento almacenado: Manejo de errores
sp_addmessage 50001, 11, 'There was an error', 'us_english'
sp_addmessage 50001, 11, 'Ha ocurrido un error', 'spanish‘
CREATE PROCEDURE GenerarError
AS
RAISERROR (50001, 11, 1) WITH LOG
SELECT @@ERROR
PROCEDIMIENTOS ALMACENADOSUSE empleados
GO
CREATE PROCEDURE CrearBD
--@variable char(13)= NULL NO es necesario
AS
BEGIN
DECLARE @ERROR int
BEGIN TRANSACTION
CREATE TABLE temple (………..)
SET @ERROR = @@ERROR --@@ERROR a partir de aquí ya tiene otro valor
IF @ERROR = -1
BEGIN
ROLLBACK TRANSACTION
RETURN @ERROR
END
INSERT INTO temple ……
COMMIT TRANSACTION
RETURN 0
END
PROCEDIMIENTOS ALMACENADOS
USE empleados
GO
CREATE PROCEDURE sp_Actualiza_temple
@empleado int
AS
BEGIN
DECLARE @ERROR int
BEGIN TRANSACTION
UPDATE temple (………..) SET C1=@C1, C2=@C2, … WHERE numem=@empleado
SET @ERROR = @@ERROR --@@ERROR a partir de aquí ya tiene otro valor
IF @ERROR = -1
BEGIN
ROLLBACK TRANSACTION
RETURN @ERROR
END
COMMIT TRANSACTION
RETURN 0
END
FUNCIONES DE USUARIO
� Su definición puede incluir más de una instrucción y tenerparámetros
� Se pueden invocar igual que los Procedimientos Almacenados� Una función escalar definida por el usuario se puede usar en
cualquier lugar de una expresión Transact-SQL en el que seaválido el uso de una expresión
� Una función de usuario que devuelva una tabla se puede usaren la cláusula FROM de cualquier instrucción del lenguaje demanipulación de datos◦ Esto no es posible con los sp◦ SELECT numem, salar, comis FROM Empleados (Siendo sp_Empleados un sp da
un error)◦ El mismo código del sp puesto en una función si se puede ejecutar
Beneficios
FUNCIONES DE USUARIO
� Usarla como subconsulta en la cláusulaWHERE� Combinar resultados de dos funciones sin necesidad de usar
tablas temporales para almacenar datos intermedios� Usar el resultado como argumento del operador IN� Crear una vista que no podría ser resuelta por una única
sentencia SELECT� Crear una vista con parámetros� Ampliar la lista de funciones predefinidas con funciones
financieras de todo tipo� Crear nuevas funciones matemáticas
Beneficios
FUNCIONES DE USUARIO
� Distinta sintaxis� Contexto en que puede ser utilizada� Un sp que efectúa un cálculo que devuelve un nº, no puede
ser utilizado en la definición de una tabla para crear unacolumna calculada, una función sí
� Un sp que devuelve un conjunto de datos no puede serutilizado en una consulta, una función sí
� Una función de usuario se puede utilizar donde se puedeutilizar una función de SQL Server
Diferencias entre Función y Procedimiento Almacenado
FUNCIONES DE USUARIO
� Funciones escalares: Devuelven un único valor escalar� Funciones tabulares: Devuelven un conjunto de resultados
completo (similar a una tabla)� Funciones en línea: Son un caso especial de las tabulares, pero
constan de una única instrucción SELECT
Tipos de funciones definidas por el usuario
Una función definida por el usuario puede constar de una únicainstrucción o de varias. Según su valor de retorno, las funcionesdefinidas por el usuario se pueden dividir en tres grupos:
FUNCIONES DE USUARIO
� En la cláusula SELECT de una instrucción SELECT, comoparte de una expresión o como una columna individual
� En la cláusula SET de una instrucción UPDATE, como valorpara insertar en el campo de la tabla a modificar
� En la cláusula ORDER BY como criterio de ordenación� Como valor DEFAULT para una columna� Dentro de la definición de una restricción CHECK� Dentro de una expresión CASE� Dentro de una instrucción PRINT
Funciones Escalares
Devuelven un único valor y se pueden usar en cualquier lugardonde se admita una expresión, por ejemplo:
FUNCIONES DE USUARIO
� Como parte de la condición en instrucciones IF oWHILE� Como parámetro, al llamar a un SP u otra función definida
por el usuario� Como valor de retorno de un procedimiento almacenado, si
la función devuelve un valor entero� Como valor de otra función escalar definida por el usuario
Funciones Escalares
Se pueden combinar con otras funciones en una expresión, siempreque los tipos de datos sean compatibles con la operación
FUNCIONES DE USUARIO
Creación de Funciones Escalares
CREATE FUNCTION [Propietario.]NombreFunción
( @Param1 tipodatos [=default], … @ParamN tipodatos [=default])
RETURNSTipoDatosDeRetorno
AS
BEGIN
<Cuerpo de la función>
RETURNValorDeRetorno
END
SELECT [Propietario.]dbo.NombreFunción(ValorParam1, ValorParam2)
Ejemplos de ejecución
SELECT @Variable = [Propietario.]dbo.NombreFunción(ValorParam1, ValorParam2)
FUNCIONES DE USUARIO
Creación de Funciones Escalares
CREATE FUNCTION [Propietario.]NombreFunción
( @Param1 tipodatos [=default], … @ParamN tipodatos [=default])
RETURNSTipoDatosDeRetorno
AS
BEGIN
<Cuerpo de la función>
RETURNValorDeRetorno
END
Principal diferencia de sintaxis entre la función y el procedimiento almacenado� En la cabecera: Compuesta por la lista de parámetros y el tipo entre
paréntesis y el tipo de valor devuelto� Se puede retornar un valor simple (int, money, …) o una variable table o
una consulta
FUNCIONES DE USUARIO
Creación de Funciones Escalares
CREATE FUNCTION dbo.Cubo( @fNumero float)RETURNS floatASBEGINRETURN(@fNumero * @fNumero * @fNumero)END
USE CURSO_SQL
SELECT dbo.Cubo(5)
Una función sencilla para obtener un número elevado al cubo
Ejecutamos la función para calcular el cubo de 5.
Utilizamos la base de datos CURSO_SQL
FUNCIONES DE USUARIO
Creación de Funciones Escalares
CREATE FUNCTION dbo.Factorial ( @Numero int )RETURNS INTASBEGIN
DECLARE @i int
IF @Numero <= 1SET @i = 1
ELSESET @i = @Numero * dbo.Factorial( @Numero - 1 )
-- Devuelve el valor calculadoRETURN (@i)
END
Otra característicainteresante es que lasfunciones de usuariosoportan llamadasrecursivas, como semuestra en el siguienteejemplo, que calcula elfactorial de unnúmero
FUNCIONES DE USUARIO
Creación de Funciones Escalares
CREATE FUNCTION dbo.QuienFue()RETURNS varchar(100)ASBEGIN
RETURN SYSTEM_USER + ' DESDE ' +APP_NAME()END
Devuelve el nombre dela persona que ejecutóla función y desde queaplicación lo hizo.
PRINT dbo.QuienFue()
MEGA865\Mónica DESDE Analizador de consultas SQL
Ejecución
Salida
FUNCIONES DE USUARIO
CREATE FUNCTION fn_Edad (@NumEmpleado int)
RETURNS smallint
AS
BEGIN
DECLARE @FechaNacimiento datetime, @Edad smallint
SELECT @FechaNacimiento=fecna FROM temple WHERE numem=@NumEmpleado
--Calcular la edad
RETURNS @Edad
END
--
FUNCIONES DE USUARIO
Funciones de tabla en línea
� En la cláusula SELECT de una instrucción SELECT, como parte de una subconsulta que devuelva un único valor (un conjunto de resultados con una sola fila y una sola columna).
� En la cláusula SET de una instrucción UPDATE como una subconsulta que provea un único valor para un campo de una tabla que queremos modificar.
� En la cláusula FROM de cualquier instrucción DML.
Es algo parecido a una vista con parámetros. Contiene una únicainstrucción SELECT pero puede usar varios parámetros para restringir laconsulta.
Pueden usarse en cualquier lugar en el que se admitiría una tabla:
FUNCIONES DE USUARIO
Funciones de tabla en línea
� En las cláusulas WHERE o HAVING de cualquier instrucción DML como parte de una subconsulta que devuelva un único valor para compararlo con un campo o variable.
� En la cláusula WHERE de cualquier instrucción DML, como parte de una subconsulta que empiece con EXISTS o con NOT EXISTS.
� En las cláusulas WHERE o HAVING de cualquier instrucción DML, como parte de una subconsulta con los operadores IN o NOT IN, siempre que la subconsulta devuelva una sola columna.
FUNCIONES DE USUARIO
Creación de funciones de tabla en línea
CREATE FUNCTION [Propietario.]NombreFunción
( @Param1 tipodatos [=default], … @ParamN tipodatos)
RETURNSTABLE
AS
RETURN ( Sentencia SELECT)
SELECT * FROM [Propietario.]dbo.NombreFunción(ValorParam1, ValorParam2)
Ejemplo de ejecución
Sintaxis
FUNCIONES DE USUARIO
Creación de funciones de tabla en línea
USE Northwind
SELECT * FROM dbo.ClientesDelPais('Spain')
Una función que devuelve los clientes de una país determinado
Ejecutamos la función para ver los clientes de España
Utilizamos la base de datos Northwind
CREATE FUNCTION dbo.ClientesDelPais (@pais varchar(15))RETURNS TABLEASRETURN ( SELECT * FROM Customers WHERE Country = @pais )
FUNCIONES DE USUARIO
Creación de funciones de tabla en línea
CREATE FUNCTION dbo.PedidosDelDia(@Fecha datetime)RETURNS TABLEASRETURN (
SELECT * FROM Orders WHERE DATEDIFF(day, OrderDate, @fecha) =0 )
SELECT OrderID, CustomerID, EmployeeID, CONVERT(varchar(10), OrderDate, 103) FROM dbo.PedidosDelDia(’06/05/1998')ORDER BY CustomerID
Una función que devuelve los pedidos de una fecha determinada
Ejecutamos la función para ver los pedidos del 06/05/1998. Solo mostramos los campos OrderID, CustomerID, EmployeeID, OrderDate y ordenamos la salida por el campo CustomerID. Formateamos el campo OrderDate para mostrar la fecha con el formato dia/mes/año
FUNCIONES DE USUARIOCREATE FUNCTION LibrosDistribuidora (
@IDDistribuidora smallint)
RETURNS @Tabla table
(Distribuidora varchar(50),
Editorial varchar(50),
Titulo varchar(50))
AS
BEGIN
INSERT INTO @Tabla SELECT Distribuidora.NombreAS Distribuidora, Editoriales.NombreAS Editorial, Libros.Titulo FROM Libros
INNER JOIN Editoriales ON Libros.Editorial=Editoriales.IDEditorial
INNER JOIN DistribucionEditorial ON Editoriales.IDEditorial= DibribucionEditorial.IDEditorial
INNER JOIN Distribuidoras ON DistribuicionEditorial.IDDistribuidora=Distribuidoras.IDDistribuidora
WHERE Distribuidoras.IDDistribuidora=@
RETURN
END
-- Función para obtener los libros de una distribuidora.
--Al ser una función la podemos utilizar directamente en una SELECT
--USE Librerias
--SELECT Editorial, Titulo FROM LibrosDistribuidora(1)
FUNCIONES DE USUARIO
Funciones tabulares
Las funciones tabulares de varias instrucciones se parecen a las funcionesen línea. De echo se pueden usar en las mismas situaciones pero noestamos restringidos a definirlas con una única instrucción SELECT.
Devuelve un único conjunto de resultados: el contenido de una variable detabla con un formato predefinido indicado en la declaración de la función.
Estas funciones se parecen a los procedimientos almacenados, perodevuelven un único conjunto de resultados.
Se pueden definir parámetros de entrada pero no se pueden definirparámetros de salida.
FUNCIONES DE USUARIO
Creación de funciones tabulares
CREATE FUNCTION [Propietario.]NombreFunción
( @Param1 tipodatos [=default], … @ParamN tipodatos)
RETURNS @NombreTabla TABLE (Columna1 tipodatos, … ColumnaN tiposdatos)
AS
BEGIN
<cuerpo de la función>
RETURN
END
Sintaxis
FUNCIONES DE USUARIO
Creación de funciones tabulares
CREATE FUNCTION dbo.ClientesDelPais (@pais varchar(15))RETURNS @Lista TABLE(CustomerID nchar(5), CompanyName nvarchar(40), Country nvarchar(15))
ASBEGIN
INSERT INTO @Lista SELECT CustomerID, CompanyName, CountryFROM CustomersWHERE Country = @pais
RETURNEND
Cursores
Administración
� Herramientas de administración◦ DBA� Administrador de la base de datos
� Administra el servidor
◦ SQL Server Configuration Manager� Configurar los distintos servicios de SQL Server
◦ SQL Managament Studio� Configuración de servicios y muchas otras tareas
Administración: SQL Server Configuration Manager� SQL Server se ejecuta como un servicio� Se pondrá en marca automáticamente (al iniciar el sistema) o
manualmente� Inicio servicio: automáticamente, manualmente, deshabilitado (no se
pondrá en marcha ni automática, ni manualmente)� Servicio: MSSQLServer◦ Instancias del servidor: Nombre_Servidor + Nombre_Instancia
� Otros servicios◦ Coordinador de transacciones distribuidas: MSDTC◦ Agente de SQL Server: SQLServerAgent◦ Elegidos en la instalación:
� Servicio de Informes (Reporting services)� Servicio de Integración� Servicio de análisis� Full-text Filter� Server Browser
Administración: SQL Server Configuration Manager
� Inicio / Todos los programas / SQL Server 2008 / Herramientas de configuración / SQL Server Configuration Manager
� Se verán:◦ Servicios instalados ◦ Estado: Ejecución / Detenido / Pausado (Flecha verde / Cuadrado rojo / Dos rayas rojas)◦ Modo de inicio◦ Otras propiedades
Administración: SQL Server Configuration Manager� Servicios◦ MSSQLServer (instancia por defecto)◦ MSSQLServer Expres (Otra instancia instalada)
� Estados de los servicios◦ Iniciado: Servicio en funcionamiento (acceso de los clientes a las bd)◦ Pausado: Servicio detenido temporalmente, se puede reanudar, conservando el estado anterior◦ Detenido: Se desaloja de memoria, al volver a iniciarlo toma sus valores por defecto◦ Botones: Iniciar, Detener, Pausar, Reunudar, Reiniciar
Administración: SQL Server Configuration Manager� Modo de inicio: Automáticamente, manualmente, deshabilitado◦ Botón derecho / Propiedades / Servicio / Modo de inicio
� Servicio Agente de SQL Server◦ Se encarga de supervisar, cuando está en marcha, el funcionamiento del motor de SQL Server (servidor de bases de datos)◦ Detecta cualquier fallo que pueda afectar al SQL Server y volverlo a poner en marcha◦ Permite automatizar tareas
� Realizar copias de seguridad a una hora dada� Realizar trabajos de forma periódica
Administración: SQL Server Configuration Manager� Modo de inicio: Automáticamente, manualmente, deshabilitado◦ Botón derecho / Propiedades / Servicio / Modo de inicio
� Servicio Agente de SQL Server◦ Se encarga de supervisar, cuando está en marcha, el funcionamiento del motor de SQL Server (servidor de bases de datos)◦ Detecta cualquier fallo que pueda afectar al SQL Server y volverlo a poner en marcha◦ Permite automatizar tareas
� Realizar copias de seguridad a una hora dada� Realizar trabajos de forma periódica
Administración: SQL Server Managament Studio
� Herramienta de administración de SQL Server◦ Completa
◦ Inicio / Todos los programas / Microsoft SQL Server 2008 / SQL Server Managament Studio
◦ Conectar con el servidor:� Nombre del servidor / Autentificación de windows o mixta
Administración: SQL Server Managament Studio
� Creación de grupos◦ Podemos administrar varias instancias de SQL Server
◦ Pueden ser:� Servidor con el que se ha iniciado sesión
� Servidores virtuales en una misma máquina
� Servidores remotos
� Servidores registrados (Ver / Servidores registrados), con los que se ha establecido conexión
Administración: SQL Server Managament Studio
� Creación de grupos◦ Servidores registrados� Los servidores con los cuáles se ha establecido conexión se pueden clasificar en grupos funcionales
� Al principio no existen grupos (los creamos)
� En cada grupo aparecen los nombres de los servidores
� Dependiendo del tamaño de la empresa y número de servidores � crear subgrupos por país, sucursal, …� América, Europa (España, Alemania, ..) , Asia …
�
Administración: SQL Server Managament Studio
� Creación de grupos◦ Carpetas de un servidor
� Cada grupo contiene servidores� Cada servidor aloja elementos clasificados en carpetas
� Bases de datos, Seguridad, Objetos de servidor, Replicación, Administración, Agente de SQL Server
� Al elegir una carpeta aparece su contenido
� Asistentes◦ Herramientas gráficas de administración◦ Simplifican tareas (creación de una bd, índice, vista, …, copia de seguridad, …)
� Asistentes o plantillas◦ Ver / Explorador de plantillas
Administración: SQL Server Managament Studio
� Asistentes◦ Herramientas gráficas de administración
◦ Simplifican tareas (creación de una bd, índice, vista, …, copia de seguridad, …)
� Asistentes o plantillas◦ Ver / Explorador de plantillas
Administración
� Creación de una estructura de grupos◦ Si sólo se va a trabajar con un servidor no hace falta crear grupos◦ Gran empresa con múltiples servidores � Grupos◦ Ver / Servidores registrados◦ Elegir: Local Server groups / Botón derecho / Nuevo grupo de servidores / Nombre y descripción� América ( méxico, argentina, usa), Europa (españa, alemania, italia)
Administración
� Registro de servidores◦ Grupos
� No tienen utilidad práctica� Alojan enlaces con servidores
◦ Conexiones: Instancia local de SQL Server (por defecto), otras instancias de SQL Server, servidores remotos◦ Los servidores hay que registrarlos para poder acceder a ellos◦ Registrar servidor
� Seleccionar grupo / Botón derecho / Nuevo registro de servidor: nombre del servidor o ip (o buscar servidores), método de autentificación (windows, mixto), nombre alternativo del servidor (adecuado en lugar de la ip), Probar
Administración
� Registro de servidores◦ Grupos
� No tienen utilidad práctica� Alojan enlaces con servidores
◦ Conexiones: Instancia local de SQL Server (por defecto), otras instancias de SQL Server, servidores remotos
◦ Los servidores hay que registrarlos para poder acceder a ellos
◦ Registrar servidor� Seleccionar grupo / Botón derecho / Nuevo registro de servidor:
nombre del servidor o ip (o buscar servidores), método de autentificación (windows, mixto), nombre alternativo del servidor (adecuado en lugar de la ip), Probar
� Ver / Servidores registrados / Botón derecho / Añadir al explorador de objetos
� Otra opción: Conectar / motor de base de datos
Administración
� Actuar sobre un servidor
◦ Managament Studio más completo que Configuratio Manager
◦ Seleccionar servidor / Botón derecho
� Puede ser local o remoto
� Iniciar, pausar, reanudar, detener, reiniciar
� Conectar / Desconectar (cerrar conexión, liberando el canal y recursos o restablecerla)
Administración
� Seguridad◦ Limitar el acceso indiscriminado a información
(importante)◦ Qué personas pueden trabajar y qué pueden hacer◦ Autentificación: Windows, mixta� Autentificación, comprobar si tiene acceso sobre la bd,
conocer operaciones que le están permitidas
◦ El proceso de autorización necesita saber� Funciones que puede realizar el usuario autentificado� Derechos que tiene sobre cada bd
◦ Usuarios y grupos de Windows + Funciones del servidor de SQL Server
Administración
� Seguridad: Usuarios y grupos de Windows◦ El servidor dispone de una bd con información de todas las
cuentas de usuarios
◦ Cada usuario tiene una configuración
◦ Forma parte de grupos
◦ Grupos: Permitir que múltiples usuarios compartan atributos sin necesidad de definirlos individualmente
◦ Crear usuarios y grupos� Herramienta Administración de Equipos (Windows) / / Herramientas
del sistema / Usuarios y grupos Locales
� Herramienta Usuarios y Equipos de Active Directory (Windows)
� Asociar usuarios a grupos
Administración
� Seguridad: Inicios de sesión en SQL Server◦ Crear en la carpeta Seguridad de SQL Server los
inicios de sesión correspondientes a los usuarios y grupos a los que permitiremos acceder al servidor de datos◦ No todos los usuarios de Windows podrán acceder al
SQL Server� Sólo los que tienen definido un inicio de sesión en SQL Server� Managament Studio / Seguridad / Inicios de sesión:
� Predefinidos: Administradores de Windows, sa� Botón derecho / Nuevo inicio de sesión / Autentificación de Windows
/ Elegir un grupo de usuarios de Windows / Elegir una bdpredeterminada
� Grupos: administradores, comerciales, contables, jefes, informáticos, …
Administración
� Seguridad: Funciones de servidor◦ El grupo elegido ya puede iniciar sesión en SQL Server
◦ No tiene privilegios (no puede operar sobre bases de datos, ni realizar otras tareas)
◦ Cada bd mantiene una lista de los inicios de sesión que pueden actuar sobre ella� Seleccionar inicios de sesión / grupo creado / botón derecho /
Propiedades / Asignación de usuarios
� Aparecen dos listas� Superior: Bases de datos
� Inferior: Funciones definidas para ellas en caso de que éste inicio de sesión pueda utilizarlas
� Marcar la bd y la funciones que se desea para ese usuario o grupo
Administración
� Seguridad: Funciones de servidor◦ El grupo elegido ya puede iniciar sesión en SQL Server◦ No tiene privilegios (no puede operar sobre bases de datos,
ni realizar otras tareas)◦ Cada bd mantiene una lista de los inicios de sesión que
pueden actuar sobre ella� Seleccionar inicios de sesión / grupo creado / botón derecho /
Propiedades / Asignación de usuarios� Aparecen dos listas
� Superior: Bases de datos� Inferior: Funciones definidas para ellas en caso de que éste inicio de sesión
pueda utilizarlas
� Marcar la bd y la funciones de bd que se desea para ese usuario o grupo
Administración
� Seguridad: Funciones de servidor◦ Funciones de bd� Marcar la bd y lo que el usuario puede realizar sobre ella
(funciones permitidas a los usuarios)� Estándar y definidas por el usuario
◦ Funciones de servidor� Funciones globales: Se aplican a todas las operaciones sobre el
servidor en su conjunto y no a una bd concreta� Están predefinidas y son fijas (no se pueden modificar)� Se pueden añadir cuentas o inicios de sesión (usuarios o
grupos) a la función que queramos� Administrador del sistema: Función sysadmin (cualquier
operación sobre el servidor y cualquier bd)
Administración
� Seguridad: Funciones de servidor
Función Acciones permitidas
bulkadmin Inserción masiva de datos
dbcreator Creación y modificación de bases de datos
diskadmin Administración de los archivos en disco
processadmin Gestión de los procesos asociados a SQL Server
securityadmin Definición de cuentas de inicio de sesión
serveradmin Configuración de opciones para el RDBMS
setupadmin Configuración de registro de servidores
sysadmin Administrador del sistema. Puede efectuar cualquier función
Administración
� Seguridad: Definir usuarios◦ Cuando se crea una bd hereda propiedades de las bd master y
model
◦ Luego se pueden modificar
◦ La bd cuenta ya con un conjunto de tablas, vistas, sp, un usuario dbo, …
◦ dbo: tiene permisos completos sobre la bd creada
◦ Se deben crear otros usuarios que requieran acceso a la bd (leer, escribir, etc.)
◦ Carpeta usuarios: Nombre_BD / Seguridad / Usuarios
◦ Carpeta: Bases de datos / Seguridad / Inicios de sesión (es otra, a nivel del servidor y no de la BD)
◦ Carpeta usuarios: Pueden ser usuarios de Windows, grupos de Windows, inicios de sesión de SQL Server
Administración
� Seguridad: Definir usuarios◦ Nuevo usuario: Nombre_BD / Seguridad / Usuarios /
Botón derecho / Nuevo usuario� Nombre_servidor\Nombre_usuario� Nombre_servidor\Nombre_grupo� Nombre_servidor\Nombre_inicio_sesión
◦ Aparece lista con las funciones de bd existentes (estándar y definidas por el usuario)� Establecen privilegios que el nuevo usuario tendrá sobre la bd� public: aparece por defecto� db_datareader, db_datawriter: Leer y escribir información en
la bd
Administración
� Seguridad: Definir usuarios (funciones bd)
Función Acciones permitidas
public Cualquier usuario de la bd tendrá los mismos privilegios que si ha accedido de forma pública
db_datareader Leer información de la bd
db_datawriter Escribir información de la bd
db_denydatareader
db_denydatawriter
db_accessadmin
db_backupoperator
db_ddladmin
Administración
� Seguridad: Funciones definidas por el usuario◦ Las funciones estándar de la bd no siempre se ajustan a las
necesidades de todas las bd◦ Se pueden crear funciones de seguridad definidas por el
usuario◦ Nombre_BD / Seguridad / Funciones / Botón derecho /
Nueva función de bd� Nombre de la función, integrantes (usuarios o grupos) de la función,
Elementos que pueden protegerse � Añadir todos los objetos existentes en la bd (tablas, vistas, sp, índices, triggers,
funciones, …) sobre los que queramos establecer algún tipo de permiso� Limitamos con un gran control, las operaciones que un usuario o grupo pueden
efectuar� Seleccionar objeto, permitir o denegar tarea� Conceder o denegar, select, inserción, modificación sobre elementos concretos
Administración
� Permisos de las tablas
◦ Seleccionar tabla / Botón derecho / Propiedades
◦ Permisos
� Limitar para cada tabla las acciones que pueden efectuar los usuarios o los inicios de sesión
Administración
� GRANT◦ GRANT { ALL [ PRIVILEGES ] } | permission [ ( column [
,...n ] ) ] [ ,...n ] [ ON [ class :: ] securable ] TO principal [ ,...n ] [ WITH GRANT OPTION ] [ AS principal ] � ALL: Casi todos los permisos� permission: Nombre de un permiso� column: Nombre de una columna de la tabla a la que se le va a
conceder permiso� class: Especifica la clase del elemento que puede protegerse en el
que se va a conceder el permiso� securable: Especifica el elemento que puede protegerse en el que se
va a conceder el permiso� WITH GRANT OPTION: Indica que el receptor también podrá
conceder el permiso especificado a otras entidades de seguridad
Administración
� Permisos
http://msdn.microsoft.com/es-es/library/ms187965.aspx
Administración
� REVOKE◦ REVOKE [ GRANT OPTION FOR ] { [ ALL [ PRIVILEGES ] ] |
permission [ ( column [ ,...n ] ) ] [ ,...n ] } [ ON [ class :: ] securable ] { TO | FROM } principal [ ,...n ] [ CASCADE] [ AS principal ]� GRANT OPTION FOR: se revocará la capacidad de conceder el permiso
especificado� ALL: Casi todos los permisos� permission: Nombre de un permiso� column: Nombre de una columna de la tabla a la que se le va a conceder
permiso� class: Especifica la clase del elemento que puede protegerse en el que se va a
conceder el permiso� securable: Especifica el elemento que puede protegerse en el que se va a
conceder el permiso� CASCADE: el permiso que se va a revocar también se revocará de otras
entidades de seguridad a las que se han concedido permisos por esta entidad de seguridad
Administración
� DENY◦ DENY { ALL [ PRIVILEGES ] } | permission [ ( column [ ,...n
] ) ] [ ,...n ] [ ON [ class :: ] securable ] TO principal [ ,...n ] [ CASCADE] [ AS principal ] � ALL: Casi todos los permisos� permission: Nombre de un permiso� column: Nombre de una columna de la tabla a la que se le va a
conceder permiso� class: Especifica la clase del elemento que puede protegerse en el
que se va a conceder el permiso� securable: Especifica el elemento que puede protegerse en el que se
va a conceder el permiso� CASCADE: el permiso que se va a revocar también se revocará de
otras entidades de seguridad a las que se han concedido permisos por esta entidad de seguridad
Administración
� Mantenimiento◦ Después de diseñar y crear la bd:
� Poner en explotación� Plan de mantenimiento� Copias de seguridad
◦ Diseño e implementación� Se efectúa en un entorno de desarrollo (no en el entorno de
explotación habitual de la empresa)
◦ Puesta en explotación� Trasladar toda la bd al servidor definitivo con el que se conectarán
clientes que puedan existir (usuarios y aplicaciones)� Se se copian los archivos � Hay que definir los inicios de sesión y
permisos de nuevo� Mejor hacer copia de seguridad
Administración
� Asistente para copias de bases de datos◦ Seleccionar BD / Botón derecho / Tareas / Copiar Base de Datos
� Seleccionar servidor de origen (donde está la bd)� Seleccionar el modo de autentificación� Seleccionar servidor de destino
◦ Transferencia de datos (2 métodos)
1. Método de separar y adjuntar� Rápido, eficiente� La bd debe estar sin conexión
2. Método de objeto de administración de SQL� Más lento� Permite mantener la bd de origen en funcionamiento (sin dejar de dar
servicio en ningún momento)
Administración
� Asistente para copias de bases de datos◦ Seleccionar una o varias bd a mover� Una marca nos indicará si existe algún conflicto (espacio insuficiente en destino, etc.)
◦ La transferencia:
1. Se detendrá si encuentra en el destino los mismos archivos
2. O se reescribirá en ellos la nueva información
◦ Una bd no sólo está compuesta por los ficheros de datos y transacciones
◦ Puede tener dependencias de otros objetos del servidor de origen� Inicios de sesión� Procedimientos almacenados compartidos por varias bd (almacenados en master)� Mensajes de error definidos por el usuario, …� Seleccionar los objetos adicionales a transferir� Algunos de estos objetos deben tener dependencias en el destino
� Inicios de sesión hacen referencia a usuarios o grupos que deben estar en el servidor de destino
Administración
� Asistente para copias de bases de datos◦ En cada elemento seleccionado: inicios de sesión,
procedimientos almacenados, etc. se puede elegir pasarlos todos al destino o elegirlos individualmente◦ Dar nombre al trabajo que se está realizando◦ Programar la operación� Ejecutar una sola vez, de manera inmediata� Programarse para ejecutarse en un momento dado� Programación periódica (si se tienen dos servidores paralelos
con la misma bd, de tal manera que ante un fallo del primario se pasase el control al secundario)
◦ Resumen del proceso
Administración
� Agente de SQL Server◦ Programación para la ejecución periódica de trabajos
◦ Almacena trabajos en: � Agente de SQL Server / Trabajos
◦ Los trabajos se pueden poner en marcha, detenerlo, obtener un historial de uso, ver propiedades
◦ Se pueden generar desde asistentes � Copia de bases de datos
◦ Se pueden crear nuevos trabajos� Agente de SQL Server / Trabajos / Botón derecho / Nuevo trabajo
� Ejecución de una serie de instrucciones Transact-SQL
� Hacer una réplica de la bd
Administración
� Agente de SQL Server: Programación de un trabajo
◦ Agente de SQL Server / Trabajos / Seleccionar trabajo / Botón derecho / Propiedades / Programación
◦ Lista de ejecuciones programadas
� Periodicidad, la hora, la duración del proceso
◦ El Agente de SQL debe estar activo
Administración
� Copias de seguridad◦ Preservar la seguridad de la información frente a
problemas◦ Se puede hacer con la bd en funcionamiento� Baja el rendimiento
◦ Dispositivos de copia� Donde se van a almacenar las copias de seguridad� Fichero en disco (otro disco), cinta (muy habitual), DVD, CD,
…� Unidad de red (provoca mucha carga)� NAS: Network Attached Storage (hardware de
almacenamiento en red)
Administración
� Copias de seguridad
◦ Dispositivos de copia
� Objetos de servidor / Dispositivos de copia de seguridad / Botón derecho / Nuevo dispositivo
� Nombre del dispositivo, cinta o directorio
Administración
� Copias de seguridad: Crear◦ Determinar frecuencia y método (acorde al
volumen de datos y la importancia
◦ La bd sigue activa, pero rendimiento baja
◦ Poca información y poca actualizaciones: 1 semana
◦ Muchas actualizaciones y volumen: copia semanal y copia diferencial diaria, y copia de registro de transacciones
◦ Objetos de servidor / Dispositivos de copia de seguridad / Dispositivo de copia creado
Administración
� Copias de seguridad: Crear◦ Copia completa� Primera vez
� Con soporte nuevo (nuevo directorio o DVD, …)
� General:� Seleccionar bd, poner un nombre y un descripción
� El conjunto de copia de seguridad expira: Tiempo hasta la nueva copia de seguridad
� Opciones: � Sobrescribir todos los conjuntos de copia de seguridad existentes
� Comprobar copia de seguridad al concluir
Administración
� Copias de seguridad: Crear◦ Copia diferencial� Base de datos grande, pero pocos movimientos dia� Se copian los datos nuevos y las modificaciones de la bd� Menor tiempo� General:
� Tipo: Diferencial� Si es el mismo soporte: Anexar al conjunto de copia de seguridad
existente� Soporte nuevo: Sobrescribir todos los conjuntos de copia de
seguridad existentes
� Opciones:� Comprobar copia de seguridad al finalizar
Administración
� Copias de seguridad: Crear◦ Copia registro transacciones
� BD: Fichero de datos + Fichero de transacciones� Cada vez que se realiza una copia de seguridad completa o diferencia,
el registro de transacciones se inicializa� A partir de ese momento se inicia un nuevo registro de las
operaciones que vayan realizándose sobre la bd� Registro de transacciones: Fichero independiente de los datos.� Si se estropea el fichero de datos, se puede recuperar la información
con las copias de seguridad y el archivo de registro de transacciones� Si el registro de transacciones estuviera en una unidad separada, más
seguridad� Se puede realizar copias de registro de transacciones con más
frecuencia (tamaño menor)
Administración
� Copias de seguridad: Recuperar
◦ Si tenemos copias completa de bd, sólo podemos recuperar la última de esas copias (la más reciente)
◦ Servidor / Botón derecho / Tareas / Restaurar / Base de datos
� Seleccionar la bd desde donde se recuperará la copia
� Se le puede poner un nuevo nombre
� La recuperación no afecte al estado actual de las bd existentes en el servidor
� Fecha a que se desea efectuar la recuperación: la más reciente posible u otra (dejamos la bd como estaba en ese momento)
Administración
� Copias de seguridad: Recuperar◦ La recuperación se realizará automáticamente� Primero copia completa, luego diferencial y luego transacciones
(si existen en la copia)� Dependiendo de lo que tengamos recuperaremos toda la
información o parte� Tras la restauración el estado de la bd será el que tenía en
algún momento anterior al fallo, pero no el que tenía en el instante del fallo (si no tenemos las transacciones)
� Si hay un fallo, primero hacer copia del registro de transacciones y luego recuperarlo todo
� Con esto se devolverá la bd al estado que tenía cuando se produjo el fallo, si bien las transacciones sin confirmar serán descartadas
Administración
� Mantenimiento de las bases de datos
◦ A medida que se trabaja con una bd, va creciendo
◦ La organización de datos e índices puede no ser la más optima (espacio inutilizado) � Hacer compactación
◦ Mantenimiento � Crear plan de mantenimiento
� Copias de seguridad
� Compactación
� Comprobar integridad
Administración
� Mantenimiento de las bases de datos
◦ Servidor / Administración / Planes de mantenimiento / Botón derecho / Nuevo plan
◦ Asistente para planes de mantenimiento para la bdelegida
� Asignar un nombre al plan, indicar si se utilizará una programación independiente para cada tarea o una global para todas ellas, lista de tareas de mantenimiento
Administración
� Mantenimiento de las bases de datos
◦ Reducir ocupación de la bd y mejorar el rendimiento
� Reducción del tamaño de la bd
� Reorganización de índices
� Limpieza del historial
◦ Orden en que se ejecutarán las tareas elegidas
◦ Programación a utilizar y propiedades de cada tarea
Administración
� Mantenimiento de las bases de datos
◦ Modificar plan de mantenimiento
� Servidor / Administración / Planes de mantenimiento / Seleccionar plan / Botón derecho / Propiedades
Administración
� Trabajos del agente SQL Server◦ Al definir un plan de mantenimiento � Se definen uno o varios
trabajos que el Agente SQL tendrá que poner en marcha
◦ Agente SQL� Habilita las tareas programadas� Aparecerán las copias de seguridad programadas, los planes de
mantenimiento programados� Servidor / Agente SQL Server / Seleccionar trabajo / Botón derecho /
Propiedades� Iniciar, detener, deshabilitar (para que no se vuelva a ejecutar), eliminar
trabajo� Los trabajos se pueden crear desde aquí, pero es más fácil crearlos con
planes de mantenimiento� Una vez creado, es más fácil modificarlos desde el agente SQL