En este anexo se va a presentar la sintaxis precisa del conjunto de instrucciones del lenguaje SQL estudiadas. La notación que se va a seguir para presentar esta sintaxis es una versión extendida de BNF1. En BNF, cada elemento sintáctico se define mediante un conjunto de reglas de producción. Estas reglas definen un elemento en términos de una fórmula formada de caracteres, tiras de caracteres y elementos sintácticos que pueden ser usados para formar una instancia de dicho elemento. A continuación se incluyen los símbolos y reglas de la versión de BNF que se ha usado:
• tira de caracteres en cursiva: define un nombre de un identificador.
• tira de caracteres normal en minúsculas: define el nombre de un elemento sintáctico que no es un símbolo terminal y que se define en otra regla de producción.
• TIRA DE CARACTERES EN MAYÚSCULAS: es un símbolo terminal de la gramática y define una palabra reservada del lenguaje SQL.
• ::= El operador de producción. Se usa en una regla de producción para separar el elemento definido y la forma que lo define. El elemento que se define aparece a la izquierda del operador y la fórmula que lo define a la derecha.
• [ ] Los corchetes cuadrados sirven para indicar elementos opcionales dentro de una fórmula.
• {} Las llaves se usan para agrupar elementos en una fórmula. La porción de fórmula incluida entre llaves debe ser explícitamente especificada.
• La barra vertical es el operador de alternativa que permite indicar que la porción de fórmula que sigue a la barra es una alternativa a la porción de la fórmula que le precede. Si la barra aparece en la fórmula sin estar incluida en unos corchetes o llaves indica una alternativa completa para los elementos definidos en la fórmula. Si aparece en una porción de la fórmula que está entre corchetes o llaves indica alternativas para el contenido del par de corchetes o
llaves más internos.
• Si xyz es un elemento sintáctico, lista_xyz es una lista de elementos del tipo xyz separados por algún tipo de separador (espacio en blanco, salto de línea, etc.).
• Si xyz es un elemento sintáctico, comalista_xyz es una lista de elementos del tipo xyz separados por comas.
Definición de datos
1 definición_esquema ::=
CREATE SCHEMA [esquema] [AUTHORIZATION usuario]
[lista_elemento_esquema]
2 elemento_esquema ::=
definición_dominio
definición_tabla
definición_vista
definición_restricción
definición_privilegio
3 definición_dominio ::=
CREATE DOMAIN dominio [AS] tipo_dato
[definición_valor_por_defecto]
[lista_definición_restricción_dominio]
4 definición_valor_por_defecto ::= DEFAULT {literal
función_sistema
NULL }
5 definición_restricción_dominio ::=
[CONSTRAINT restricción] CHECK (expresión_condicional) [cuando_comprobar]
6 cuando_comprobar ::=
[[NOT] DEFERRABLE] [INITIALLY {IMMEDIATE
DEFERRED}]
7 definición_tabla ::=
CREATE TABLE tabla_base
comalista_definición_columna [comalista_definición_restricción_tabla]
8 definición_columna ::=
columna { tipo_dato
dominio } [definición_valor_por_defecto]
[lista_definición_restricción_columna]
9 definición_restricción_columna ::=
[CONSTRAINT restricción ]
{NOT NULL
PRIMARY KEY
UNIQUE
REFERENCES tabla [(comalista_columna)]
[MATCH {FULL
PARTIAL } ]
[ON DELETE acción_referencia]
[ON UPDATE acción_referencia]
CHECK (expresión_condicional) }
[cuando_comprobar]
10 acción_referencia ::=
NO ACTION
CASCADE
SET DEFAULT
SET NULL
11 definición_restricción_tabla ::=
[CONSTRAINT restricción ]
{PRIMARY KEY
UNIQUE (comalista_columna)
FOREIGN KEY (comalista_columna) REFERENCES tabla [(comalista_columna)]
[MATCH {FULL
PARTIAL } ]
[ON DELETE acción_referencia]
[ON UPDATE acción_referencia]
CHECK (expresión_condicional) }
[cuando_comprobar]
12 definición_vista ::=
CREATE VIEW vista [(comalista_columna)]
AS expresión_tabla [WITH CHECK OPTION]
13 definición_restricción ::=
CREATE ASSERTION restricción
CHECK (expresión_condicional) [cuando_comprobar]
14 definición_privilegio ::=
GRANT {comalista_privilegio
ALL PRIVILEGES }
ON objeto TO {comalista_usuarios
PUBLIC}
[WITH GRANT OPTION]
15 privilegio ::= SELECT
INSERT [(comalista_columna)]
UPDATE [(comalista_columna)]
DELETE
16 objeto ::= DOMAIN dominio
[TABLE] tabla
17 alteración_dominio ::=
ALTER DOMAIN dominio
{SET DEFAULT {literal
función_sistema
NULL }
DROP DEFAULT
ADD definición_restricción_dominio
DROP CONSTRAINT restricción }
18 alteración_tabla ::=
ALTER TABLE tabla_base
{ADD [COLUMN] definición_columna
ALTER [COLUMN] columna
{SET DEFAULT {literal
función_sistema
NULL }
DROP DEFAULT}
DROP [COLUMN] columna {RESTRICT
CASCADE} }
19 eliminación_esquema ::= DROP SCHEMA esquema {RESTRICT
CASCADE}
20 eliminación_dominio ::= DROP DOMAIN dominio {RESTRICT
CASCADE}
21 eliminación_tabla_base ::= DROP TABLE tabla_base {RESTRICT
CASCADE}
22 eliminación_vista ::= DROP VIEW vista {RESTRICT
CASCADE}
23 eliminación_restricción_general ::= DROP ASSERTION restricción
24 eliminación_autorización ::=
REVOKE [GRANT OPTION FOR]
{ALL
SELECT
INSERT[(comalista_columna)]
DELETE
UPDATE [(comalista_columna)]}
ON objeto TO {comalista_usuarios
PUBLIC}
{RESTRICT
CASCADE}
Ejemplo
CREATE TABLE PROFESOR
( Cod_profe Char(5) PRIMARY KEY,
Nombre Char(15) NOT NULL,
DNI Int NOT NULL,
Dirección Char(25) NOT NULL,
Materia Char(10),
Tipo Char NOT NULL,
Cód_profe_e Char(5),
Cód_area Char(5), NOT NULL,
Catedrático Bit,
FOREIGN KEY (Cód_profe_e) REFERENCES PROFESOR ON UPDATE CASCADE,
FOREIGN KEY (Cód_area) REFERENCES AREA ON UPDATE CASCADE,
CHECK( ( (Cód_prof_e = NULL) And (Catedrático =1)) Or ((Cód_prof_e = NOT NULL) And (Catedrático =0))
CHECK (Cód_profe <> Cód_profe_e)
);
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario