INSTITUTO TECNOLÓGICO SUPERIOR DE ESCÁRCEGA Organismo público descentralizado de la administración Pública del estado de Campeche DEFINICIÓN Y SINTAXIS DE SENTENCIA CREATE QUE PRESENTA Liliana Esperanza Molina García. ALUMNO DEL QUINTO SEMESTRE DE LA CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES TALLER DE BASE DE DATOS PROFESOR Francisco Salvador Ballina Sánchez. ESCÁRCEGA, CAMPECHE, MÉXICO, 2010 CREATE TABLE La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para rellenarla con datos, nos permite definir las columnas que tiene y ciertas restricciones que deben cumplir esas columnas. La sintaxis es la siguiente: nbtabla: nombre de la tabla que estamos definiendo nbcol: nombre de la columna que estamos definiendo tipo: tipo de dato de la columna, todos los datos almacenados en la columna deberán ser de ese tipo. Ejemplo: CREATE TABLE tab1 (col1 INTEGER, col2 CHAR (25) NOT NULL, col3 CHAR (10), col4 INTEGER, col5 INT, CONSTRAINT pk PRIMARY KEY (col1), CONSTRAINT uni1 UNIQUE (col3), CONSTRAINT fk5 FOREIGN KEY (col5) REFERENCES tab2); CREATE INDEX La sentencia CREATE INDEX sirve para crear un índice sobre una o varias columnas de una tabla. La sintaxis es la siguiente: nbindi: nombre del índice que estamos definiendo. En una tabla no pueden haber dos índices con el mismo nombre de lo contrario da error. nbtabla: nombre de la tabla donde definimos el índice. A continuación entre paréntesis se indica la composición del índice (las columnas que lo forman). nbcol: nombre de la columna que indexamos. Después del nombre de la columna podemos indicar cómo queremos que se ordenen las filas según el índice mediante las cláusulas ASC/DESC. ASC: la cláusula ASC es la que se asume por defecto e indica que el orden elegido para el índice es ascendente (en orden alfabético si la columna es de tipo texto, de menor a mayor si es de tipo numérico, en orden cronológico si es de tipo fecha). DESC: indica orden descendente, es decir el orden inverso al ascendente. Ejemplo: CREATE UNIQUE INDEX ind1 ON clientes (provincia, poblacion ASC, fecha_nacimiento DESC) Crea un índice llamado ind1 sobre la tabla clientes formado por las columnas provincia, población y fecha_nacimiento. Este índice permite tener ordenadas las filas de la tabla clientes de forma que aparezcan los clientes ordenados por provincia, dentro de la misma provincia por población y dentro de la misma población por edad y del más joven al más mayor. CREATE USER Sintaxis de CREATE USER CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ... El comando CREATE USER se añadió en MySQL 5.0.2. Este comando crea nuevas cuentas MySQL. Para usarlas, debe tener el permiso global CREATE USER o el permiso INSERT para la base de datos mysql . Para cada cuenta, CREATE USER crea un nuevo registro en la tabla mysql.user que no tiene permisos. Un error ocurre si la cuenta ya existe. La cuenta puede tener una contraseña con la cláusula opcional IDENTIFIED BY. El valor user y la contraseña se dan del mismo modo que para el comando GRANT. En particular, para especificar la contraseña en texto plano, omita la palabra clave PASSWORD. Para especificar la contraseña como el valor hasheado retornado por la función PASSWORD() , incluya la palabra clave PASSWORD. Ejemplo: Crear un usuario de base de datos En el siguiente ejemplo, primero se crea un inicio de sesión de servidor denominado AbolrousHazem con una contraseña y, a continuación, se crea el usuario de base de datos AbolrousHazem correspondiente en AdventureWorks. CREATE LOGIN AbolrousHazem WITH PASSWORD = '340$Uuxwp7Mcxo7Khy'; USE AdventureWorks; CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem; GO CREATE TRIGGER Sintaxis de CREATE TRIGGER CREATE TRIGGER nombre_disp momento_disp evento_disp ON nombre_tabla FOR EACH ROW sentencia_disp Un disparador es un objeto con nombre en una base de datos que se asocia con una tabla, y se activa cuando ocurre un evento en particular para esa tabla. El disparador queda asociado a la tabla nombre_tabla. Esta debe ser una tabla permanente, no puede ser una tabla TEMPORARY ni una vista. momento_disp es el momento en que el disparador entra en acción. Puede ser BEFORE (antes) o AFTER (despues), para indicar que el disparador se ejecute antes o después que la sentencia que lo activa. evento_disp indica la clase de sentencia que activa al disparador. Puede ser INSERT, UPDATE, o DELETE. Por ejemplo, un disparador BEFORE para sentencias INSERT podría utilizarse para validar los valores a insertar. No puede haber dos disparadores en una misma tabla que correspondan al mismo momento y sentencia. Por ejemplo, no se pueden tener dos disparadores BEFORE UPDATE. Pero sí es posible tener los disparadores BEFORE UPDATE y BEFORE INSERT o BEFORE UPDATE y AFTER UPDATE. sentencia_disp es la sentencia que se ejecuta cuando se activa el disparador. Si se desean ejecutar múltiples sentencias, deben colocarse entre BEGIN ... END, el constructor de sentencias compuestas. Esto además posibilita emplear las mismas sentencias permitidas en rutinas almacenadas. Ejemplo: A. Este ejemplo imprime un mensaje cada vez que el usuario añade o modifica datos en la tabla "Tittles" create trigger reminder on tittles for insert, update as print "No olvides imprimir el informe de contabilidad" Ejemplo: SQL> CREATE TRIGGER salary_check 1> BEFORE 2> INSERT OR UPDATE OF sal, job 3> ON employee 4> FOR EACH ROW 5> WHEN (new.job <> 'PRESIDENT') 6> DECLARE 7> minsal NUMBER 8> maxsal NUMBER 9> BEGIN 10> /* Se obtienen los valores minimo y maximo para el salario de */ 11> /* un cargo determinado, usando la tabla sal_guide */ 12> SELECT minsal, maxsal 13> INTO minsal, maxsal 14> FROM sal_guide 15> WHERE job = :new.job 16> /* Si el salario del empleado a insertar/modificar esta por */ 17> /* debajo del minimo, o por encima del maximo, se genera */ 19> /* un error. */ 20> IF (:new.sal < minsal OR :new.sal > maxsal) 21> THEN raise_application_error(-20601, 'Salary '||:new.sal|| 22> ' out of range for job '||:new.job||' for employee '|| 23> :new.ename); 24> END IF; 25 > END CREATE DATABASE Crea una nueva base de datos y el archivo usado para almacenarla. Sintaxis CREATE DATABASE database_name [DATABASEPASSWORD 'database_password' [ENCRYPTION {ON|OFF}] ] [COLLATE collation_name comparison_style] database password ::= identifier Argumentos database_name Nombre de la base de datos nueva. El argumento database_name es un nombre de archivo y está limitado por las restricciones de nomenclatura y tamaño del sistema operativo. Se puede usar cualquier carácter válido que se pueda utilizar en un nombre de archivo para el nombre de la base de datos. Si no se especifica un nombre de ruta, la base de datos se crea en el directorio actual. De forma predeterminada, la extensión del nombre de archivo de una base de datos de Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) es .sdf. 'database_password' SQL Server Compact Edition devuelve un error si un usuario se conecta a una base de datos protegida por contraseña sin usar ninguna contraseña. El valor de database_password debe estar entre comillas tipográficas simples. ENCRYPTION Si se utiliza la palabra clave opcional ENCRYPTION ON, la base de datos se cifra mediante cifrado de 128 bits. Debe especificar una contraseña para utilizar cifrado. collation_name Especifica la intercalación predeterminada para la base de datos. El argumento collation_name sólo puede ser una intercalación de Windows. Si no se especifica collation_name, se asigna a la base de datos la intercalación predeterminada del dispositivo. comparison_style Especifica el estilo de comparación de caracteres. SQL Server Compact Edition sólo admite CI_AS (no distingue mayúsculas de minúsculas y distingue acentos). Los parámetros collation_name y comparison_style no deben estar incluidos entre comillas tipográficas simples o dobles. Ejemplo de código: Crear una base de datos protegida mediante contraseña En el siguiente ejemplo se crea una base de datos con una contraseña. CREATE DATABASE "\test1.SDF" DATABASEPASSWORD '<tst1_pwd>' Cuando un usuario se intenta conectar a una base de datos protegida por contraseña sin suministrar la contraseña correcta, SQL Server Compact Edition devuelve este error: Error: 0x80040e4d DB_SEC_E_AUTH_FAILED Minor Error: (25028) Description: Authentication failed. Interface defining error: IID_IDBInitialize Param. 0:0 Param. 1:0 Param. 2:0 Param. 3: Param. 4: Param. 5: CREATE VIEW Crea una tabla virtual que representa los datos de una o más tablas de una forma alternativa. CREATE VIEW debe ser la primera instrucción en un lote de consultas. Sintaxis CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute> [ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ] <view_attribute> ::= { [ ENCRYPTION ] [ SCHEMABINDING ] [ VIEW_METADATA ] } Ejemplo: 1. Utilizar una instrucción CREATE VIEW sencilla En el ejemplo siguiente se crea una vista mediante una instrucción SELECT sencilla. Una vista sencilla resulta útil cuando se consulta con frecuencia una combinación de columnas. Los datos de esta vista provienen de las tablas HumanResources.Employee y Person.Contact de la base de datos AdventureWorks. Los datos proporcionan el nombre e información sobre la fecha de contratación de los empleados de Adventure Works Cycles. Esta vista puede crearse para la persona responsable del seguimiento de los aniversarios de trabajo pero sin concederle acceso a todos los datos de estas tablas. USE AdventureWorks2008R2 ; GO IF OBJECT_ID ('hiredate_view', 'V') IS NOT NULL DROP VIEW hiredate_view ; GO CREATE VIEW hiredate_view AS SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate FROM HumanResources.Employee e JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ; GO 2. Utilizar WITH ENCRYPTION En el siguiente ejemplo se utiliza la opción WITH ENCRYPTION y se muestran columnas calculadas, columnas con el nombre cambiado y varias columnas. USE AdventureWorks2008R2 ; 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, DueDate FROM Purchasing.PurchaseOrderDetail WHERE RejectedQty / ReceivedQty > 0 AND DueDate > CONVERT(DATETIME,'20010630',101) ; GO CONCLUSIÓN En esta investigación damos a conocer la definición y sintaxis en sus diferentes versiones de CREATE (CREATE TABLE, CREATE INDEX, CREATE USER, CREATE TRIGGER, CREATE DATABASE, CREATE VIEW); los cuales son principales elementos que incluyen en un sistema generador de base de datos como son: MySQL SERVER, SQL, POSTGRESQL, ORACLE ya que la sintaxis se relacionan de forma similar al comenzar con la misma sentencia pero a su vez al ejecutarse son diferentes ya que cada uno genera una acción que tiene efectos específicos a la hora de depurar cada instrucción un ejemplo de ello es comparar la creación de una tabla con la generación de una vista de la misma tabla. BIBLIOGRAFÍA http://dev.mysql.com/doc/refman/5.0/es/create-user.html http://dev.mysql.com/doc/refman/5.0/es/createtrigger.html http://rt000z51.eresmas.net/documentos/trigger.html http://www.aulaclic.es/sql/t_8_1.htm http://www.aulaclic.es/sql/t_8_4.htm http://msdn.microsoft.com/eses/library/ms174454(SQL.90).aspx