El documento habla sobre la integridad de datos en SQL Server 2008 R2. Existen varios tipos de integridad de datos como la integridad de entidad, integridad de dominio, integridad referencial e integridad definida por el usuario. La integridad de datos garantiza que los valores de datos en las bases de datos sean válidos y precisos.
0 calificaciones0% encontró este documento útil (0 votos)
126 vistas60 páginas
El documento habla sobre la integridad de datos en SQL Server 2008 R2. Existen varios tipos de integridad de datos como la integridad de entidad, integridad de dominio, integridad referencial e integridad definida por el usuario. La integridad de datos garantiza que los valores de datos en las bases de datos sean válidos y precisos.
El documento habla sobre la integridad de datos en SQL Server 2008 R2. Existen varios tipos de integridad de datos como la integridad de entidad, integridad de dominio, integridad referencial e integridad definida por el usuario. La integridad de datos garantiza que los valores de datos en las bases de datos sean válidos y precisos.
El documento habla sobre la integridad de datos en SQL Server 2008 R2. Existen varios tipos de integridad de datos como la integridad de entidad, integridad de dominio, integridad referencial e integridad definida por el usuario. La integridad de datos garantiza que los valores de datos en las bases de datos sean válidos y precisos.
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Está en la página 1de 60
Integridad de los datos
SQL Server 2008 R2
La exigencia de integridad de los datos garantiza la calidad de los datos de la base de datos. Por ejemplo, si se especifica para un empleado el valor de identificador de 123, la base de datos no debe permitir que ningn otro empleado tenga el mismo valor de identificador. Si tiene una columna employee_rating para la que se prevean valores entre 1 y 5, la base de datos no debe aceptar valores fuera de ese intervalo. Si en la tabla hay una columnadept_id en la que se almacena el nmero de departamento del empleado, la base de datos slo debe permitir valores que correspondan a los nmeros de departamento de la empresa. Dos pasos importantes en el diseo de las tablas son la identificacin de valores vlidos para una columna y la determinacin de cmo forzar la integridad de los datos en la columna. La integridad de datos pertenece a una de las siguientes categoras: Integridad de entidad Integridad de dominio Integridad referencial Integridad definida por el usuario Integridad de entidad La integridad de entidad define una fila como entidad nica para una tabla determinada. La integridad de entidad exige la integridad de las columnas de los identificadores o la clave principal de una tabla, mediante ndices y restricciones UNIQUE, o restricciones PRIMARY KEY. Integridad de dominio La integridad de dominio viene dada por la validez de las entradas para una columna determinada. Puede exigir la integridad de dominio para restringir el tipo mediante tipos de datos, el formato mediante reglas y restricciones CHECK, o el intervalo de valores posibles mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT, definiciones NOT NULL y reglas. Integridad referencial La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se eliminan filas. En SQL Server la integridad referencial se basa en las relaciones entre claves externas y claves principales o entre claves externas y claves exclusivas, mediante restricciones FOREIGN KEY y CHECK. La integridad referencial garantiza que los valores de clave sean coherentes en las distintas tablas. Para conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la base de datos. Cuando se exige la integridad referencial, SQL Server impide a los usuarios: Agregar o cambiar filas en una tabla relacionada si no hay ninguna fila asociada en la tabla principal. Cambiar valores en una tabla principal que crea filas hurfanas en una tabla relacionada. Eliminar filas de una tabla principal cuando hay filas relacionadas coincidentes. Por ejemplo, en las tablas Sales.SalesOrderDetail y Production.Product de la base de datos AdventureWorks2008R2, la integridad referencial se basa en la relacin entre la clave externa (ProductID) de la tabla Sales.SalesOrderDetail y la clave principal (ProductID) de la tabla Production.Product. Esta relacin garantiza que un pedido de ventas no pueda nunca hacer referencia a un producto que no existe en la tablaProduction.Product.
Integridad definida por el usuario La integridad definida por el usuario permite definir reglas de empresa especficas que no pertenecen a ninguna otra categora de integridad. Todas las categoras de integridad admiten la integridad definida por el usuario. Esto incluye todas las restricciones de nivel de columna y nivel de tabla en CREATE TABLE, procedimientos almacenados y desencadenadores.
Limitaciones SQL Integrity
Las restricciones de integridad se utilizan para aplicar las reglas de negocio para las tablas de bases de datos. Las restricciones disponibles en SQL son clave externa , Not Null , Unique , Check . Las restricciones se pueden definir de dos maneras 1) Las restricciones pueden especificarse inmediatamente despus de la definicin de columna. Esto se conoce como definicin de columna. 2) Las restricciones pueden especificarse despus se definen todas las columnas. Esto se conoce como definicin de tabla. 1) La clave principal de SQL: Esta restriccin define una columna o combinacin de columnas que identifica de forma nica cada fila de la tabla. Sintaxis para definir una clave primaria a nivel de la columna: column name datatype [CONSTRAINT constraint_name] PRIMARY KEY Sintaxis para definir una clave primaria a nivel de tabla: [CONSTRAINT constraint_name] PRIMARY KEY (column_name1,column_name2,..) column_name1, column_name2 son los nombres de las columnas que definen la clave primaria. La sintaxis dentro del soporte, es decir [CONSTRAINT] es opcional. Por ejemplo: Para crear una tabla de empleados con restriccin de clave primaria, la consulta sera. Clave principal a nivel de la columna: CREATE TABLE employee ( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10) ); O CREATE TABLE employee ( id number(5) CONSTRAINT emp_id_pk PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10) ); Clave principal a nivel de la columna: CREATE TABLE employee ( id number(5), name char(20), dept char(10), age number(2), salary number(10), location char(10), CONSTRAINT emp_id_pk PRIMARY KEY (id) ); Clave principal en el nivel de tabla: CREATE TABLE employee ( id number(5), NOT NULL, name char(20), dept char(10), age number(2), salary number(10), location char(10), ALTER TABLE employee ADD CONSTRAINT PK_EMPLOYEE_ID PRIMARY KEY (id) );
2) Tecla de SQL Extranjera o la integridad de referencia: Esta restriccin identifica cualquier columna hace referencia a la clave principal de otra tabla. Establece una relacin entre dos columnas en la misma tabla o entre diferentes tablas. Para una columna que se define como una clave externa, que debera ser un definido como una clave principal en la tabla que se est refiriendo. Una o ms columnas se pueden definir como clave externa. Sintaxis para definir una clave externa a nivel de la columna: [CONSTRAINT constraint_name] REFERENCES Referenced_Table_name(column_name) Sintaxis para definir una clave externa a nivel de tabla: [CONSTRAINT constraint_name] FOREIGN KEY(column_name) REFERENCES referenced_table_name(column_name); Por ejemplo: 1) Vamos a usar la tabla "producto" y "order_items." clave externa a nivel de la columna: CREATE TABLE product ( product_id number(5) CONSTRAINT pd_id_pk PRIMARY KEY, product_name char(20), supplier_name char(20), unit_price number(10) ); CREATE TABLE order_items ( order_id number(5) CONSTRAINT od_id_pk PRIMARY KEY, product_id number(5) CONSTRAINT pd_id_fk REFERENCES, product(product_id), product_name char(20), supplier_name char(20), unit_price number(10) ); Clave externa a nivel de tabla: CREATE TABLE order_items ( order_id number(5) , product_id number(5), product_name char(20), supplier_name char(20), unit_price number(10) CONSTRAINT od_id_pk PRIMARY KEY(order_id), CONSTRAINT pd_id_fk FOREIGN KEY(product_id) REFERENCES product(product_id) ); 2) Si la tabla de empleados tiene un 'mgr_id', es decir, id gerente como una clave externa que hace referencia a la clave principal 'id' dentro de la misma tabla, la consulta sera como, CREATE TABLE employee ( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), mgr_id number(5) REFERENCES employee(id), salary number(10), location char(10) ); 3) SQL Not Null Restriccin: Esta restriccin garantiza que todas las filas de la tabla contienen un valor definido para la columna que se especifica como no nulo.Lo que significa un valor nulo no est permitido. Sintaxis para definir una restriccin NOT NULL: [CONSTRAINT constraint name] NOT NULL Por ejemplo: Para crear una tabla de empleados con valor nulo, la consulta sera como CREATE TABLE employee ( id number(5), name char(20) CONSTRAINT nm_nn NOT NULL, dept char(10), age number(2), salary number(10), location char(10) ); 4) SQL Clave nica: Esta restriccin asegura que una columna o un grupo de columnas en cada fila tienen un valor distinto. Una columna (s) puede tener un valor nulo, pero los valores no puede ser duplicada. Sintaxis para definir una clave nica a nivel de la columna: [CONSTRAINT constraint_name] UNIQUE Sintaxis para definir una clave nica a nivel de tabla: [CONSTRAINT constraint_name] UNIQUE(column_name) Por ejemplo: Para crear una tabla de empleados con clave nica, la consulta sera como, Clave nica a nivel de la columna: CREATE TABLE employee ( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10) UNIQUE ); o CREATE TABLE employee ( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10) CONSTRAINT loc_un UNIQUE ); Clave nica a nivel de tabla: CREATE TABLE employee ( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10), CONSTRAINT loc_un UNIQUE(location) ); 5) SQL restriccin CHECK: Esta restriccin define una regla de negocio en una columna.Todas las filas deben cumplir esta regla. La restriccin se puede aplicar para una sola columna o un grupo de columnas. Sintaxis para definir una restriccin de comprobacin: [CONSTRAINT constraint_name] CHECK (condition) Por ejemplo: En la tabla de empleados para seleccionar el sexo de una persona, la consulta sera como Compruebe restriccin a nivel de la columna: CREATE TABLE employee ( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), gender char(1) CHECK (gender in ('M','F')), salary number(10), location char(10) ); Compruebe restriccin a nivel de tabla: CREATE TABLE employee ( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), gender char(1), salary number(10), location char(10), CONSTRAINT gender_ck CHECK (gender in ('M','F')) );
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID)) );
Restricciones de integridad en SQL ndices Los ndices constituyen un mecanismo informtico para acelerar el acceso a datos almacenados en ficheros. Son importantes para posibilitar un procesamiento eficiente de las operaciones sobre la base de datos y tambin para garantizar un cumplimiento eficiente de las restricciones de integridad referencial. Los ndices estn asociados a atributos concretos de una tabla (un solo atributo o la agregacin de varios atributos) y su funcin es agilizar las operaciones que se realicen sobre dichos atributos. Fsicamente adoptan la forma de un fichero adjunto a la tabla. Existen varios tipos de ndices y una gran variedad de tcnicas de implementacin, algunas de ellas muy sofisticadas, pero siempre se persigue el objetivo general de evitar en lo posible el acceso secuencial a las tuplas de una tabla para realizar una operacin. Considrese por ejemplo una seleccin en una tabla condicionada al valor de un determinado atributo: La obtencin de las tuplas de salida requiere en principio realizar un recorrido secuencial de todas las tuplas de la tabla para ver en cules se produce la igualdad. Si la cardinalidad de la tabla es grande (muchas filas) este recorrido puede consumir mucho tiempo. Por el contrario si se dispone de un ndice asociado al correspondiente atributo de la tabla entonces la consulta anterior es muy rpida y el acceso a las tuplas que satisfacen la igualdad es inmediato gracias al acceso directo o indexado. El ndice tambin permite optimizar el acceso con condicionales de menor, mayor, etc. Un ndice est siempre asociado a un subconjunto de los atributos de una tabla. La creacin de ndices se realiza mediante la sentenciaCREATE INDEX de la siguiente manera: CREATE INDEX nombre_indice ON nombre_tabla(atributo1, atributo2, ...); La eliminacin o borrado de ndices se realiza mediante la sentencia DROP INDEX de la siguiente manera: DROP INDEX nombre_indice; SELECT * FROM tabla WHERE atributo=valor; Para una misma tabla pueden crearse varios ndices y cada uno de ellos puede estar asociado a un solo atributo o en general a la agregacin de varios atributos (clave de bsqueda). No es obligatoria la existencia de ndices pero lo normal es crear automticamente por defecto un ndice para la clave primaria de una tabla y las alternas que pudieran existir (restricciones de tipo UNIQUE). No es obligatorio que los atributos sobre los que se define un ndice deban aceptar nicamente valores nicos o no repetidos. Los ndices pueden crearse y borrarse dinmicamente en el tiempo segn se necesiten para realizar alguna consulta determinada. Se ha de tener muy presente que la creacin de un ndice requiere de un cierto tiempo de computacin y de cantidad de memoria de almacenamiento secundario (disco). En general el efecto de un ndice es escaso en tablas con cardinalidad (nmero de filas) pequea pero puede llegar a ser muy relevante en tablas grandes. Internamente los ndices se implementan utilizando una potente estructura de datos denominada rbol-B. Aunque no es lo corriente existen implementaciones en las cuales las columnas indexadas se almacenan una sola vez, no en el fichero ndice y en la tabla aparte. Esto evidentemente reduce el tiempo de actualizacin del ndice y requiere menos espacio en disco. La gestin de los ndices se realiza de manera inteligente por el propio sistema. No es necesario indicar explcitamente qu ndices se van a utilizar para una consulta determinada sino que es el propio SGBD, al analizar la condicin de la consulta (clausula WHERE) el que selecciona automticamente el ndice a usar. Un ndice asociado a un conjunto de atributos de una tabla debe actualizarse cada vez que se realice alguna de las siguientes operaciones: 1. Insercin de una nueva tupla. 1. Borrado de una tupla. 1. Modificacin del valor de alguno de los atributos indexados. Esta actualizacin la realiza automticamente el SGBD y requiere de un tiempo de procesado usualmente pequeo dependiente del nmero de filas afectadas por la operacin. La conveniencia de utilizar un ndice sobre unos atributos depender de la frecuencia relativa con que se realicen operaciones de consulta sobre esos atributos. En general durante la utilizacin prctica de una base de datos las operaciones de consulta son con mucho las ms frecuentes. A modo de ejemplo veamos el caso de una operacin de consulta en una tabla basada en una comparacin de igualdad de los valores de dos atributos a1 y a2, segn se hayan definido ndices o no. SELECT * FROM tabla WHERE a1=v1 AND a2=v2; ndice Procesamiento Ninguno Recorrido de todas las filas de la tabla comprobando la condicin compuesta. Sobre a1 1. Usar el ndice para obtener directamente todas las tuplas que satisfagan la igualdad del atributo a1 con el valor v1. 2. Examinar secuencialmente todas esas tuplas comprobando la igualdad del atributo a2 con el valor v2. Sobre a2 1. Usar el ndice para obtener directamente todas las tuplas que satisfagan la igualdad del atributo a2 con el valor v2. 2. Examinar secuencialmente todas esas tuplas comprobando la igualdad del atributo a1 con el valor v1. Un ndice sobre a1 y otro sobre a2 1. Usar el ndice sobre a1 para obtener todas las tuplas que satisfagan la igualdad del atributo a1 con el valor v1. 2. Usar el ndice sobre a2 para obtener todas las tuplas que satisfagan la igualdad del atributo a2 con el valor v2. 3. La salida es la interseccin de esos dos conjuntos de tuplas. ndice mltiple: Agregacin de a1 y a2 Usar el ndice para obtener directamente todas las tuplas que verifican la condicin compuesta de igualdad. En general, para una condicin compuesta de este tipo el procesamiento ms eficiente se obtiene para un ndice agregado de los dos atributos, aunque la eficiencia prctica depender del nmero de tuplas que verifiquen las condiciones. Puede darse el caso de que un ndice mltiple que sea bastante bueno para realizar eficientemente consultas con condiciones de igualdad no lo sea para comparaciones de menor o mayor. Restricciones Una caracterstica deseable en un SGBD relacional es que la especificacin de restricciones pueda realizarse ntegramente utilizando el lenguaje de definicin de datos (DDL) de manera que forme parte integrada del propio esquema relacional en s y no sea algo externo que se gestiona por el usuario a su libre parecer o por la lgica de las aplicaciones que se ejecuten sobre la base de datos. El lenguaje SQL posibilita los siguientes tipos de restricciones que se especifican durante la creacin de las tablas: Restriccin Efecto NOT NULL No se permite que un atributo tome valores nulos. UNIQUE No se permiten valores repetidos en un atributo o agregacin de atributos. Especificacin de claves candidatas. Se aceptan mltiples valores nulos. PRIMARY KEY Definicin de un atributo o agregacin de atributos como clave primaria. Implcitamente NOT NULL. FOREIGN KEY (atributo1, ...) Definicin de un atributo o agregacin de atributos como clave ajena. Si no se especifica lo contrario se permiten REFERENCES nombre_tabla(atributo1, ...) ON DELETE CASCADE valores nulos, lo cual no suele ser recomendable. Los atributos referenciados han de constituir clave primaria o clave alternativa. Si los atributos referenciados son clave primaria en la otra tabla basta con especificar el nombre de la tabla. La clausula ON DELETE CASCADE es opcional y hace referencia a si se deben propagar los borrados de tuplas en la tabla referenciada en aquellas tablas que las referencien. Si no se incluye se rechazan como errneos los borrados de tuplas que ocasionen violacin de la integridad referencial. CHECK (predicado) Cada tupla de la tabla debe verificar el predicado lgico referente a la validez del valor concreto de un atributo. Pueden incluirse subconsultas que hagan referencia a otras tablas. Las restricciones han de evaluarse cuando se insertan tuplas, cuando se borran tuplas o bien cuando se modifica el valor de un atributo en alguna tupla ya que en todo momento ha de garantizarse el mantenimiento de la integridad referencial. Existe un mecanismo que posibilita agrupar varias operaciones de manera que la verificacin de las restricciones no se realice para cada operacin individual sino que se pospone hasta la realizacin de todo el conjunto de operaciones. Estas comprobaciones sobre si se cumplen o no las restricciones impuestas pueden ser computacionalmente costosas segn el tamao de la base de datos y la complejidad de la restriccin. Las restricciones pueden tener asociado un nombre si se definen de la siguiente manera: CONSTRAINT nombre_constraint definicin_constraint Por defecto una restriccin est activa tras su definicin. Las restricciones con nombre pueden activarse o desactivarse a voluntad mediante la clausula ENABLE CONSTRAINT o DISABLE CONSTRAINT utilizadas dentro de una sentencia ALTER TABLE de la siguiente manera: ALTER TABLE nombre_tabla ENABLE CONSTRAINT nombre_constraint; ALTER TABLE nombre_tabla DISABLE CONSTRAINT nombre_constraint; Los asertos son predicados lgicos que ha de cumplir la base de datos considerada como un todo (no cada tupla de una tabla por separado, como es el caso de un constraint) y que pueden involucrar un nmero cualquiera de atributos en todas las tuplas de una o varias tablas. Permiten expresar condiciones complejas que se desea que la base de datos satisfaga siempre. No se especifican dentro de una sentencia de creacin de tabla sino que pueden crearse y eliminarse de manera independiente mediante las sentencias CREATE ASSERTION y DROP ASSERTION de la siguiente manera: CREATE ASSERTION nombre_aserto CHECK (predicado); DROP ASSERTION nombre_aserto; Naturalmente el predicado lgico a satisfacer puede incluir varias sentencias de seleccin sobre cualesquiera tablas de la base de datos. Al crear un aserto el SGBD comprueba su validez sobre el estado actual de la base de datos. En lo sucesivo solo se permitirn inserciones, modificaciones y borrados en la base de datos que no hagan que se viole el aserto. Esta comprobacin de la validez del predicado puede requerir un relativamente elevado coste computacional. Valores nulos La posibilidad de asignar valores nulos a los atributos permite aadir ciertas posibilidades semnticas a la informacin almacenada en la base de datos (dato no relevante, desconocido, etc). Sin embargo la interpretacin que las sentencias SQL hagan de los valores nulos puede resultar problemtica y producir resultados un tanto extraos. Cmo debe reaccionar una operacin que acta sobre valores nulos es algo que suele ser particular de cada SGBD concreto. Es comn que el resultado de cualquier operacin aritmtica (suma, resta, multiplicacin, etc) que involucra un valor nulo, sea nulo. A las comparaciones y operaciones lgicas en las que aparecen valores nulos se les suele otorgar un valor lgico de falsedad por defecto aunque se podra argumentar que el valor lgico resultante debera significar desconocido. En una clausula de ordenacin ORDER BY la salida que se corresponde con valores nulos para el criterio de ordenacin se suele incorporar al principio del todo o bien al final, ante la imposibilidad de ordenar utilizando los valores nulos. Las funciones de agregacin como las de suma, mximo, mnimo y media aritmtica simplemente ignoran los valores nulos en su entrada. La excepcin es la funcin de cuenta COUNTque s cuenta los valores nulos. Si se aplica una funcin de agregacin sobre una coleccin de datos vaca se devuelve un valor nulo a excepcin nuevamente de la funcin de cuenta que devuelve un cero. Para estudiar el efecto de los valores nulos vase la salida de una serie de operaciones sobre la siguiente tabla t de ejemplo compuesta de cuatro atributos. a b c d
A B C D ---------- ---------- ---------- ---------- 4 10 100 1 15 2 200 200 5 300 8 13 6 13 400 3 10 500 7
SELECT a,b FROM t ORDER BY b;
A B ---------- ---------- 4 10 3 10 8 13 6 13 1 15 2 200 5 7
SELECT b,c FROM t WHERE b=c;
B C ---------- ---------- 200 200
SELECT MIN(b) FROM t;
MIN(B) ---------- 10
SELECT MIN(d) FROM t;
MIN(D) ----------
SELECT SUM(c) FROM t;
SUM(C) ---------- 1500
SELECT SUM(d) FROM t;
SUM(D) ----------
SELECT COUNT(*) FROM t WHERE b<100;
COUNT(*) ---------- 5
SELECT COUNT(*) FROM t WHERE d>0;
COUNT(*) ---------- 0
SELECT COUNT(*) FROM t WHERE c!=0;
COUNT(*) ---------- 5 En los siguientes ejemplos puede comprobarse la intervencin de los valores nulos en las operaciones de conjuntos. SELECT b FROM t WHERE b NOT IN (SELECT a FROM t);
B ---------- 10 15 200 13 13 10
SELECT c FROM t WHERE c IN (SELECT d FROM t);
no rows selected
SELECT d FROM t UNION ALL SELECT b FROM t;
D ----------
10 15 200
D ----------
13 13 10
16 rows selected. Veamos ahora que la intervencin de un valor nulo en una operacin aritmtica ocasiona un resultado igualmente nulo. SELECT b+c FROM t;
B+C ---------- 110
400 SELECT a*d FROM t;
A*D ----------
8 rows selected.
413 510
8 rows selected.
Definicin de ndices Un ndice es una estructura de datos que permite acceder a diferentes filas de una misma tabla a travs de un campo (o campos clave). Un ndice permite un acceso mucho ms rpido a los datos. [arriba]
Introduccin a los ndices. Para entender lo que es un ndice debemos saber primero como se almacena la informacin internamente en las tablas de una base de datos. Cada tabla se divide en pginas de datos, imaginemos un libro, podriamos escribirlo en "una sola hoja enorme" al estilo pergamino egipcio, o bien en pginas a las que podemos acceder rpidamente a traves de un ndice. Est idea es la que se aplica en el mundo de las bases de datos, la informacin esta guardada en una tabla (el libro) que tiene muchas hojas de datos (las pginas del libro), con un ndice en el que podemos buscar la informacin que nos interesa. Si queremos buscar la palabra zapato en un diccionario , qu hacemos? Leemos todo el diccionario hasta encontrar la palabra, con lo que nos habremos leido el diccionario enterito (seguro que aprenderiamos un montn!) Buscamos en el ndice en que pgina est la letra z, y es en esa pgina donde buscamos. Ni que decir tiene que la opcin dos es la correcta, y es de este modo como se utiliza un ndice en las bases de datos, se define el nidice a travs de un campo (o campos) y es a partir de este punto desde donde de busca.
Los ndices se actualizan automticamente cuando realizamos operaciones de escritura en la base de datos. Este es un aspecto muy importante de cara al rendimiento de las operaciones de escritura, ya que adems de escribir los datos en la tabla se escribiran tambin en el indice. Un nmero elevado de ndices har ms lentas estas operaciones. Sin embargo, salvo casos excepcionales, el beneficio que aportan los indices compensa (de largo) esta penalizacin. arriba
Creacin de ndices La creacin de ndices, como ya hemos visto, permite acelerar las consultas que se realizan en la base de datos. Las sentencias de SQL para manipular ndices son:
CREATE INDEX;
DROP INDEX;
La sintaxis para la creacin de indices es la siguiente:
CREATE [UNIQUE] INDEX <nombre_indice> ON <nombre_tabla>( <nombre_campo> [ASC | DESC] {,<nombre_campo> [ASC | DESC]}) ); La plabra clave UNIQUE especifica que que no pueden existir claves duplicadas en el ndice. ASC | DESC especifican el criterio de ordenacin elegido, ascendente o descendente, por defecto es ascendente. Ejemplo: En el apartado dedicado a la definicin de tablas creamos la tabla tClientes, este ejmplo crea un ndice nico en el campo NIF. Esto nos permitir buscar mucho mas rpido por el campo NIF y nos asegurar que no tengamos dos NIF iguales.
CREATE UNIQUE INDEX UIX_CLIENTES_NIF ON tCLIENTES (NIF); Las claves primarias son ndices. Los nombres de los ndices deben ser nicos. Para eliminar un ndice debemos emplear la sentencia DROP INDEX.
DROP INDEX <nombre_tabla>.<nombre_indice>; Ejemplo:Para eliminar el ndice creado anteriormente.
DROP INDEX tCLIENTES.UIX_CLIENTES_NIF; Directrices generales para disear ndices SQL Server 2008 R2 Otras versiones
Personas que lo han encontrado til: 5 de 7 - Valorar este tema Los administradores de bases de datos ms experimentados pueden disear un buen conjunto de ndices, pero esta tarea es muy compleja, consume mucho tiempo y est sujeta a errores, incluso con cargas de trabajo y bases de datos con un grado de complejidad no excesivo. La comprensin de las caractersticas de la base de datos, las consultas y las columnas de datos facilita el diseo de los ndices. Consideraciones acerca de las bases de datos Cuando disee un ndice, tenga en cuenta las siguientes directrices acerca de la base de datos: Si se utiliza un gran nmero de ndices en una tabla, el rendimiento de las instrucciones INSERT, UPDATE, DELETE y MERGE se ver afectado, ya que todos los ndices deben ajustarse adecuadamente a medida que cambian los datos de la tabla. o Evite crear demasiados ndices en tablas que se actualizan con mucha frecuencia y mantenga los ndices estrechos, es decir, defnalos con el menor nmero de columnas posible. o Utilice un nmero mayor de ndices para mejorar el rendimiento de consultas en tablas con pocas necesidades de actualizacin, pero con grandes volmenes de datos. Un gran nmero de ndices contribuye a mejorar el rendimiento de las consultas que no modifican datos, como las instrucciones SELECT, ya que el optimizador de consultas dispone de ms ndices entre los que elegir para determinar el mtodo de acceso ms rpido. La indizacin de tablas pequeas puede no ser una solucin ptima, porque puede provocar que el optimizador de consultas tarde ms tiempo en realizar la bsqueda de los datos a travs del ndice que en realizar un simple recorrido de la tabla. De este modo, es posible que los ndices de tablas pequeas no se utilicen nunca; sin embargo, sigue siendo necesario su mantenimiento a medida que cambian los datos de la tabla. Los ndices en vistas pueden mejorar de forma significativa el rendimiento si la vista contiene agregaciones, combinaciones de tabla o una mezcla de agregaciones y combinaciones. No es necesario hacer referencia de forma explcita a la vista en la consulta para que el optimizador de consultas la utilice. Para obtener ms informacin, vea Disear vistas indizadas. Utilice el Asistente para la optimizacin de motor de base de datos para analizar las bases de datos y crear recomendaciones de ndices. Para obtener ms informacin, vea Descripcin del Asistente para la optimizacin de motor de base de datos. Consideraciones sobre las consultas Cuando disee un ndice, tenga en cuenta las siguientes directrices acerca de las consultas: Cree ndices no agrupados en todas las columnas que se utilizan con frecuencia en predicados y condiciones de combinacin de las consultas. Importante Evite agregar columnas innecesarias. Si agrega demasiadas columnas de ndice, puede reducir el espacio en disco y el rendimiento del mantenimiento del ndice. La utilizacin de ndices puede mejorar el rendimiento de las consultas, ya que los datos necesarios para satisfacer las necesidades de la consulta existen en el propio ndice. Es decir, slo se necesitan las pginas de ndice y no las pginas de datos de la tabla o el ndice agrupado para recuperar los datos solicitados; por tanto, se reduce la E/S global en el disco. Por ejemplo, una consulta de las columnas a y b de una tabla que dispone de un ndice compuesto creado en las columnas a, b y c puede recuperar los datos especificados del propio ndice. Escriba consultas que inserten o modifiquen tantas filas como sea posible en una sola instruccin, en lugar de utilizar varias consultas para actualizar las mismas filas. Al utilizar slo una instruccin, se puede aprovechar el mantenimiento de ndices optimizados. Analice el tipo de la consulta y cmo se utilizan las columnas en ella. Por ejemplo, una columna utilizada en una consulta de coincidencia exacta sera una buena candidata para un ndice no agrupado o agrupado. Para obtener ms informacin, vea Tipos de consultas e ndices. Consideraciones sobre las columnas Cuando disee un ndice, tenga en cuenta las siguientes directrices acerca de las columnas: Utilice una longitud corta en la clave de los ndices agrupados. Los ndices agrupados tambin mejoran si se crean en columnas nicas o que no admitan valores NULL. Para obtener ms informacin, vea Directrices para disear ndices clster. Las columnas con tipos de datos ntext, text, image, varchar(max), nvarchar(max) y varbinary(max) no se pueden especificar como columnas de clave de ndice. Sin embargo, los tipos de datos varchar(max), nvarchar(max), varbinary(max) y xml pueden participar en un ndice no agrupado como columnas de ndice sin clave. Para obtener ms informacin, vea ndice con columnas incluidas. El tipo de datos xml slo puede ser una columna de clave en un ndice XML. Para obtener ms informacin, vea ndices en columnas del tipo de datos XML. Examine la unicidad de las columnas. Un ndice nico en lugar de un ndice no nico con la misma combinacin de columnas proporciona informacin adicional al optimizador de consultas y, por tanto, resulta ms til. Para obtener ms informacin, veaDirectrices para disear ndices nicos. Examine la distribucin de los datos en la columna. A menudo, se crean consultas cuya ejecucin es muy larga al indizar una columna con pocos valores nicos, o bien al realizar una combinacin en dicha columna. Se trata de un problema fundamental con los datos y la consulta, y normalmente no se puede resolver sin identificar esta situacin. Por ejemplo, una agenda telefnica ordenada por apellidos no localizar rpidamente a una persona si todas las personas de la ciudad se llaman Smith o Jones. Para obtener ms informacin acerca de la distribucin de datos, vea Utilizar las estadsticas para mejorar el rendimiento de las consultas. Considere la posibilidad de usar ndices filtrados en columnas que tengan subconjuntos bien definidos, por ejemplo columnas dispersas, columnas con una mayora de valores NULL, columnas con categoras de valores y columnas con intervalos de valores diferenciados. Un ndice filtrado bien diseado puede mejorar el rendimiento de las consultas, as como reducir los costos de almacenamiento y de mantenimiento de los ndices. Para obtener ms informacin, vea Directrices generales para disear ndices filtrados. Tenga en cuenta el orden de las columnas si el ndice va a contener varias columnas. La columna que se utiliza en la clusula WHERE en una condicin de bsqueda igual a (=), mayor que (>), menor que (<) o BETWEEN, o que participa en una combinacin, debe situarse en primer lugar. Las dems columnas deben ordenarse basndose en su nivel de diferenciacin, es decir, de ms distintas a menos distintas. Por ejemplo, si el ndice se define como LastName, FirstName, resultar til si el criterio de bsqueda es WHERE LastName = 'Smith' o WHERE LastName = Smith AND FirstName LIKE 'J%'. Sin embargo, el optimizador de consultas no utilizar el ndice en una consulta que slo busque FirstName (WHERE FirstName = 'Jane'). Tenga en cuenta la indizacin de columnas calculadas. Para obtener ms informacin, vea Crear ndices en columnas calculadas. Caractersticas de los ndices Despus de determinar que un ndice resulta adecuado para una consulta, puede seleccionar el tipo de ndice que mejor se ajusta a la situacin. Entre las caractersticas de los ndices se incluyen: ndices agrupados y no agrupados ndices exclusivos y no exclusivos ndices de una sola columna y de varias columnas Orden ascendente o descendente en las columnas del ndice ndices de tabla completa y filtrados en ndices no agrupados
Creacin de Constraint
Los constraints se utilizan para prevenir el registro de datos no vlidos a las tablas. Se pueden utilizar los constraints para:
- Imponer reglas en los datos de una tabla cuando una fila es insertada, modificada o borrada de la tabla, el constraint se debe cumplir para que la operacin se realice. - Previene la eliminacin de una tabla si existen dependencias con otras. Las reglas de negocio se implementan mediante restricciones (constraints), disparadores (triggers) o cdigo de aplicacin. Las restricciones se almacenan en el SQL Server en las tablas syscomments, sysreferences y sysconstraints.
La sintaxis de creacin de una Tabla en SQL server es la siguiente, es posible crear una tabla con sus constraint incluidos: CREATE TABLE Tabla ( { < definicinColumna > | < restriccinTabla > } [ ,...n ]) < definicinColumna > ::= { columnatipoDeDatos } [ [ DEFAULT expresinConstante ] [ < restriccinColumna > ] [ ,..n] < restriccinColumna > ::= [ CONSTRAINT nombreRestriccin ] | [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] ] | [ [ FOREIGN KEY ] REFERENCES tablaRef [ ( columnaRef ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ]] | CHECK ( expresinLgica ) } < restriccinTabla > ::= [ CONSTRAINT nombreRestriccin ] { [ { PRIMARY KEY | UNIQUE } [CLUSTERED | NONCLUSTERED] { ( columna [ ASC | DESC ] [ ,...n ] ) } ] | FOREIGN KEY [ ( columna [ ,...n ] ) ] REFERENCES tablaRef [ ( columnaRef [ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] | CHECK ( condicionesBsqueda ) }
Creacin de una Tabla de Ejemplo: USE northwind CREATE TABLE dbo.Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName nvarchar (40) NOT NULL, SupplierID int NULL, CategoryID int NULL, QuantityPerUnit nvarchar (20) NULL, UnitPrice money NULL CONSTRAINT DF_Products_UnitPrice DEFAULT(0), UnitsInStock smallint NULL CONSTRAINT DF_Products_UnitsInStock DEFAULT (0), UnitsOnOrder smallint NULL CONSTRAINT DF_Products_UnitsOnOrder DEFAULT (0), ReorderLevel smallint NULL CONSTRAINT DF_Products_ReorderLevel DEFAULT (0), Discontinued bit NOT NULL CONSTRAINT DF_Products_Discontinued DEFAULT( 0), CONSTRAINT PK_Products PRIMARY KEY CLUSTERED (ProductID), CONSTRAINT FK_Products_Categories FOREIGN KEY (CategoryID) REFERENCES dbo.Categories(CategoryID) ON UPDATE CASCADE, CONSTRAINT FK_Products_Suppliers FOREIGN KEY (SupplierID) REFERENCES dbo.Suppliers(SupplierID) ON DELETE CASCADE, CONSTRAINT CK_Products_UnitPrice CHECK (UnitPrice >= 0), CONSTRAINT CK_ReorderLevel CHECK (ReorderLevel >= 0), CONSTRAINT CK_UnitsInStock CHECK (UnitsInStock >= 0), CONSTRAINT CK_UnitsOnOrder CHECK (UnitsOnOrder >= 0) ) GO Revisin de constraint en una tabla: use northwind go sp_helpconstraint customers Obtener informacin de los Constraint a travs de las tablas del sistema: Select * from information_schema.table_constraints Select * from information_schema.check_constraints Select * from information_schema.referential_constraints go Creacin de Constraint: DROP TABLE INSTRUCTORES CREATE TABLE INSTRUCTORES (CODIGO INT IDENTITY(1,1) NOT NULL, NOMBRE VARCHAR(50), APELLIDO VARCHAR(50), TELEFONO VARCHAR(10) ) Llave Primaria: ALTER TABLE INSTRUCTORES ADD CONSTRAINT PK_INSTRUCTORES PRIMARY KEY CLUSTERED (CODIGO) Valor Predeterminado: ALTER TABLE INSTRUCTORES ADD CONSTRAINT DF_NOMBRE DEFAULT SIN NOMBRE FOR NOMBRE Agregar una Columna a la tabla para agregar luego un constraint:
ALTER TABLE INSTRUCTORES ADD NACIMIENTO SMALLDATETIME Restriccin Check para fecha de nacimiento: ALTER TABLE INSTRUCTORES ADD CONSTRAINT CH_CUMPLEAOS CHECK (NACIMIENTO>=1995-01- 01 ANDNACIMIENTO<=GETDATE())
[CONSTRAINT nombreRestriccin] [FOREIGN KEY] [(columna[,n])] REFERENCES tablaRef [(columnaRef [,n])]. [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] Borrar un Constraint ALTER TABLE INSTRUCTORES DROP CONSTRAINT CH_CUMPLEAOS Para que la llave fornea y la restriccin Check no comprueben los datos ya ingresados:
USE Northwind ALTER TABLE dbo.Employees WITH NOCHECK->NO COMPRUEBA LOS DATOS EXISTENTES ADD CONSTRAINT FK_Employees_Employees FOREIGN KEY (ReportsTo) REFERENCES dbo.Employees( USE Northwind ALTER TABLE dbo.Employees WITH NOCHECK ADD CONSTRAINT FK_Employees_Employees FOREIGN KEY (ReportsTo) REFERENCES dbo.Employees(EmployeeID)
Deshabilitar los constraint, para que los nuevos datos no se verifiquen por la restriccin
USE Northwind ALTER TABLE dbo.Employees NOCHECK CONSTRAINT FK_Employees_Employees USE Northwind ALTER TABLE dbo.Employees NOCHECK CONSTRAINT FK_Employees_Employees REGLAS. Un objeto de SQL Server son las reglas que son como constraint de tipo check, pero que pueden asociarse a mas de un campo.
CREAR UNA REGLA CREATE RULE AOS AS @NACIMIENTO>=1995-01-01 AND @NACIMIENTO<=GETDATE() VINCULAR LA REGLA
EXEC sp_bindruleAOS, INSTRUCTORES.NACIMIENTO DESVINCULAR LA REGLA EXEC sp_unbindrule INSTRUCTORES.NACIMIENTO BORRAR LA REGLA DROP RULE AOS VALOR DEFAULT CREATE DEFAULT NADA AS unknown VINCULAR EL DEFAULT sp_bindefault NADA, INSTRUCTORES.NOMBRE DESVINCULAR sp_unbindefault INSTRUCTORES.NOMBRE
SQL > Manipulacin de Tabla > Constraint(restriccin) Puede colocar restricciones para limitar el tipo de dato que puede ingresarse en una tabla. Dichas restricciones pueden especificarse cuando la tabla se crea por primera vez a travs de la instruccin CREATE TABLE, o luego de crear la tabla a travs de la instruccin ALTER TABLE. Los tipos comunes de restricciones incluyen las siguientes: - NOT NULL - UNIQUE - CHECK - Clave primaria - Clave externa Cada uno se describe en detalle a continuacin. NOT NULL En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor NULL en una columna, querr colocar una restriccin en esta columna especificando que NULL no es ahora un valor permitido. Por ejemplo, en la siguiente instruccin, CREATE TABLE Customer (SID integer NOT NULL, Last_Name varchar (30) NOT NULL, First_Name varchar(30)); Las columnas SID y Last_Name no incluyen NULL, mientras que First_Name puede incluir NULL. UNIQUE La restriccin UNIQUE asegura que todos los valores en una columna sean distintos. Por ejemplo, en la siguiente instruccin, CREATE TABLE Customer (SID integer Unique, Last_Name varchar (30), First_Name varchar(30)); La columna SID no puede incluir valores duplicados, mientras dicha restriccin no se aplica para columnas Last_Name y First_Name. Por favor note que una columna que se especifica como clave primaria tambin puede ser nica. Al mismo tiempo, una columna que es nica puede o no ser clave primaria. CHECK La restriccin CHECK asegura que todos los valores en una columna cumplan ciertas condiciones. Por ejemplo, en la siguiente instruccin, CREATE TABLE Customer (SID integer CHECK (SID > 0), Last_Name varchar (30), First_Name varchar(30)); La columna SID slo debe incluir enteros mayores a 0. Por favor note que la restriccin CHECK no sea ejecutada por MySQL en este momento. Clave primaria y Clave externa se comentan en las siguientes dos secciones. SQL > Manipulacin de Tabla > Clave primaria La clave primaria se utiliza para identificar en forma nica cada lnea en la tabla. Puede ser parte de un registro real, o puede ser un campo artificial (uno que no tiene nada que ver con el registro real). Una clave primaria puede consistir en uno o ms campos en una tabla. Cuando se utilizan mltiples campos como clave primaria, se los denomina claves compuestas. Las claves primarias pueden especificarse cuando se crea la tabla (utilizando CREATE TABLE) o cambiando la estructura existente de la tabla (utilizando ALTER TABLE). A continuacin se presentan ejemplos para la especificacin de una clave primaria cuando se crea una tabla: MySQL: CREATE TABLE Customer (SID integer, Last_Name varchar(30), First_Name varchar(30), PRIMARY KEY (SID)); Oracle: CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); SQL Server: CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30)); A continuacin se presentan ejemplos para la especificacin de una clave primaria al modificar una tabla: MySQL: ALTER TABLE Customer ADD PRIMARY KEY (SID); Oracle: ALTER TABLE Customer ADD PRIMARY KEY (SID); SQL Server: ALTER TABLE Customer ADD PRIMARY KEY (SID); Nota: Antes de utilizar el comando ALTER TABLE para agregar una clave primaria, necesitar asegurarse de que el campo est definido como 'NOT NULL' -- en otras palabras, NULL no puede aceptarse como valor para ese campo. SQL Clave externa >> SQL > Manipulacin de Tabla > Clave externa Una clave externa es un campo (o campos) que seala la clave primaria de otra tabla. El propsito de la clave externa es asegurar la integridad referencial de los datos. En otras palabras, slo se permiten los valores que se esperan que aparezcan en la base de datos. Por ejemplo, digamos que tenemos dos tablas, una tabla CUSTOMER que incluye todos los datos delCUSTOMER, y la tabla ORDERS que incluye los pedidos del CUSTOMER. La restriccin aqu es que todos los pedidos deben asociarse con un CUSTOMER que ya se encuentra en la tabla CUSTOMER. En este caso, colocaremos una clave externa en la tabla ORDERS y la relacionaremos con la clave primaria de la tablaCUSTOMER. De esta forma, nos aseguramos que todos los pedidos en la tabla ORDERS estn relacionadas con un CUSTOMER en la tabla CUSTOMER. En otras palabras, la tabla ORDERS no puede contener informacin de un CUSTOMER que no se encuentre en la tabla CUSTOMER. La estructura de estas dos tablas ser la siguiente: Tabla CUSTOMER Nombre de Columna Caracterstica SID Clave Primaria Last_Name First_Name Tabla ORDERS Nombre de Columna Caracterstica Order_ID Clave Primaria Order_Date Customer_SID Clave Externa Amount En el ejemplo anterior, la columna Customer_SID en la tabla ORDERS es una clave externa sealando la columna SID en la tabla CUSTOMER. A continuacin se muestran ejemplos de cmo especificar la clave externa a la hora de crear la tablaORDERS: MySQL: CREATE TABLE ORDERS (Order_ID integer, Order_Date date, Customer_SID integer, Amount double, PRIMARY KEY (Order_ID), FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID)); Oracle: CREATE TABLE ORDERS (Order_ID integer PRIMARY KEY, Order_Date date, Customer_SID integer REFERENCES CUSTOMER (SID), Amount double); SQL Server: CREATE TABLE ORDERS (Order_ID integer PRIMARY KEY, Order_Date datetime, Customer_SID integer REFERENCES CUSTOMER (SID), Amount double); A continuacin se presentan ejemplos para la especificacin de una clave externa al modificar una tabla: Esto asume que se ha creado la tabla ORDERS, y que la clave externa todava no se ha ingresado: MySQL: ALTER TABLE ORDERS ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID); Oracle: ALTER TABLE ORDERS ADD (CONSTRAINT fk_orders1) FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID); SQL Server: ALTER TABLE ORDERS ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID); SQL CREATE VIEW >> SQL > Manipulacin de Tabla > Create View Las vistas pueden considerarse como tablas virtuales. Generalmente hablando, una tabla tiene un conjunto de definiciones, y almacena datos fsicamente. Una vista tambin tiene un conjunto de definiciones, que se construye en la parte superior de la(s) tabla(s) u otra(s) vista(s), y no almacena datos fsicamente. La sintaxis para la creacin de una vista es la siguiente: CREATE VIEW "NOMBRE_VISTA" AS "Instruccin SQL"; La Instruccin SQL puede ser cualquiera de las instrucciones SQL que hemos descripto en esta gua de referencia. Utilicemos un ejemplo simple para ilustrar. Supongamos que tenemos la siguiente tabla: Tabla Customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Address char(50) City char(50) Country char(25) Birth_Date datetime y deseamos crear una vista denominada V_Customer que contiene slo las columnas First_Name, Last_Name y Pas de esta tabla, ingresaramos CREATE VIEW V_Customer AS SELECT First_Name, Last_Name, Country FROM Customer; Ahora tenemos una vista llamada V_Customer con la siguiente estructura: View V_Customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Country char(25) Podemos utilizar tambin una vista para aplicar uniones a dos tablas. En este caso, los usuarios slo ven una vista en vez de dos tablas, y la instruccin SQL que los usuarios necesitan emitir se vuelve mucho ms simple. Digamos que tenemos las siguientes dos tablas: Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Tabla Geography Region_Name Store_Name East Boston East New York West Los Angeles West San Diego y deseamos construir una vista que tenga ventas organizadas segn la regin. Colocaramos la siguiente instruccin SQL: CREATE VIEW V_REGION_SALES AS SELECT A1.Region_Name REGION, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.Store_Name = A2.Store_Name GROUP BY A1.Region_Name; Esto nos brinda una vista, V_REGION_SALES, que se ha definido para las ventas de los negocios segn los registros de la regin. Si deseamos saber el contenido de esta vista, ingresamos, SELECT * FROM V_REGION_SALES; Resultado: REGION SALES East 700 West 2050 SQL CREATE INDEX >> SQL > Manipulacin de Tabla > Create Index Los ndices nos ayudan a obtener datos de las tablas en forma ms rpida. Utilicemos un ejemplo para ilustrar este punto: Digamos que estamos interesados en leer en un libro de jardinera acerca de cmo cultivar pimientos. En vez de leer el libro desde el comienzo hasta que encontremos una seccin sobre pimientos, es mucho ms rpido para nosotros ir a la seccin ndice al final del libro, ubicar qu pginas contienen la informacin sobre pimientos, y luego dirigirnos a esas pginas directamente. Al dirigirnos al ndice primero ahorramos tiempo y seguramente es el mtodo ms eficiente para ubicar la informacin que necesitamos. El mismo principio se aplica para la obtencin de datos desde una tabla de base de datos. Sin un ndice, el sistema de base de datos lee a travs de toda la tabla (este proceso se denomina escaneo de tabla) para localizar la informacin deseada. Con el ndice correcto en su lugar, el sistema de base de datos puede entonces primero dirigirse al ndice para encontrar de dnde obtener los datos, y luego dirigirse a dichas ubicaciones para obtener los datos necesarios. Esto es mucho ms rpido. Por lo tanto, generalmente se recomienda crear ndices en tablas. Un ndice puede cubrir una o ms columnas. La sintaxis general para la creacin de un ndice es: CREATE INDEX "NOMBRE_NDICE" ON "NOMBRE_TABLA" (NOMBRE_COLUMNA); Digamos que tenemos la siguiente tabla: Tabla Customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Address char(50) City char(50) Country char(25) Birth_Date datetime Si deseamos crear un ndice tanto en Ciudad como en Pas, ingresaramos, CREATE INDEX IDX_CUSTOMER_LAST_NAME ON Customer (Last_Name); Pour crer un index dans City et Country, il faut saisir CREATE INDEX IDX_CUSTOMER_LOCATION ON Customer (City, Country); No hay una regla estricta respecto de cmo nombrar un ndice. El mtodo generalmente aceptado es colocar un prefijo, tal como IDX_, antes del nombre de un ndice para evitar la confusin con otros objetos de la base de datos. Tambin es una buena idea brindar informacin sobre qu tabla y columna(s) se utilizar el ndice. Por favor note que la sintaxis exacta para CREATE INDEX puede ser distinta segn las diferentes bases de datos. Debera consultar con su manual de referencia de base de datos para obtener la sintaxis precisa. SQL ALTER TABLE >> SQL > Manipulacin de Tabla > Alter Table Una vez que se crea la tabla en la base de datos, hay muchas ocasiones donde uno puede desear cambiar la estructura de la tabla. Los casos tpicos incluyen los siguientes: - Agregar una columna - Eliminar una columna - Cambiar el nombre de una columna - Cambiar el tipo de datos para una columna Por favor note que lo anterior no es una lista exhaustiva. Hay otras instancias donde ALTER TABLE se utiliza para cambiar la estructura de la tabla, tales como cambiar la especificacin de la clave primaria o agregar una restriccin nica para una columna. La sintaxis SQL para ALTER TABLE es ALTER TABLE "nombre_tabla" [modificar especificacin]; [modificar especificacin] depende del tipo de modificacin que deseamos realizar. Para los usos mencionados anteriormente, las instrucciones [modificar especificacin] son: Agregar una columna: ADD columna 1 tipos de datos para columna 1 Eliminar una columna: DROP columna 1 Cambiar el nombre de una columna: CHANGE nombre antiguo de la columna nuevo nombre de la columna tipos de datos para la nueva columna". Cambiar el tipo de datos para una columna: MODIFY columna 1 nuevo tipo de datos Recorramos ejemplos para cada uno de lo anteriormente mencionado, utilizando la tabla cliente creada en la seccin CREATE TABLE, il convient de se reporter aux exemples mentionns ci-dessus. Tabla Customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Address char(50) City char(50) Country char(25) Birth_Date datetime Primero, deseamos agregar una columna denominada Gender a esta tabla. Para hacerlo, ingresamos, ALTER TABLE Customer ADD Gender char(1); Estructura de la tabla resultante: Table Customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Address char(50) City char(50) Country char(25) Birth_Date datetime Gender char(1) Luego, deseamos renombrar Address" a Addr. Para hacerlo, ingresamos, ALTER TABLE Customer CHANGE Address Addr char(50); Estructura de la tabla resultante: Table customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Addr char(50) City char(50) Country char(25) Birth_Date datetime Gender char(1) Luego, lo que queremos es cambiar el tipo de datos para Addr a 30 caracteres. Para hacerlo, ingresamos, ALTER TABLE Customer MODIFY Addr char(30); Estructura de la tabla resultante: Table Customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Addr char(30) City char(50) Country char(25) Birth_Date datetime Gender char(1) Finalmente, deseamos eliminar la columna Gender. Para hacerlo, ingresamos, ALTER TABLE Customer DROP Gender; Estructura de la tabla resultante: Table Customer Nombre de Columna Tip de Datos First_Name char(50) Last_Name char(50) Addr char(30) City char(50) Country char(25) Birth_Date datetime SQL DROP TABLE >> SQL > Manipulacin de Tabla > Drop Table A veces podemos decidir que necesitamos eliminar una tabla en la base de datos por alguna razn. De hecho, sera problemtico si no podemos hacerlo ya que esto creara una pesadilla de mantenimiento para DBA. Afortunadamente, SQL nos permite hacerlo, ya que podemos utilizar el comando DROP TABLE. La sintaxis para DROP TABLE es DROP TABLE "nombre_tabla"; Entonces, si deseamos eliminar una tabla denominada cliente que creamos en la seccin CREATE TABLE, simplemente ingresamos DROP TABLE Customer; SQL TRUNCATE TABLE >> SQL > Manipulacin de Tabla > Truncate Table A veces deseamos eliminar los datos en una tabla. Una forma de hacer esto es con DROP TABLE, que vimos en la ltima seccin Pero Si deseamos simplemente deshacernos de los datos pero no de la tabla en s? Para esto, podemos utilizar el comando TRUNCATE TABLE. La sintaxis para TRUNCATE TABLE es TRUNCATE TABLE "nombre_tabla"; Entonces, si deseamos truncar una tabla denominada cliente que creamos en SQL CREATE TABLE, simplemente ingresamos TRUNCATE TABLE Customer; SQL INSERT INTO >> SQL > Manipulacin de Tabla > Insert Into En las secciones anteriores, hemos visto cmo obtener informacin de tablas. Pero Cmo se ingresan estas filas de datos en estas tablas en primer lugar? Esto es lo que se trata en esta seccin, que explica la instruccin INSERT, y en la siguiente seccin, que explica la instruccin UPDATE. En SQL, hay fundamental y bsicamente dos formas para INSRER datos en una tabla: Una es insertar una fila por vez, y la otra es insertar filas mltiples por vez. Primero observemos como podemos INSRER datos a travs de una fila por vez: La sintaxis para insertar datos en una tabla mediante una fila por vez es la siguiente: INSERT INTO "nombre_tabla" ("columna1", "columna2", ...) VALUES ("valor1", "valor2", ...); Suponiendo que tenemos una taba con la siguiente estructura, Tabla Store_Information Nombre de Columna Tip de Datos Store_Name char(50) Sales float Txn_Date datetime y ahora deseamos insertar una fila adicional en la tabla que represente los datos de ventas para Los ngeles el 10 de enero de 1999. En ese da, este negocio tena $900 dlares estadounidenses en ventas. Por lo tanto, utilizaremos la siguiente escritura SQL: INSERT INTO Store_Information (Store_Name, Sales, Txn_Date) VALUES ('Los Angeles', 900, '10-Jan-1999'); El segundo tipo de INSERT INTO nos permite insertar filas mltiples en una tabla. A diferencia del ejemplo anterior, donde insertamos una nica fila al especificar sus valores para todas las columnas, ahora utilizamos la instruccin SELECT para especificar los datos que deseamos insertar en la tabla. Si est pensando si esto significa que est utilizando informacin de otra tabla, est en lo correcto. La sintaxis es la siguiente: INSERT INTO "tabla1" ("columna1", "columna2", ...) SELECT "columna3", "columna4", ... FROM "tabla2"; Note que esta es la forma ms simple. La instruccin entera puede contener fcilmente clusulas WHERE,GROUP BY, y HAVING, as como tambin uniones y alias. Entonces por ejemplo, si deseamos tener una tabla Store_Information, que recolecte la informacin de ventas para el ao 1998, y ya conoce en donde reside la fuente de datos en tabala Sales_Information, ingresaremos: INSERT INTO Store_Information (Store_Name, Sales, Txn_Date) SELECT Store_Name, Sales, Txn_Date FROM Sales_Information WHERE Year (Txn_Date) = 1998; Aqu hemos utilizado la sintaxis de Servidor SQL para extraer la informacin anual por medio de una fecha. Otras bases de datos relacionales pueden tener sintaxis diferentes. Por ejemplo, en Oracle, utilizarTO_CHAR (Txn_Date, 'yyyy') = 1998. SQL UPDATE >> SQL > Manipulacin de Tabla > Update Una vez que hay datos en la tabla, podramos tener la necesidad de modificar los mismos. Para hacerlo, utilizamos el comando UPDATE. La sintaxis para esto es, UPDATE "nombre_tabla" SET "columna_1" = [nuevo valor] WHERE "condicin"; Por ejemplo, digamos que actualmente tenemos la tabla a continuacin: Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 y notamos que las ventas para Los Angeles el 08/01/1999 es realmente de 500 en vez de 300 dlares estadounidenses, y que esa entrada en particular necesita actualizarse. Para hacerlo, utilizamos el siguiente SQL: UPDATE Store_Information SET Sales = 500 WHERE Store_Name = 'Los Angeles' AND Txn_Date = '08-Jan-1999'; La tabla resultante ser vera Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 500 08-Jan-1999 Boston 700 08-Jan-1999 En este caso, hay slo una fila que satisface la condicin en la clusula WHERE. Si hay mltiples filas que satisfacen la condicin, todas ellas se modificarn. Tambin es posible UPDATE mltiples columnas al mismo tiempo. La sintaxis en este caso se vera como la siguiente: UPDATE "nombre_tabla" SET colonne 1 = [[valor1], colonne 2 = [valor2] WHERE "condicin"; SQL DELETE FROM >> SQL > Manipulacin de Tabla > Delete From A veces podemos desear deshacernos de los registros de una tabla. Para ello, utilizamos el comando DELETE FROM. La sintaxis para esto es, DELETE FROM "nombre_tabla" WHERE "condicin"; Es ms fcil utilizar un ejemplo. Por ejemplo, digamos que actualmente tenemos la siguiente tabla: Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 y decidimos no mantener ninguna informacin sobre Los ngeles en esta tabla. Para lograrlo, ingresamos el siguiente SQL: DELETE FROM Store_Information WHERE Store_Name = 'Los Angeles'; Ahora el contenido de la tabla se vera, Tabla Store_Information Store_Name Sales Txn_Date San Diego 250 07-Jan-1999 Boston 700 08-Jan-1999 SQL Avanzado >> SQL > SQL Avanzado En esta seccin, describiremos las siguientes palabras claves y conceptos SQL: SQL UNION SQL UNION ALL SQL INTERSECT SQL MINUS SQL Subconsulta SQL EXISTS SQL CASE SQL > SQL Avanzado > Union El propsito del comando SQL UNION es combinar los resultados de dos consultas juntas. En este sentido,UNION es parecido a Join, ya que los dos se utilizan para informacin relacionada en mltiples tablas. Una restriccin de UNION es que todas las columnas correspondientes necesitan ser del mismo tipo de datos. Tambin, cuando utilizamos UNION, slo se seleccionan valores distintos (similar a SELECT DISTINCT). La sintaxis es la siguiente: [Instruccin SQL 1] UNION [Instruccin SQL 2]; Supongamos que tenemos las siguientes dos tablas, Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Tabla Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos saber de todas las fechas donde hay una operacin de venta. Para hacerlo, utilizamos la siguiente instruccin SQL: SELECT Txn_Date FROM Store_Information UNION SELECT Txn_Date FROM Internet_Sales; Resultado: Txn_Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999 Por favor note que si ingresamos "SELECT DISTINCT Txn_Date" para cada o ambas instrucciones SQL, obtendremos el mismo conjunto de resultados. SQL UNION ALL >> SQL > SQL Avanzado > Union All El propsito del Comando SQL UNION ALL es tambin combinar los resultados de dos consultas juntas. La diferencia entre UNION ALL y UNION es que, mientras UNION slo selecciona valores distintos, UNION ALLselecciona todos los valores. La sintaxis para UNION ALL es la siguiente: [Instruccin SQL 1] UNION ALL [Instruccin SQL 2]; Utilicemos el mismo ejemplo de la seccin anterior para ilustrar la diferencia. Supongamos que tenemos las siguientes dos tablas, Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Tabla Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar las fechas en donde se realiz una operacin de venta en un negocio como as tambin las fechas donde hay una venta a travs de Internet. Para hacerlo, utilizamos la siguiente instruccin SQL: SELECT Txn_Date FROM Store_Information UNION ALL SELECT Txn_Date FROM Internet_Sales; Resultado: Txn_Date 05-Jan-1999 07-Jan-1999 08-Jan-1999 08-Jan-1999 07-Jan-1999 10-Jan-1999 11-Jan-1999 12-Jan-1999 SQL INTERSECT >> SQL > SQL Avanzado > Intersect Parecido al comando UNION, INTERSECT tambin opera en dos instrucciones SQL. La diferencia es que, mientras UNION acta fundamentalmente como un operador OR (O) (el valor se selecciona si aparece en la primera o la segunda instruccin), el comando INTERSECT acta como un operador AND (Y) (el valor se selecciona si aparece en ambas instrucciones). La sintaxis es la siguiente: [Instruccin SQL 1] INTERSECT [Instruccin SQL 2]; Digamos que tenemos las siguientes dos tablas: Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Tabla Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar todas las fechas donde hay ventas tanto en el negocio como en Internet. Para hacerlo, utilizamos la siguiente instruccin SQL: SELECT Txn_Date FROM Store_Information INTERSECT SELECT Txn_Date FROM Internet_Sales; Resultado: Txn_Date 07-Jan-1999 Por favor note que el comando INTERSECT slo arrojar valores distintivos. SQL MINUS >> SQL > SQL Avanzado > Minus MINUS opera en dos instrucciones SQL. Toma todos los resultados de la primera instruccin SQL, y luego sustrae aquellos que se encuentran presentes en la segunda instruccin SQL para obtener una respuesta final. Si la segunda instruccin SQL incluye resultados que no estn presentes en la primera instruccin SQL, dichos resultados se ignoran. La sintaxis es la siguiente: [Instruccin SQL 1] MINUS [Instruccin SQL 2]; Continuemos con el mismo ejemplo: Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Tabla Internet_Sales Txn_Date Sales 07-Jan-1999 250 10-Jan-1999 535 11-Jan-1999 320 12-Jan-1999 750 y deseamos encontrar todas las fechas donde hay ventas en el negocio, pero no aquellas realizadas por Internet. Para hacerlo, utilizamos la siguiente instruccin SQL: SELECT Txn_Date FROM Store_Information MINUS SELECT Txn_Date FROM Internet_Sales; Resultado: Txn_Date 05-Jan-1999 08-Jan-1999 '05-Jan-1999', '07-Jan-1999',et '08-Jan-1999' son los valores distintivos arrojados desde SELECT Txn_Date FROM Store_Information. Tambin se arroja '07-Jan-1999' de la segunda instruccin SQL, SELECT Txn_Date FROM Internet_Sales, de este modo se lo excluye del conjunto final de resultados. Por favor note que el comando MINUS slo arrojar valores distintos. Algunas bases de datos pueden utilizar EXCEPT en vez de MINUS. Por favor verifique la documentacin para su base de datos especfica para el uso apropiado. SQL Subconsulta >> SQL > SQL Avanzado > Subconsulta Es posible incorporar una instruccin SQL dentro de otra. Cuando esto se hace en las instrucciones WHERE oHAVING, tenemos una construccin de subconsulta. La sintaxis es la siguiente: SELECT "nombre1_columna" FROM "nombre1_tabla" WHERE "nombre2_columna" [Operador de Comparacin] (SELECT "nombre3_columna" FROM "nombre2_tabla" WHERE "Condicin"); [Operador de Comparacin] podran ser operadores de igualdad tales como =, >, <, >=, <=. Tambin puede ser un operador textual como "LIKE". La parte en rojo se considera como la "consulta interna", mientras que la parte en verde se considera como la "consulta externa". Utilisons le mme exemple que celui que nous avons utilis pour illustrer les jointures SQL : Table Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Table Geography Region_Name Store_Name East Boston East New York West Los Angeles West San Diego et en utilisant une sous-requte pour trouver les ventes de tous les magasins dans la rgion West (Ouest), il faudra utiliser linstruction SQL suivante : SELECT SUM(Sales) FROM Store_Information WHERE Store_Name IN (SELECT Store_Name FROM Geography WHERE Region_Name = 'West'); Resultado: SUM(Sales) 2050 Dans cet exemple, au lieu de joindre directement les deux tables et dajouter seulement le montant des ventes des magasins de la rgion West (Ouest), nous allons dabord utiliser la sous-requte pour trouver les magasins situs dans la rgion West (Ouest), puis additionner le montant des ventes de ces magasins. Dans lexemple ci-dessus, la requte interne est dabord excute, puis le rsultat est envoy la requte externe. Ce type de sous-requte est appel sous-requte simple. Si la requte interne dpend de la requte externe, nous aurons une sous-requte corrle. Vous trouverez ci- dessous un exemple de de sous-requte corrle : SELECT SUM(a1.Sales) FROM Store_Information a1 WHERE a1.Store_Name IN (SELECT Store_Name FROM Geography a2 WHERE a2.Store_Name = a1.Store_Name); Notez la clause WHERE dans la requte interne, o la condition ncessite une table de la requte externe. SQL EXISTS >> SQL > SQL Avanzado > Exists En la seccin anterior, utilizamos IN para enlazar la consulta interna y la consulta externa en una instruccin de subconsulta. IN no es la nica forma de hacerlo uno puede utilizar muchos operadores tales como >, <, o =. EXISTS es un operador especial que describiremos en esta seccin. EXISTS simplemente verifica si la consulta interna arroja alguna fila. Si lo hace, entonces la consulta externa procede. De no hacerlo, la consulta externa no se ejecuta, y la totalidad de la instruccin SQL no arroja nada. La sintaxis para EXISTS es SELECT "nombre1_columna" FROM "nombre1_tabla" WHERE EXISTS (SELECT * FROM "nombre2_tabla" WHERE "Condicin"); Por favor note que en vez de *, puede seleccionar una o ms columnas en la consulta interna. El efecto ser idntico. Utilizamos las mismas tablas de ejemplos: Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 Table Geography Region_Name Store_Name East Boston East New York West Los Angeles West San Diego colocaramos la siguiente consulta SQL: SELECT SUM(Sales) FROM Store_Information WHERE EXISTS (SELECT * FROM Geography WHERE region_name = 'West'); Obtendremos el siguiente resultado: SUM(Sales) 2750 Al principio, esto puede parecer confuso, debido a que la subsequencia incluye la condicin [Region_Name = 'West'], an as la consulta sum los negocios para todas las regiones. Si observamos de cerca, encontramos que debido a que la subconsulta arroja ms de 0 filas, la condicin EXISTS es verdadera, y la condicin colocada dentro de la consulta interna no influencia la forma en que se ejecuta la consulta externa. SQL CASE >> SQL > SQL Avanzado > Case CASE se utiliza para brindar un tipo de lgica "si-entonces-otro" para SQL. Su sintaxis es: SELECT CASE ("nombre_columna") WHEN "condicin1" THEN "resultado1" WHEN "condicin2" THEN "resultado2" ... [ELSE "resultadoN"] END FROM "nombre_tabla"; "condicin" puede ser un valor esttico o una expresin. La clusula ELSE es opcional. En nuestra Tabla Store_Information de ejemplo, Tabla Store_Information Store_Name Sales Txn_Date Los Angeles 1500 05-Jan-1999 San Diego 250 07-Jan-1999 Los Angeles 300 08-Jan-1999 Boston 700 08-Jan-1999 si deseamos multiplicar las sumas de ventas de 'Los Angeles' por 2 y las sumas de ventas de 'San Diego' por 1,5, ingresamos, SELECT Store_Name, CASE Store_Name WHEN 'Los Angeles' THEN Sales * 2 WHEN 'San Diego' THEN Sales * 1.5 ELSE Sales END "Nuevas Ventas", Txn_Date FROM Store_Information; "Nuevas Ventas" es el nombre que se le otorga a la columna con la instruccin CASE. Resultado: Store_name Nuevas Ventas Txn_Date Los Angeles 3000 05-Jan-1999 San Diego 375 07-Jan-1999 San Francisco 300 08-Jan-1999 Boston 700 08-Jan-1999
SQL Sintaxis >> SQL > SQL Sintaxis En esta pgina, enumeramos la sintaxis SQL para cada uno de los comandos SQL en esta gua de referencia. Para obtener explicaciones detalladas para cada sintaxis SQL, por favor dirjase a la seccin individual haciendo clic en la palabra clave. El propsito de esta pgina es brindar una pgina de referencia rpida para la sintaxis SQL. Le sugerimos que agregue esta pgina a favoritos ahora presionando Control-D para que pueda tener esta pgina de sintaxis a mano. Select SELECT "nom de colonne" FROM "nombre_tabla"; Distinct SELECT DISTINCT "nombre_columna" FROM "nombre_tabla"; Where SELECT "nombre_columna" FROM "nombre_tabla" WHERE "condition"; And/Or SELECT "nombre_columna" FROM "nombre_tabla" WHERE "condicin simple" {[AND|OR] "condicin simple"}+; In SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" IN ('valor1', 'valor2', ...); Between SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" BETWEEN 'valor1' AND 'valor2'; Like SELECT "nombre_columna" FROM "nombre_tabla" WHERE "nombre_columna" LIKE {patrn}; Order By SELECT "nombre_columna" FROM "nombre_tabla" [WHERE "condicin"] ORDER BY "nombre_columna" [ASC, DESC]; Count SELECT COUNT("nombre_columna") FROM "nombre_tabla"; Group By SELECT "nombre_columna 1", SUM("nombre_columna 2") FROM "nombre_tabla" GROUP BY "nombre_columna 1"; Having SELECT "nombre_columna 1", SUM("nombre_columna 2") FROM "nombre_tabla" GROUP BY "nombre_columna 1" HAVING (condicin de funcin aritmtica); Create Table CREATE TABLE "nombre_tabla" ("columna 1" "tipo_de_datos_para_columna_1", "columna 2" "tipo_de_datos_para_columna_2", ... ); Drop Table DROP TABLE "nombre_tabla"; Truncate Table TRUNCATE TABLE "nombre_tabla"; Insert Into INSERT INTO "nombre_tabla" ("colonne 1", "colonne 2", ...) VALUES ("valor 1", "valor 2", ...); Update UPDATE "nombre_tabla" SET "colonne 1" = [nuevo valor] WHERE "condicin"; Delete From DELETE FROM "nombre_tabla" WHERE "condicin";
Crear una Base de Datos y Esquemas en SQL 2008 use master go ---------Crear una base de datos
Create database Ejemplo on primary (name='EjemData',filename='c:\data\ejemdata1.md f', size=10MB, MaxSize=500Mb, filegrowth=25% ) log on (name='EjemLog',filename='c:\data\ejemLog.ldf', size=5MB, MaxSize=500Mb, filegrowth=25% ) go ---------Borrar una base de datos drop database ejemplo
---------Crear un grupo adicional a parte del PRIMARY predeterminado
alter database Ejemplo add filegroup Secundario
---------agregar un archivo al grupo adicional creado alter database ejemplo add file (name='EjemSec',filename='c:\data\ejemSec1.ndf' , size=10MB, MaxSize=500Mb, filegrowth=25% )to filegroup Secundario
---------opciones de la base de datos
Alter database Ejemplo set AUTO_CREATE_STATISTICS on
---------Cree un login--------------- use master go create login UserInformatica with password ='P@ ssw0rd'
---------cree un user para el login------------ --- use ejemplo create user UserInformatica for login UserInformatica with default_schema = Informatica go ---------Esquemas ---------Cree el esquema asociado al user------ -- create schema Informatica authorizationUserInfo rmatica Go ---------Dar permisos de creacion de tabla al usuario--------------------- grant create table to UserInformatica go ---------Cambiar de usuario-------------------- -------- ---------Ejecutar acciones en nombre de UserInformatica ---------sin salirme del usuario actual-------- -------- execute as user = 'UserInformatica' go
create table Empleado ( codigo int, nombre varchar(100) ) go --------Regresar al usuario actual revert go
Crear un inicio de sesin SQL Server 2014 Otras versiones
Personas que lo han encontrado til: 2 de 4 - Valorar este tema En este tema se describe cmo crear un inicio de sesin en SQL Server 2014 mediante SQL Server Management Studio o Transact-SQL. Un inicio de sesin es la identidad de la persona o proceso que se est conectando a una instancia de SQL Server. En este tema Antes de empezar: Informacin previa Seguridad Para crear un inicio de sesin, utilizando: SQL Server Management Studio Transact-SQL Seguimiento: pasos que se deben realizar despus de crear un inicio de sesin Informacin previa Un inicio de sesin es una entidad de seguridad o una entidad que puede ser autenticada por un sistema seguro. Los usuarios necesitan iniciar sesin para conectarse a SQL Server. Puede crear un inicio de sesin basado en una entidad de seguridad de Windows (como un usuario de dominio o un grupo de dominio de Windows) o puede crear un inicio de sesin que no lo est (como un inicio de sesin de SQL Server). Nota Para usar la autenticacin de SQL Server, el Motor de base de datos debe utilizar la autenticacin de modo mixto. Para obtener ms informacin, vea Elegir un modo de autenticacin. Como entidad de seguridad, se pueden conceder permisos a los inicios de sesin. El mbito de un inicio de sesin es todo el Motor de base de datos. Para establecer conexin con una base de datos concreta de la instancia de SQL Server, un inicio de sesin debe estar asignado a un usuario de la base de datos. Los permisos dentro de la base de datos se conceden y deniegan al usuario de la base de datos, no al inicio de sesin. Los permisos que tienen como mbito la instancia completa de SQL Server (por ejemplo, el permiso CREATE ENDPOINT) se pueden conceder a un inicio de sesin. Seguridad Permisos Requiere el permiso ALTER ANY LOGIN o ALTER LOGIN del servidor. [Principio] Usar SQL Server Management Studio Para crear un inicio de sesin de SQL Server 1. En el Explorador de objetos, expanda la carpeta de la instancia de servidor en la que desea crear el nuevo inicio de sesin. 2. Haga clic con el botn secundario en la carpeta Seguridad, seleccione Nuevo y, a continuacin, seleccione Inicio de sesin. 3. En el cuadro de dilogo Inicio de sesin - Nuevo, en la pgina General, escriba el nombre de un usuario en el cuadro Nombre de inicio de sesin. Como alternativa, haga clic en (Buscar) para abrir el cuadro de dilogo Seleccionar usuarios o grupos. Si hace clic en Buscar: a. En Seleccionar este tipo de objeto, haga clic en Tipos de objeto para abrir el cuadro de dilogo Tipos de objeto y seleccione alguna o todas las opciones siguientes: Entidades de seguridad integradas, Grupos y Usuarios. Las opcionesEntidades de seguridad integradas y Usuarios estn seleccionadas de forma predeterminada. Cuando termine, haga clic enAceptar. b. En Desde esta ubicacin, haga clic en Ubicaciones para abrir el cuadro de dilogo Ubicaciones y seleccione una de las ubicaciones de servidor disponibles. Cuando termine, haga clic en Aceptar. c. En Escribir los nombres de objeto para seleccionar (ejemplos), escriba el usuario o el nombre de grupo que desea buscar.Para obtener ms informacin, vea Seleccionar usuarios, equipos o grupos (cuadro de dilogo). d. Haga clic en Avanzadas para obtener ms opciones avanzadas de bsqueda. Para obtener ms informacin, vea Seleccionar usuarios, equipos o grupos (cuadro de dilogo) - Pgina Avanzadas. e. Haga clic en Aceptar. 4. Para crear un inicio de sesin basado en una entidad de seguridad de Windows, seleccione Autenticacin de Windows. Esta es la seleccin predeterminada. 5. Para crear un inicio de sesin que se guarde en una base de datos de SQL Server, seleccione Autenticacin de SQL Server. a. En el cuadro Contrasea, escriba una contrasea para el nuevo usuario. Vuelva a escribir la contrasea en el cuadroConfirmar contrasea. b. Al cambiar una contrasea existente, seleccione Especificar contrasea anterior y escriba la contrasea anterior en el cuadro Contrasea anterior. c. Para aplicar las opciones de la directiva de contraseas a efectos de complejidad y exigencia, seleccione Exigir directivas de contraseas. Para obtener ms informacin, vea Directiva de contraseas. Esta es una opcin predeterminada cuando se selecciona Autenticacin de SQL Server. d. Para aplicar las opciones de la directiva de contraseas a efectos de expiracin, seleccione Exigir expiracin de contrasea.Debe seleccionar la opcin Exigir directivas de contraseas para habilitar esta casilla. Esta es una opcin predeterminada cuando se selecciona Autenticacin de SQL Server. e. Para obligar al usuario a crear una nueva contrasea despus de utilizarse el inicio de sesin por primera vez, seleccione El usuario debe cambiar la contrasea en el siguiente inicio de sesin. Debe seleccionar la opcin Exigir expiracin de contrasea para habilitar esta casilla. Esta es una opcin predeterminada cuando se selecciona Autenticacin de SQL Server. 6. Para asociar el inicio de sesin a un certificado de seguridad independiente, seleccione Asignado a certificado y seleccione el nombre de un certificado existente de la lista. 7. Para asociar el inicio de sesin a una clave asimtrica independiente, seleccione Asignado a clave asimtrica y seleccione el nombre de una clave existente de la lista. 8. Para asociar el inicio de sesin a una credencial de seguridad, active la casilla de Asignado a credencial y seleccione una credencial existente de la lista o haga clic en Agregar para crear una nueva credencial. Para quitar una asignacin a una credencial de seguridad del inicio de sesin, seleccione la credencial en Credenciales asignadas y haga clic en Quitar. Para obtener ms informacin sobre las credenciales en general, vea Credenciales (motor de base de datos). 9. En la lista Base de datos predeterminada, seleccione una base de datos predeterminada para el inicio de sesin. Maestra es el valor predeterminado para esta opcin. 10. En la lista Idioma predeterminado, seleccione un idioma predeterminado para el inicio de sesin. 11. Haga clic en Aceptar. Opciones adicionales El cuadro de dilogo Inicio de sesin - Nuevo tambin proporciona opciones de cuatro pginas adicionales: Roles del servidor,Asignacin de usuarios, Elementos protegibles y Estado. Roles de servidor La pgina Roles de servidor enumera todos los roles posibles que se pueden asignar al nuevo inicio de sesin. Las siguientes opciones estn disponibles: Casilla bulkadmin Solo los miembros del rol fijo de servidor bulkadmin pueden ejecutar la instruccin BULK INSERT. Casilla dbcreator Los miembros del rol fijo de servidor dbcreator pueden crear, modificar, quitar y restaurar cualquier base de datos. Casilla diskadmin Los miembros del rol fijo de servidor diskadmin pueden administrar archivos de disco. Casilla processadmin Los miembros del rol fijo de servidor processadmin pueden finalizar procesos mediante la ejecucin de una instancia del Motor de base de datos. Casilla public Todos los usuarios, grupos y roles de SQL Server pertenecen al rol fijo de servidor public de forma predeterminada. Casilla securityadmin Los miembros del rol fijo de servidor securityadmin administran los inicios de sesin y sus propiedades. Administran los permisos de servidor GRANT, DENY y REVOKE. Tambin administran los permisos de base de datos GRANT, DENY y REVOKE. Asimismo, pueden restablecer contraseas para inicios de sesin de SQL Server. Casilla serveradmin Los miembros del rol fijo de servidor serveradmin pueden cambiar opciones de configuracin en el servidor y cerrar el servidor. Casilla setupadmin Los miembros del rol fijo de servidor setupadmin pueden agregar y quitar servidores vinculados, y ejecutar algunos procedimientos almacenados del sistema. Casilla sysadmin Los miembros del rol fijo de servidor sysadmin pueden realizar cualquier actividad en el Motor de base de datos. Asignacin de usuarios La pgina Asignacin de usuarios enumera todas las bases de datos posibles y las pertenencias al rol de base de datos en esas bases de datos que se pueden aplicar al inicio de sesin. Las bases de datos seleccionadas determinan las pertenencias a roles disponibles para el inicio de sesin. En esta pgina estn disponibles las opciones siguientes: Usuarios asignados a este inicio de sesin Selecciona las bases de datos a las que se puede obtener acceso con este inicio de sesin. Cuando se seleccione una base de datos, sus roles vlidos se mostrarn en el panel Miembros del rol de base de datos para: database_name. Mapa Permite que el inicio de sesin obtenga acceso a las bases de datos que se muestran a continuacin. Base de datos Muestra las bases de datos disponibles en el servidor. Usuario Especifica el usuario de base de datos que se va a asignar al inicio de sesin. De forma predeterminada, el nombre del usuario de base de datos coincide con el inicio de sesin. Esquema predeterminado Especifica el esquema predeterminado del usuario. Cuando se crea un usuario por primera vez, el esquema predeterminado es dbo.Es posible especificar un esquema predeterminado que an no existe. No puede especificar un esquema predeterminado para un usuario asignado a un grupo, un certificado o una clave asimtrica de Windows. Cuenta de invitado habilitada para: database_name Atributo de solo lectura que indica si la cuenta de invitado est habilitada en la base de datos seleccionada. Utilice la pgina Estadodel cuadro de dilogo Propiedades de inicio de sesin de la cuenta de invitado para habilitarla o deshabilitarla. Miembros del rol de base de datos para: database_name Selecciona los roles para el usuario en la base de datos especificada. Todos los usuarios son miembros del rol public de todas las bases de datos, y no pueden eliminarse. Para obtener ms informacin acerca de los roles de base de datos, vea Roles de nivel de base de datos. Elementos protegibles La pgina Elementos protegibles muestra todos los elementos protegibles posibles y los permisos en esos elementos protegibles que se pueden conceder al inicio de sesin. En esta pgina estn disponibles las opciones siguientes: Cuadrcula superior Contiene uno o ms elementos para los que se pueden establecer permisos. Las columnas mostradas en la cuadrcula superior varan dependiendo de la entidad de seguridad o el elemento protegible. Para agregar elementos a la cuadrcula superior: 1. Haga clic en Buscar. 2. En el cuadro de dilogo Agregar objetos, seleccione una de las opciones siguientes: Objetos especficos, Todos los objetos de los tipos o Servidorserver_name. Haga clic en Aceptar. Nota Cuando se selecciona Servidorserver_name, se rellena automticamente la cuadrcula superior con todos los objetos protegibles de ese servidor. 3. Si selecciona Objetos especficos: a. En el cuadro de dilogo Seleccionar objetos, en Seleccionar estos tipos de objeto, haga clic en Tipos de objeto. b. En el cuadro de dilogo Seleccionar tipos de objeto, seleccione alguno o todos los tipos de objeto siguientes:Extremos, Inicios de sesin, Servidores, Grupos de disponibilidad y Roles del servidor. Haga clic en Aceptar. c. En Escribir los nombres de objeto para seleccionar (ejemplos), haga clic en Examinar. d. En el cuadro de dilogo Buscar objetos, seleccione cualquiera de los objetos disponibles del tipo que seleccion en el cuadro de dilogo Seleccionar tipos de objeto y haga clic en Aceptar. e. En el cuadro de dilogo Seleccionar objetos, haga clic en Aceptar. 4. Si selecciona Todos los objetos de los tipos en el cuadro de dilogo Seleccionar tipos de objeto, seleccione alguno o todos los tipos de objeto siguientes: Extremos, Inicios de sesin, Servidores, Grupos de disponibilidad y Roles del servidor. Haga clic en Aceptar. Nombre El nombre de cada entidad de seguridad o elemento protegible que se agrega a la cuadrcula. Tipo Describe el tipo de cada elemento. Pestaa Explcito Enumere los posibles permisos del elemento protegible seleccionados en la cuadrcula superior. No todas las opciones estn disponibles para todos los permisos explcitos. Permisos Nombre del permiso. Otorgante de permisos La entidad de seguridad que concedi el permiso. Conceder Active esta casilla para conceder el permiso al inicio de sesin. Desactvela para revocar el permiso. WITH GRANT Refleja el estado de la opcin WITH GRANT para el permiso indicado. Este cuadro es de solo lectura. Para aplicar este permiso, use la instruccin GRANT. Denegar Active esta casilla para denegar el permiso al inicio de sesin. Desactvela para revocar el permiso. Estado La pgina Estado enumera algunas de las opciones de autenticacin y autorizacin que se pueden configurar en el inicio de sesin de SQL Server seleccionado. En esta pgina estn disponibles las opciones siguientes: Permiso para conectarse al motor de la base de datos Cuando trabaje con esta configuracin, debe pensar en el inicio de sesin seleccionado como una entidad de seguridad a la que se le puede otorgar o denegar un permiso para un elemento protegible. Seleccione Conceder para conceder el permiso CONNECT SQL al inicio de sesin. Seleccione Denegar para denegar el permiso CONNECT SQL al inicio de sesin. Inicio de sesin Cuando trabaje con esta configuracin, debe pensar en el inicio de sesin seleccionado como un registro de una tabla. Los cambios que se realicen en los valores que se muestran aqu se aplicarn al registro. Un inicio de sesin que se ha deshabilitado sigue existiendo en el registro. Pero si intenta conectarse a SQL Server, el inicio de sesin no se autenticar. Seleccione esta opcin para habilitar o deshabilitar este inicio de sesin. Esta opcin utiliza la instruccin ALTER LOGIN con las opciones ENABLE o DISABLE. Autenticacin de SQL Server La casilla Inicio de sesin bloqueado solo est disponible si el inicio de sesin seleccionado se conecta usando la autenticacin de SQL Server y el inicio de sesin est bloqueado. Este valor es de solo lectura. Para desbloquear un inicio de sesin que est bloqueado, ejecute ALTER LOGIN con la opcin UNLOCK. [Principio] Usar Transact-SQL Para crear un inicio de sesin utilizando la autenticacin de Windows 1. En el Explorador de objetos, conctese a una instancia del Motor de base de datos. 2. En la barra Estndar, haga clic en Nueva consulta. 3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar. 4. -- Create a login for SQL Server by specifying a server name and a Windows domain account name. 5. 6. CREATE LOGIN [<domainName>\<loginName>] FROM WINDOWS; 7. GO Para crear un inicio de sesin utilizando la autenticacin de SQL Server 1. En el Explorador de objetos, conctese a una instancia del Motor de base de datos. 2. En la barra Estndar, haga clic en Nueva consulta. 3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar. 4. -- Creates the user "shcooper" for SQL Server using the security credential "RestrictedFaculty" 5. -- The user login starts with the password "Baz1nga," but that password must be changed after the first login. 6. 7. CREATE LOGIN shcooper 8. WITH PASSWORD = 'Baz1nga' MUST_CHANGE, 9. CREDENTIAL = RestrictedFaculty; 10. GO Funciones en el nivel de base de datos SQL Server 2005 Otras versiones
Personas que lo han encontrado til: 3 de 6 - Valorar este tema Las funciones fijas de base de datos se definen en el nivel de base de datos y existen en cada una de ellas. Los miembros de las funciones de base de datos db_owner y db_securityadmin pueden administrar a los miembros de una funcin fija de base de datos; sin embargo, slo los miembros de una funcin de base de datos db_owner pueden agregar miembros a la funcin fija de base de datos db_owner. Las funciones fijas de base de datos son las siguientes: db_accessadmin db_backupoperator db_datareader db_datawriter db_ddladmin db_denydatareader db_denydatawriter db_owner db_securityadmin
db_accessadmin SQL Server 2005 Personas que lo han encontrado til: 2 de 2 - Valorar este tema Los miembros de la funcin fija de base de datos db_accessadmin pueden agregar o quitar accesos a inicios de sesin de Windows, grupos de Windows e inicios de sesin de SQL Server.
db_backupoperator SQL Server 2005 Este tema an no ha recibido ninguna valoracin - Valorar este tema Los miembros de la funcin fija de base de datos db_backupoperator pueden crear copias de seguridad de la base de datos.
db_datareader(LECTURA) SQL Server 2005 Personas que lo han encontrado til: 2 de 4 - Valorar este tema Actualizado: 12 de diciembre de 2006 Los miembros de la funcin fija de base de datos db_datareader(LECTURA) pueden ejecutar la instruccin SELECT en cualquier tabla o vista de la base de datos.
db_datawriter (ESCRITURA) SQL Server 2005 Este tema an no ha recibido ninguna valoracin - Valorar este tema Los miembros de la funcin fija de base de datos db_datawriter(ESCRITURAs) pueden agregar, eliminar o cambiar datos en todas las tablas de usuario.
db_ddladmin SQL Server 2005 Este tema an no ha recibido ninguna valoracin - Valorar este tema Los miembros de la funcin fija de base de datos db_ddladmin pueden ejecutar cualquier comando del lenguaje de definicin de datos (DDL) en una base de datos.
db_denydatareader SQL Server 2005 Este tema an no ha recibido ninguna valoracin - Valorar este tema Los miembros de la funcin fija de base de datos db_denydatareader no pueden leer datos de las tablas de usuario dentro de una base de datos.
db_denydatawriter SQL Server 2005 Este tema an no ha recibido ninguna valoracin - Valorar este tema Los miembros de la funcin fija de base de datos db_denydatawriter no pueden agregar, modificar ni eliminar datos de tablas de usuario de una base de datos.
db_owner( ) todos los permisos SQL Server 2005 Personas que lo han encontrado til: 3 de 5 - Valorar este tema Los miembros de la funcin fija de base de datos db_owner(todos los permisos)pueden realizar todas las actividades de configuracin y mantenimiento de la base de datos.
db_securityadmin SQL Server 2005 Este tema an no ha recibido ninguna valoracin - Valorar este tema Los miembros de la funcin fija de base de datos db_securityadmin pueden modificar la pertenencia a funciones y administrar permisos.