• No se han encontrado resultados

INGENIERIA EN SISTEMAS COMPUTACIONALES TALLER DE BASE DE DATOS SENTENCIA CREATE ERIC ADRIAN CONTRERAS ARJONA ISMA 5

N/A
N/A
Protected

Academic year: 2021

Share "INGENIERIA EN SISTEMAS COMPUTACIONALES TALLER DE BASE DE DATOS SENTENCIA CREATE ERIC ADRIAN CONTRERAS ARJONA ISMA 5"

Copied!
18
0
0

Texto completo

(1)

INGENIERIA EN SISTEMAS COMPUTACIONALES

TALLER DE BASE DE DATOS

SENTENCIA CREATE

ERIC ADRIAN CONTRERAS ARJONA

ISMA 5

(2)

DEFINICION

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.

Una

restricción

consiste en la definición de una

característica adicional que

tiene una columna

o una combinación de columnas, suelen ser características como

valores no nulos (campo requerido), definición de índice sin duplicados, definición

de clave principal y definición de clave foránea (clave ajena o externa, campo que

sirve para relacionar dos tablas entre sí).

restricción1: una

restricción de tipo 1

es una restricción que aparece

dentro de la

definición de la columna

después del tipo de dato y

afecta

a

una columna

, la que

se está definiendo.

restricción2: una

restricción de tipo 2

es una restricción que se define

después de

definir todas las columnas

de la tabla y

afecta

a

una

columna

o

a una

combinación

de columnas.

Para escribir una sentencia CREATE TABLE se empieza por indicar el

nombre

de

la

tabla

que

queremos

crear

y

a

continuación

entre

paréntesis

indicamos

separadas por comas las definiciones de cada columna

de

la tabla, la definición de una columna

consta de

su

nombre, el tipo de dato

que

tiene

y

podemos añadir

si queremos una serie de especificaciones

que deberán

cumplir los datos almacenados en la columna,

después

de definir cada una de las

columnas que compone la tabla

se pueden añadir

una serie de

restricciones

, esas

restricciones son las mismas que se pueden indicar para cada columna pero

ahora

pueden afectar a más de una columna

por eso tienen una sintaxis

ligeramente diferente.

(3)

columna que estamos definiendo, tiene la siguiente sintaxis:

La cláusula NOT NULL indica que

la columna no podrá contener un valor

nulo

, es decir que se deberá rellenar obligatoriamente y con un valor válido

(equivale a la propiedad requerido Sí de las propiedades del campo).

La cláusula CONSTRAINT sirve para definir una

restricción

que se podrá

eliminar cuando queramos sin tener que borrar la columna. A cada restricción se le

asigna un nombre que se utiliza para identificarla y para poder eliminarla cuando se

quiera.

Como restricciones tenemos la de clave primaria (clave principal), la de índice

único (sin duplicados), la de valor no nulo, y la de clave foránea.

La cláusula PRIMARY KEY

se utiliza para definir la columna como

clave

principal de la tabla

. Esto supone que

la columna no puede contener valores

nulos ni pueden haber valores duplicados

en esa columna, es decir que dos filas

no pueden tener el mismo valor en esa columna.

En una tabla

no pueden haber varias claves principales

, por lo que no

podemos incluir la cláusula PRIMARY KEY más de una vez, en caso contrario la

sentencia da un error. No hay que confundir la definición de varias claves

principales con la definición de una clave principal compuesta por varias columnas,

esto último sí está permitido y se define con una restricción de tipo 2.

La cláusula UNIQUE sirve para definir un

índice único

sobre la columna. Un

índice único es un índice que

no permite valores duplicados

, es decir que si una

columna tiene definida un restricción de UNIQUE no podrán haber dos filas con el

mismo valor en esa columna. Se suele emplear para que el sistema compruebe el

mismo que no se añaden valores que ya existen, por ejemplo si en una tabla de

clientes queremos asegurarnos que dos clientes no puedan tener el mismo D.N.I. y

la tabla tiene como clave principal un código de cliente, definiremos la columna dni

con la restricción de UNIQUE.

La cláusula NOT NULL indica que la columna no puede contener valores nulos,

cuando queremos indicar que una columna no puede contener el valor nulo lo

podemos hacer sin poner la cláusula CONSTRAINT, o utilizando una

(4)

cláusula CONSTRAINT.

La última restricción que podemos definir sobre una columna es la de clave

foránea, una

clave foránea es una columna

o conjunto de columnas

que contiene

un valor que hace referencia a una fila de otra tabla

, en una restricción de tipo 1

se puede definir con la cláusula REFERENCES, después de la palabra reservada

indicamos a qué tabla hace referencia, opcionalmente podemos indicar entre

paréntesis el nombre de la columna donde tiene que buscar el valor de referencia,

por defecto coge la clave principal de la tabla2, si el valor que tiene que buscar se

encuentra en otra columna de tabla2, entonces debemos inidicar el nombre de esta

columna entre paréntesis, además sólo podemos utilizar una columna que esté

definida con una restricción de UNIQUE, si la columna2 que indicamos no está

definida sin duplicados, la sentencia CREATE nos dará un error.

Ejemplo:

CREATE TABLE tab1 (

col1 INTEGER CONSTRAINT pk PRIMARY KEY,

col2 CHAR(25) NOT NULL,

col3 CHAR(10) CONSTRAINT uni1 UNIQUE,

col4 INTEGER,

col5 INT CONSTRAINT fk5 REFERENCES tab2 );

Con este ejemplo estamos creando la tabla

tab1

compuesta por: una columna

llamada

col1

de tipo entero definida como clave principal, una columna

col2

que

puede almacenar hasta 25 caracteres alfanuméricos y no puede contener valores

nulos, una columna

col3

de hasta 10 caracteres que no podrá contener valores

repetidos, una columna

col4

de tipo entero sin ninguna restricción, y una

columna

col5

de tipo entero clave foránea que hace referencia a valores de la clave

principal de la tabla

tab2

.

(5)

SQL

Sintaxis de CREATE DATABASE

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]

db_name

[

create_specification

[,

create_specification

] ...]

create_specification

:

[DEFAULT] CHARACTER SET

charset_name

| [DEFAULT] COLLATE

collation_name

CREATE DATABASE

crea una base de datos con el nombre dado. Para

usar

CREATE DATABASE

, necesita el permiso

CREATE

en la base de datos.

Ocurre un error si la base de datos existe y no especifica

IF NOT EXISTS

.

En MySQL 5.0, las opciones

create_specification

pueden darse para

especificar característica de la base de datos. Las características se

almacenan en el fichero

db.opt

en el directorio de la base de datos. La

cláusula

CHARACTER SET

especifica el conjunto de caracteres por defecto de

la base de datos. La cláusula

COLLATE

especifica la colación por defecto de

la base de datos..

Las bases de datos en MySQL se implementan como directorios que

contienen ficheros que se corresponden a tablas en la base de datos. Como

no hay tablas en la base de datos cuando se crean inicialmente, el

comando

CREATE DATABASE

en MySQL 5.0 crea sólo un directorio bajo el

directorio de datos de MySQL y el fichero

db.opt

file.

Si crea manualmente un directorio bajo el directorio de datos (por ejemplo,

con

mkdir

), el servidor lo considera como un directorio de base de datos y

muestra la salida de

SHOW DATABASES

.

(6)

ORACLE

Requisitos previos

Para que un usuario sea capaz de crear una tabla, necesita lacreación de mesa deprivilegio de sistema, de lo contrario recibirá el ORA-01031: privilegios insuficientes mensaje de error.

Además, el usuario necesita tener suficiente cuota en el espacio de tablas donde quiere crear la tabla.

Montón tablas

Por lo general, si nos referimos a las tablas, nos referimos a las tablas de montón, aunque hay otros tipos también.

Una tabla de montón se crea de esta manera:

create table t ( a number, b varchar2(10) )

Es posible crear las limitaciones , junto con la sentencia de creación. Como principales referencias extranjeras un tipo conocido, no es necesario especificar la columna de clave extranjera el tipo.

create table orders (

order_id number primary key order_dt date,

cust_id references customers )

Una clave principal debe tener asociada una (única) del índice.Es posible especificar las tablas de este índice se va a crear:

create table orders ( order_id number, order_dt date,

cust_id references customer

constraint pk_orders (order_id) using index tablespace ts_idx )

Índice organizado mesas (IOT)

create table iot_ ( a number,

(7)

constraint pk_iot_ primary key (a, b) )

organization index;

Mundial de tablas temporales

El siguiente ejemplo muestra la diferencia para rehacer genera al utilizar tablas temporales globales y "ordinario" tablas de montón. Utiliza

el redo_diff paquete.

create global temporary table gtt_ ( x_ varchar2(100)

) on commit delete rows; create table t_ ( x_ varchar2(100) ); exec redo_diff.diff_it; declare i number; begin for i in 1 .. 1000 loop

insert into gtt_ values(dbms_random.string('a',99)); end loop; end; / exec redo_diff.diff_it; declare i number; begin for i in 1 .. 1000 loop

(8)

end loop; end;

/

exec redo_diff.diff_it;

Organización externa

A continuación crear la tabla de instrucción crea una tabla externa.

create table (....)

organization external (

type oracle_loader default directory some_dir access parameters (

records delimited by newline fields terminated by ',' missing field are values null )

location ('some_file.csv') )

reject limit unlimited;

Tablas anidadas

create or replace type item as object ( item_id Number ( 6 ),

descr varchar2(30 ), quant Number ( 4,2) );

/

create or replace type items as table of item; /

create table bag_with_items (

bag_id number(7) primary key, bag_name varchar2(30) not null, the_items_in_the_bag items

(9)

)

nested table the_items_in_the_bag store as bag_items_nt;

Agregar una restricción única para item_id:

alter table bag_items_nt add constraint uq_item_id unique(item_id);

of XMLType

create table table_name of xmltype;

create table table_name of xmltype XMLSchema "some_url" element

"root-element";

create table table_name (columns..., xml_doc) XMLType xmltype column

xml_doc element "root-element";

Crea una tabla para XML DB.

Crear la tabla ... como seleccionar

Esta es una de las pocas declaraciones que pueden hacer uso de la NOLOGGING opción.

De hecho, si la base de datos se está ejecutando noarchive registro, el crear la tabla .. como seleccionar declaración esNOLOGGING..

(10)

CREATE TABLE

Nombre

CREATE TABLE - definir una nueva tabla

Sinopsis

CREATE [[GLOBAL | LOCAL] (TEMPORARY | TEMP)]

CUADRO

table_name

([

(Column_name data_type

[DEFAULT

default_expr]

[[column_constraint

... ]]

table_constraint

|

| COMO

parent_table

[(PARTICULAR |

EXCLUIDAS) (PREDETERM | OBSTÁCULOS | ÍNDICES)]

... )

[, ... ]

])

[INHERITS

([parent_table,

...])]

[CON

([storage_parameter

=

valor]

[, ...]) |

CON OIDS | SIN OIDS]

[(ON COMMIT PRESERVAR FILAS | Borrar filas DROP

|)]

[TABLESPACE]

de tablas

donde

column_constraint

es:

[CONSTRAINT]

CONSTRAINT_NAME

(NOT NULL |

NULL |

index_parameters

UNIQUE |

PRIMARIA

index_parameters

CLAVE |

CHECK

(expresión)

|

REFERENCIAS

reftable [(refcolumn)]

[PARTIDO

COMPLETO | coincidencia parcial | MATCH SIMPLE]

[ON

acción

DELETE] [DE]

de acción

UPDATE)

[| DEFERRABLE NO] DEFERRABLE [inicialmente

DIFERIDOS |] En un principio INMEDIATA

y

table_constraint

es:

(11)

(UNIQUE

([column_name,

...])

index_parameters

|

PRIMARY KEY

([column_name,

...])

index_parameters

|

CHECK

(expresión)

|

FOREIGN KEY

([column_name,

...]) REFERENCIAS

[reftable (refcolumn

[...])]

[PARTIDO COMPLETO | coincidencia parcial |

MATCH SIMPLE] [Sobre la

acción

DELETE] [DE]

de

acción

UPDATE)

[| DEFERRABLE NO] DEFERRABLE [inicialmente

DIFERIDOS |] En un principio INMEDIATA

index_parameters

único y clave en las

limitaciones principales son:

[CON

([storage_parameter

=

valor]

[, ...])]

[ÍNDICE DE USO TABLESPACE]

de tablas

Descripción

CREATE TABLE

creará una, inicialmente vacía nueva tabla en la base de datos actual. La tabla será propiedad del usuario que emite el comando. Si un nombre de esquema es dado (por ejemplo,

CREATE TABLE

myschema.mytable ...),

entonces se crea la tabla en el esquema especificado. De lo contrario, se crea en el esquema actual. Las tablas

temporales existen en un esquema especial, por lo que un nombre de esquema no se puede dar cuando se crea una tabla temporal. El nombre de la tabla debe ser distinto del nombre de cualquier otra tabla, secuencia, índice o vista en el mismo esquema.

CREATE TABLE

también crea automáticamente un tipo de datos que representa el tipo compuesto que corresponde a una fila de la tabla.Por lo tanto, las tablas no pueden tener el mismo nombre que cualquier tipo de datos existentes en el mismo esquema.

Las cláusulas de limitación opcional especificar restricciones (pruebas) de que los nuevos o actualizados filas deben satisfacer para una operación de inserción o actualización para tener éxito. Una restricción es un objeto SQL que ayuda a definir el conjunto de valores válidos en la tabla de varias maneras.

(12)

Hay dos maneras de definir las restricciones: las restricciones de tabla y las restricciones de columna. Una restricción de columna se define como parte de una definición de columna. Una definición de restricción de tabla no está atado a una columna en particular, y puede abarcar más de una columna. Cada

restricción de columna también se puede escribir como una restricción de tabla, una restricción de columna es más que una conveniencia de notación para el uso cuando la restricción sólo afecta a una columna.

Parámetros

TEMPORAL

o

TEMP

Si se especifica, se crea la tabla como una tabla temporal. Las tablas temporales se desconecta automáticamente al final de una sesión, u, opcionalmente, al final de la transacción en curso (ver

ON

COMMIT

abajo). Tablas permanentes existentes con el mismo nombre no son visibles para el actual período de sesiones, mientras que la tabla temporal existe, a menos que se referencian con nombres calificados esquema. Los índices creados en una tabla temporal son

automáticamente una temporada.

Opcionalmente,

global

o

local

pueden ser escritos antes

de

TEMPORAL

o

TEMP.

Esto no hace diferencia en PostgreSQL, pero ver la compatibilidad .

table_name

El nombre (opcional esquema cualificada) de la tabla que se creará.

column_name

El nombre de una columna que se cree en la nueva tabla.

data_type

El tipo de datos de la columna. Esto puede incluir especificadores matriz. Para obtener más información sobre los tipos de datos soportados por PostgreSQL, consulte el capítulo 8 .

(13)

La cláusula

DEFAULT

asigna un valor de datos por defecto para la columna cuya columna aparece dentro de la definición. El valor es

cualquier expresión variable libre (subconsultas y referencias cruzadas a otras columnas de la tabla actual no se permite). El tipo de datos por defecto de la expresión debe coincidir con el tipo de datos de la columna. La expresión por defecto será utilizado en cualquier operación de

inserción que no especifique un valor para la columna. Si no hay ningún valor predeterminado para una columna, el valor por defecto es nulo.

Ejemplos

Crear

películas

de mesa y

distribuidores

tabla:

CREAR UN CUADRO películas (

Código char (5) CONSTRAINT de firstkey

PRIMARY KEY,

título varchar (40) NOT NULL,

se entero NOT NULL,

fecha date_prod,

tipo varchar (10),

intervalo de horas a minutos les

);

CREAR UN CUADRO distribuidores (

se entero PRIMARY KEY nextval DEFAULT

(«serial»),

nombre varchar (40) NO CHECK NULL (nombre

<>'')

);

Crear una tabla con un arreglo de 2 dimensiones:

array_int CREATE TABLE (

vector int [] []

);

Define una restricción de tabla única para

las

películas

expuestas. restricciones únicas tabla se pueden definir en una o más columnas de la tabla:

CREAR UN CUADRO películas (

Código char (5),

(14)

título varchar (40),

no entero,

fecha date_prod,

tipo varchar (10),

horas les intervalo a minuto,

Restricción de producción UNIQUE

(date_prod)

);

Define una restricción de la columna de verificación:

CREAR UN CUADRO distribuidores (

se entero CHECK (no> 100),

nombre varchar (40)

);

Define una restricción de tabla de verificación:

CREAR UN CUADRO distribuidores (

no entero,

nombre varchar (40)

RESTRICCIÓN CON1 CHECK (no> 100 Y el nombre

de <>'')

);

Definir una clave principal restricción de tabla para la tabla

films:

CREAR UN CUADRO películas (

Código char (5),

título varchar (40),

no entero,

fecha date_prod,

tipo varchar (10),

horas les intervalo a minuto,

RESTRICCIÓN code_title PRIMARY KEY (código,

título)

);

Definir una clave principal limitación para los

distribuidores

de mesa. Los dos ejemplos siguientes son equivalentes, el primero utilizando la sintaxis de restricción de tabla, el segundo la sintaxis restricción de columna:

(15)

no entero,

nombre varchar (40),

PRIMARY KEY (lo hizo)

);

CREAR UN CUADRO distribuidores (

se entero PRIMARY KEY,

nombre varchar (40)

);

Asignar un valor constante predeterminado literal del

nombre de

la

columna, los arreglos para el valor predeterminado de la columna que se

ha

generado al seleccionar el siguiente valor de un objeto de secuencia, y hacer que el valor predeterminado de

modtime

ser el momento en que se inserta la fila:

CREAR UN CUADRO distribuidores (

nombre varchar (40) DEFAULT Luso

'Películas',

se entero nextval DEFAULT

('distributors_serial'),

timestamp modtime DEFAULT CURRENT_TIMESTAMP

);

Defina dos restricciones de columna

NULL no está

en la mesa

de

distributors

, uno de los cuales se da explícitamente un nombre:

CREAR UN CUADRO distribuidores (

hizo no_null entero restricción NOT NULL,

nombre varchar (40) NOT NULL

);

Compatibilidad

El comando

CREATE TABLE

se ajusta al estándar SQL, con excepciones que se enumeran a continuación.

Tablas temporales

Aunque la sintaxis de

CREATE TEMPORARY TABLE

se asemeja a la del estándar SQL, el efecto no es el mismo. En la norma, las tablas temporales se definen una sola vez y automáticamente existen (comenzando con contenido vacío) en cada sesión que las necesita.PostgreSQL en vez requiere que cada

(16)

período de sesiones a emitir sus propios

CREATE TEMPORARY

CUADRO

comando para cada tabla temporal que se utilizará. Esto permite que diferentes sesiones para utilizar el mismo nombre de tabla temporal para

diferentes propósitos, mientras que el enfoque de la norma restringe todas las instancias de un nombre de tabla temporal dado que la estructura misma mesa. La definición de la norma el comportamiento de las tablas temporales es

ampliamente ignorado. PostgreSQL 's El comportamiento de la en este punto es similar a la de varias bases de datos SQL otros.

La norma de distinción entre lo local y mundial tablas temporales no está en PostgreSQL, ya que esa distinción depende del concepto de módulos, que PostgreSQL no tiene. Por razones de compatibilidad, PostgreSQL aceptar las palabras clave

LOCAL

y

GLOBAL

en una declaración de tabla temporal, pero no tienen ningún efecto.

La cláusula

ON COMMIT

para las tablas temporales también se asemeja al estándar SQL, pero tiene algunas diferencias. Si la cláusula

ON COMMIT

se omite, SQL especifica que el comportamiento por defecto es

ON COMMIT

DELETE ROWS.

Sin embargo, el comportamiento predeterminado

en PostgreSQL es

ON COMMIT PRESERVAR FILAS.

La opción

DROP

ON COMMIT

no existe en SQL.

Columna restricciones CHECK

El estándar SQL dice que la columna restricciones

CHECK

sólo pueden hacer referencia a la columna que se aplican a: sólo las restricciones de

tabla

CHECK

puede hacer referencia a varias columnas. PostgreSQL no hace cumplir esta restricción, sino que trata a la columna y comprobar las

restricciones de tabla por igual.

NULL

"restricción"

El

NULL

"restricción" (en realidad un no-restricción) es una extensión de PostgreSQL con el estándar SQL que se incluye por compatibilidad con algunos sistemas de base de datos (y por simetría con la restricción

NOT

NULL).

Puesto que es el valor predeterminado para cualquier columna, su presencia no es más que ruido.

(17)

La herencia múltiple a través de la cláusula

INHERITS

es una extensión del lenguaje de PostgreSQL. SQL: 1999 y luego definir la herencia simple utilizando una sintaxis diferente y la semántica diferente. :1999-SQL estilo la herencia todavía no está soportado por PostgreSQL.

Zero-columna tablas

PostgreSQL permite una tabla de columnas sin que se cree (por

ejemplo,

CREATE TABLE foo ();).

Esta es una extensión del

estándar SQL, que no permite tablas cero columnas. -Columna de las tablas de cero no son de por sí muy útil, pero no se permite, crea extraños casos

especiales de

ALTER TABLE DROP COLUMN,

por lo que parece más limpio de ignorar esas restricciones de especificaciones.

Cláusula

WITH

La cláusula

WITH

es una extensión de PostgreSQL; ni los demás parámetros de almacenamiento ni OID están en el estándar.

Tablespaces

El concepto de tablas de PostgreSQL no es parte de la norma. Por lo tanto, las cláusulas

de tablas

y

usando Índice de tablas

son

extensiones.

CREATE TABLESPACE

Nombre

CREATE TABLESPACE - definir un nuevo espacio de tablas

Sinopsis

TABLESPACE

tablespacename

[PROPIETARIO

nombre

de usuario]

UBICACIÓN

"Crear directorio"

Descripción

CREATE TABLESPACE

registros en todo el clúster un nuevo espacio de tablas. El nombre de tablas deben ser distintos de la de todas las tablas existentes en el clúster de base de datos.

(18)

Un espacio de tablas permite superusuarios para definir una ubicación alternativa en el sistema de archivos en los archivos de datos que contienen objetos de base de datos (como tablas e índices) puede residir.

Un usuario con privilegios adecuados pueden

pasar

tablespacename

CREAR BASE DE DATOS, CREATE

TABLE, CREATE INDEX

o

restricción ADD

para tener los archivos de datos para estos objetos almacenados en el espacio de tablas especificado.

Parámetros

tablespacename

El nombre de un espacio de tablas que se creará. El nombre no puede empezar con

pg_,

como nombres de estos están reservados para espacios de tablas del sistema.

nombre de usuario

El nombre del usuario que será propietario de las tablas. Si se omite, por defecto el usuario que ejecuta el comando. Sólo superusuarios pueden crear espacios de tablas, pero puede asignar la propiedad de espacios de tabla para no superusuarios.

directorio

El directorio que se utilizará para el espacio de tablas. El directorio debe estar vacío y debe ser propiedad del usuario del sistemaPostgreSQL. El directorio debe ser especificado por un nombre de ruta absoluta.

Referencias

Documento similar