INGENIERIA EN SISTEMAS COMPUTACIONALES
TALLER DE BASE DE DATOS
SENTENCIA CREATE
ERIC ADRIAN CONTRERAS ARJONA
ISMA 5
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.
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
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
.
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_nameCREATE 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
.
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,
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
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
)
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..
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:
(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 tablastemporales 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.
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
oTEMP
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 sonautomáticamente una temporada.
Opcionalmente,
global
olocal
pueden ser escritos antesde
TEMPORAL
oTEMP.
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 .
La cláusula
DEFAULT
asigna un valor de datos por defecto para la columna cuya columna aparece dentro de la definición. El valor escualquier 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 ydistribuidores
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),
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: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 seha
generado al seleccionar el siguiente valor de un objeto de secuencia, y hacer que el valor predeterminado demodtime
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 mesade
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 cadaperí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 paradiferentes 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
yGLOBAL
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áusulaON COMMIT
se omite, SQL especifica que el comportamiento por defecto esON COMMIT
DELETE ROWS.
Sin embargo, el comportamiento predeterminadoen PostgreSQL es
ON COMMIT PRESERVAR FILAS.
La opciónDROP
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 detabla
CHECK
puede hacer referencia a varias columnas. PostgreSQL no hace cumplir esta restricción, sino que trata a la columna y comprobar lasrestricciones 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ónNOT
NULL).
Puesto que es el valor predeterminado para cualquier columna, su presencia no es más que ruido.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 delestá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
yusando Índice de tablas
sonextensiones.
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.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
orestricció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.