Creando una tabla en sql. Eliminación de una base de datos. Declaración CREATE TABLE y restricciones de integridad declarativas

Última actualización: 09.07.2017

Para crear tablas, utilice el comando CREATE TABLE. Puede utilizar varios operadores con este comando que definen las columnas de la tabla y sus atributos. Y además, puede utilizar una serie de operadores que determinan las propiedades de la tabla en su conjunto. Una base de datos puede contener hasta 2 mil millones de tablas.

La sintaxis general para crear una tabla es la siguiente:

CREAR TABLA nombre_tabla (nombre_columna1 tipo_datos atributos_columna1, nombre_columna2 tipo_datos atributos_columna2, .................................... . ......... nombre_columnaN tipo_datos atributos_columnaN, atributos_tabla)

Después del comando CREATE TABLE viene el nombre tabla creada. El nombre de la tabla actúa como su identificador en la base de datos, por lo que debe ser único. El nombre no debe tener más de 128 caracteres. El nombre puede constar de caracteres alfanuméricos, así como $ y guiones bajos. Además, el primer carácter debe ser una letra o un guión bajo.

El nombre del objeto no puede incluir espacios y no puede representar una de las palabras clave de Transact-SQL. Si el identificador todavía contiene caracteres de espacio en blanco, entonces debe estar entre comillas. Si es necesario utilizar palabras clave como nombre, estas palabras se colocan entre corchetes.

Ejemplos de identificadores correctos:

Etiquetas de usuarios $ 345 usuarios_accounts "cuentas de usuarios"

Después del nombre de la tabla, se indican entre paréntesis los parámetros de todas las columnas y, al final, los atributos que se aplican a toda la tabla. Los atributos de columna y los atributos de tabla son componentes opcionales y se pueden omitir.

En su forma más simple, el comando CREATE TABLE debe contener como mínimo el nombre de la tabla y los nombres y tipos de las columnas.

Una tabla puede contener de 1 a 1024 columnas. Cada columna debe tener un nombre único dentro de la tabla actual y tener asignado un tipo de datos.

Por ejemplo, definiendo la tabla Clientes más simple:

CREAR TABLA Clientes (Id. INT, Edad INT, Nombre NVARCHAR(20), Apellido NVARCHAR(20), Correo electrónico VARCHAR(30), Teléfono VARCHAR(20))

EN en este caso La tabla Clientes define seis columnas: Id., Nombre, Apellido, Edad, Correo electrónico y Teléfono. Las dos primeras columnas representan el ID del cliente y la edad y son de tipo INT, lo que significa que almacenarán valores numéricos. Las dos columnas siguientes representan el nombre y apellido del cliente y son de tipo NVARCHAR(20), lo que significa que representan una cadena UNICODE de no más de 20 caracteres. Las dos últimas columnas Correo electrónico y Teléfono representan la dirección correo electrónico y el número de teléfono del cliente y son de tipo VARCHAR(30/20); también almacenan una cadena, pero no en codificación UNICODE.

Crear una tabla en SQL Management Studio

vamos a crear una mesa sencilla en el servidor. Para hacer esto, abra SQL Gestión de servidores Estudio y haga clic clic derecho mouse sobre el nombre del servidor. En el menú contextual que aparece, seleccione Nueva consulta.

La tabla se crea dentro de la base de datos actual. Si iniciamos la ventana del editor SQL como se hizo anteriormente, desde debajo del nombre del servidor, entonces la base de datos predeterminada no está instalada. Y para instalarlo, necesita usar el comando USE, seguido del nombre de la base de datos. Por lo tanto, ingresamos las siguientes expresiones en el campo del editor de comandos SQL:

UTILIZAR usuariosdb; CREAR TABLA Clientes (Id. INT, Edad INT, Nombre NVARCHAR(20), Apellido NVARCHAR(20), Correo electrónico VARCHAR(30), Teléfono VARCHAR(20));

Es decir, la tabla Clientes, que se analizó anteriormente, se agrega a la base de datos.

También puede abrir el editor desde debajo de la base de datos haciendo clic derecho sobre él y seleccionando Nueva consulta:

En este caso, la base de datos desde la que se abrió el editor se considerará como la actual y no será necesario instalarla adicionalmente mediante el comando USE.

Quitar tablas

Para eliminar tablas, utilice el comando DROP TABLE, que tiene la siguiente sintaxis:

DROP TABLE tabla1 [, tabla2, ...]

Por ejemplo, eliminando la tabla Clientes:

MESA DE GOTA Clientes

Cambiar el nombre de una tabla

Para cambiar el nombre de las tablas, utilice el procedimiento almacenado del sistema "sp_rename". Por ejemplo, cambiar el nombre de la tabla Usuarios a Cuentas de usuario en la base de datos de usuarios:

UTILIZAR usuariosdb; EXEC sp_rename "Usuarios", "Cuentas de usuario";

Antes de poder crear una tabla SQL, debe definir el modelo de base de datos. Diseñar un diagrama ER en el que definir entidades, atributos y relaciones.

Conceptos básicos

Las entidades son objetos o hechos sobre los cuales se debe almacenar información. Por ejemplo, un empleado de una empresa o proyectos implementados por la empresa. Los atributos son componentes que describen o califican a una entidad. Por ejemplo, el atributo de la entidad "empleado" es salarios, y el atributo de la entidad “proyecto” es el costo estimado. Las conexiones son asociaciones entre dos elementos. Puede ser bidireccional. También existe una conexión recursiva, es decir, la conexión de una entidad consigo misma.

También es necesario determinar las claves y condiciones bajo las cuales se mantendrá la integridad de la base de datos. ¿Qué significa? En otras palabras, restricciones que ayudarán a mantener las bases de datos en forma correcta y consistente.

Transición del diagrama ER al modelo tabular

Reglas para la transición a un modelo tabular:

  1. Convierte todas las entidades en tablas.
  2. Convierta todos los atributos en columnas, es decir, cada atributo de entidad debe aparecer en el nombre de la columna de la tabla.
  3. Convierta identificadores únicos en claves primarias.
  4. Convierta todas las relaciones a claves externas.
  5. Cree la tabla SQL.

Creando una base de datos

Primero necesitas correr servidor mysql. Para iniciarlo, vaya al menú "Inicio", luego a "Programas", luego a MySQL y Mi Servidor SQL, seleccione MySQL-Command-Line-Client.

Para crear una base de datos, utilice el comando Crear base de datos. Esta función tiene el siguiente formato:

CREAR BASE DE DATOS nombre_base_datos.

Las restricciones sobre el nombre de la base de datos son las siguientes:

  • la longitud es de hasta 64 caracteres y puede incluir letras, números, símbolos "" y "";
  • el nombre puede comenzar con un número, pero debe contener letras.

Necesitamos recordar y regla general: Cualquier consulta o comando termina con un delimitador. En SQL, es común utilizar un punto y coma como delimitador.

El servidor debe indicar con qué base de datos necesitará trabajar. Hay una declaración USE para esto. Este operador tiene una sintaxis simple: USE n nombre_base_datos.

Crear una tabla SQL

Entonces, se diseña el modelo, se crea la base de datos y se le dice al servidor exactamente cómo trabajar con ella. Ahora puedes empezar a crear tablas SQL. Existe el lenguaje de definición de datos (DDL). Se utiliza para crear tablas MS SQL, así como para definir objetos y trabajar con su estructura. DDL incluye un conjunto de comandos.

Creación de tablas de SQL Server

Usando solo un comando DDL, puede crear varios objetos de base de datos variando sus parámetros. Se utiliza el comando Crear tabla. El formato tt se ve así:

CREAR TADLE nombre_tabla,(nombre_columna1 Nombre _columna2 tipo de datos [columna_constraint],[table_constraints]).

La sintaxis de este comando debería describirse con más detalle:

  • El nombre de la tabla debe tener hasta 30 caracteres y comenzar con una letra. Sólo se permiten caracteres alfabéticos, letras y los símbolos "_", "$" y "#". Se permite el uso del alfabeto cirílico. Es importante tener en cuenta que los nombres de las tablas no deben ser los mismos que otros nombres de objetos o palabras reservadas del servidor de bases de datos, como columna, tabla, índice, etc.
  • Debe especificar un tipo de datos para cada columna. existe conjunto estándar, utilizado por la mayoría. Por ejemplo, Char, Varchar, Número, Fecha, tipo nulo etc.

  • El parámetro Predeterminado le permite establecer un valor predeterminado. Esto asegura que no haya valores nulos en la tabla. ¿Cómo entender esto? El valor predeterminado puede ser un símbolo, una expresión o una función. Es importante recordar que este tipo de datos predeterminado debe coincidir con el tipo de datos de entrada de la columna.
  • Las restricciones en cada columna se utilizan para imponer condiciones de integridad para los datos a nivel de tabla. Hay otros matices. Está prohibido eliminar una tabla si hay otras tablas que dependen de ella.

Cómo trabajar con la base de datos.

Para implementación grandes proyectos La mayoría de las veces, es necesario crear varias bases de datos y cada una requiere muchas tablas. Por supuesto, es imposible que los usuarios retengan toda la información en su cabeza. Para ello, es posible visualizar la estructura de las bases de datos y las tablas que contienen. Hay varios comandos, a saber:

  • MOSTRAR BASES DE DATOS: muestra todas las bases de datos SQL creadas en la pantalla;
  • MOSTRAR TABLAS: muestra una lista de todas las tablas de la base de datos actual que se seleccionan con el comando USE;
  • DESCRIBIR nombre_tabla- muestra una descripción de todas las columnas de la tabla.
  • ALTER TABLE: le permite cambiar la estructura de la tabla.

El último comando permite:

  • agregar una columna o restricción a una tabla;
  • cambiar una columna existente;
  • eliminar columna o columnas;
  • eliminar restricciones de integridad.

La sintaxis de este comando es: ALTER TABLE nombre_tabla( | | | | [(HABILITAR | DESHABILITAR) CONSTANTE nombre_restricción ] | }.

Hay otros comandos:

  • RENOMBRAR: cambia el nombre de la tabla.
  • TRUNCATE TABLE: elimina todas las filas de la tabla. Esta función puede ser necesaria cuando es necesario volver a llenar la tabla, pero no es necesario almacenar datos anteriores.

También hay situaciones en las que la estructura de la base de datos ha cambiado y la tabla debe eliminarse. Hay un comando DROP para esto. Por supuesto, primero debes seleccionar la base de datos de la que deseas eliminar la tabla, si es diferente a la actual.

La sintaxis del comando es bastante simple: DROP TABLE Nombre_mesas.

en SQL Creación de acceso tablas y su modificación se realiza mediante los mismos comandos enumerados anteriormente.

Usando CREATE TABLE puedes crear una tabla vacía y luego llenarla con datos. Pero eso no es todo. También puede crear directamente una tabla a partir de otra tabla. ¿Cómo es esto? Es decir, es posible definir una tabla y llenarla con datos de otra tabla. Hay una palabra clave especial AS para esto.

La sintaxis es muy simple:

  • CREAR TABLA Nombre_tablas[(definición_columna)] Subconsulta AS;
  • definición_columna - nombres de columnas, reglas de integridad para columnas de tablas recién creadas y valores predeterminados;
  • subconsulta: devuelve las filas que deben agregarse a la nueva tabla.

Por lo tanto, dicho comando crea una tabla con ciertas columnas, inserta filas en ella, que se devuelven en la consulta.

Tablas temporales

Las tablas temporales son tablas cuyos datos se borran al final de cada sesión o antes. Se utilizan para grabar. valores intermedios o resultados. Se pueden utilizar como hojas de trabajo. Puedes definir temporales en cualquier sesión, pero puedes usar sus datos solo en la sesión actual. Creación de temporal tablas SQL ocurre de la misma manera que de costumbre, usando el comando CREATE TABLE. Para mostrarle al sistema que la tabla es temporal, debe usar el parámetro TEMPORAL GLOBAL.

La cláusula ON COMMIT establece la vida útil de los datos en dicha tabla y puede hacer lo siguiente:

  • ELIMINAR FILAS: borre la tabla temporal (elimine todos los datos de la sesión) después de completar cada transacción. Este suele ser el valor predeterminado.
  • CONSERVAR FILAS: deje datos para usarlos en la siguiente transacción. Además, podrá limpiar la mesa sólo después de que finalice la sesión. Pero hay algunas peculiaridades. Si una transacción se revierte (ROLLBACK), la tabla volverá a su estado al final de la transacción anterior.

La sintaxis para crear una tabla temporal se puede representar de la siguiente manera: CREAR TABLA Nombre_mesas,(Nombrecolumna_1 tipo de datos [columna_restricción], Nombre _columna2 tipo de datos [columna_constraint], [table_constraints]).

87

El parámetro table_name es el nombre de la tabla base que se creará. Cantidad máxima La cantidad de tablas que puede contener una sola base de datos está limitada por la cantidad de objetos de la base de datos, que no puede exceder los 2 mil millones, incluidas tablas, vistas, procedimientos almacenados, activadores y restricciones. Los parámetros col_name1, col_name2, ... indican los nombres de las columnas de la tabla, y los parámetros type1, type2, ... indican los tipos de datos de las columnas correspondientes.

El nombre de un objeto de base de datos normalmente puede constar de cuatro partes, en la forma:

]]nombre_objeto

Aquí nombre_objeto es el nombre del objeto de la base de datos, nombre_esquema es el nombre del esquema al que pertenece el objeto y nombre_servidor y nombre_bd son los nombres del servidor y la base de datos a los que pertenece el objeto. Los nombres de las tablas agrupadas con un nombre de esquema deben ser inequívocos dentro de la base de datos. Asimismo, los nombres de las columnas deben ser inequívocos dentro de la tabla.

Consideremos ahora la restricción asociada con la presencia o ausencia de valores NULL en una columna. Si no se especifica una columna para permitir valores NULL ( NO NULO), Eso esta columna no puede contener valores NULL y el sistema devolverá un mensaje de error si intenta insertar dicho valor.

Como se mencionó, siempre se crea un objeto de base de datos (en este caso una tabla) en el esquema de la base de datos. Un usuario solo puede crear tablas en un esquema para el que tenga autoridad ALTER. Cualquier usuario con el rol sysadmin, db_ddladmin o db_owner puede crear tablas en cualquier esquema.

El creador de una tabla no tiene por qué ser su propietario. Esto significa que un usuario puede crear tablas que sean propiedad de otros usuarios. De manera similar, una tabla creada con una instrucción CREATE TABLE no necesita pertenecer a la base de datos actual siempre que el nombre de la tabla tenga el prefijo de una base de datos y un nombre de esquema diferentes (existentes).

El esquema al que pertenece una tabla puede tener dos posibles nombres predeterminados. Si se especifica una tabla sin un nombre de esquema explícito, el sistema busca el nombre de la tabla en el esquema predeterminado apropiado. Si el nombre del objeto no se puede encontrar en el esquema predeterminado, el sistema busca en el esquema dbo. Los nombres de las tablas siempre deben especificarse junto con el nombre del esquema correspondiente. Esto evitará posibles incertidumbres.

El siguiente ejemplo muestra cómo crear todas las tablas en la base de datos SampleDb. (La base de datos SampleDb debe configurarse como la base de datos actual).

UTILICE SampleDb; CREAR TABLA Departamento (Número CHAR (4) NOT NULL, Nombre del departamento NCHAR (40) NOT NULL, Ubicación NCHAR (40) NULL); CREAR TABLA. ( CHAR (4) NO NULO, NCHAR (15) NO NULO, FLOAT (53) NULO); CREAR TABLA dbo.Empleado (Id INT NOT NULL, Nombre NCHAR (20) NOT NULL, Apellido NCHAR (20) NOT NULL, Número de departamento CHAR (4) NULL); CREAR TABLA dbo.Works_on (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, Job NCHAR (15) NULL, EnterDate DATE NULL);

Además del tipo de datos y la presencia del valor NULL, puede especificar los siguientes parámetros en la especificación de la columna:

    cláusula DEFAULT;

    Propiedad de IDENTIDAD.

Cláusula DEFAULT en la especificación de la columna indica el valor predeterminado de la columna, es decir Cuando se inserta una nueva fila en una tabla, una celda de esa columna contendrá valor especificado, que permanecerá en la celda a menos que se ingrese otro valor en ella. Puede utilizar una constante como valor predeterminado, como uno de funciones del sistema como USUARIO, CURRENT_USER, SESSION_USER, SYSTEM_USER, CURRENT_TIMESTAMP y NULL.

Columna de identificador creada especificando una propiedad IDENTIDAD, solo puede tener valores enteros, que normalmente el sistema asigna implícitamente. Cada valor posterior insertado en dicha columna se calcula incrementando el último valor insertado en esta columna. Por lo tanto, la definición de una columna con propiedad de IDENTIDAD contiene (explícita o implícitamente) el valor inicial y el incremento (esta columna también se denomina columna de incremento automático).

A continuación se muestra un ejemplo de cómo se utilizan estas instrucciones:

UTILICE SampleDb; CREATE TABLE UserInfo (-- Para la columna Id, se utilizará IDENTITY(10,5) de incremento automático, -- es decir, al insertar datos, se asignará al primer elemento -- el valor 10, el segundo 15, el tercero 20, etc. Id INT NOT NULL PRIMARY KEY IDENTITY (10,5), Login VARCHAR(40) NOT NULL, -- El campo Fecha de nacimiento se establecerá en una fecha predeterminada -- (a menos que este campo se especifique explícitamente al insertar datos) Fecha de nacimiento DATETIME DEFAULT (-- Predeterminado - 30 años a partir de fecha actual FECHAADD(año, -30, GETDATE())))

Declaración CREATE TABLE y restricciones de integridad declarativas

Una de las características más importantes que debe proporcionar un DBMS es una forma de garantizar la integridad de los datos. Las restricciones que se utilizan para validar datos cuando se modifican o insertan se llaman restricciones para garantizar la integridad (RESTRICCIONES de integridad). El usuario puede garantizar la integridad de los datos en el programa de aplicación o en el sistema de gestión de la base de datos. Mayoría ventajas importantes Las restricciones de integridad proporcionadas por el sistema de gestión de bases de datos son las siguientes:

    aumenta la confiabilidad de los datos;

    se reduce el tiempo de programación;

    simplifica el mantenimiento.

La definición de restricciones de integridad a través del DBMS mejora la confiabilidad de los datos al eliminar la posibilidad de que el programador de aplicaciones se olvide de implementarlas. Si se proporcionan restricciones de integridad programas de aplicacion, todas las aplicaciones afectadas por estas restricciones deben contener el código apropiado. Si falta el código incluso en una aplicación, se cuestionará la integridad de los datos.

Si el sistema de gestión de bases de datos no proporciona restricciones de integridad, deben definirse en cada programa de aplicación que utilice los datos incluidos en la restricción. Por el contrario, si el sistema de gestión de bases de datos proporciona restricciones de integridad, solo es necesario definirlas una vez. Además, el código para las restricciones proporcionadas por la aplicación suele ser más complejo que el de las mismas restricciones proporcionadas por el DBMS.

Si el DBMS proporciona las restricciones de integridad, entonces si las restricciones cambian, los cambios correspondientes en el código deben implementarse solo una vez: en el sistema de administración de la base de datos. Y si las restricciones las proporcionan las aplicaciones, entonces se deben realizar modificaciones para reflejar los cambios en las restricciones en cada una de esas aplicaciones.

Los sistemas de gestión de bases de datos proporcionan dos tipos de restricciones de integridad:

    restricciones declarativas para garantizar la integridad;

    restricciones procesales para garantizar la integridad, implementadas a través de activadores.

Las restricciones declarativas se definen mediante declaraciones DDL CREATE TABLE y ALTER TABLE. Estas restricciones pueden ser a nivel de columna o de tabla. Las restricciones a nivel de columna se definen junto con el tipo de datos y otras propiedades de la columna en la declaración de columna, mientras que las restricciones a nivel de tabla siempre se definen al final de una instrucción CREATE TABLE o ALTER TABLE después de que se hayan definido todas las columnas.

Sólo hay una diferencia entre las restricciones a nivel de columna y las restricciones a nivel de tabla: las restricciones a nivel de columna solo se pueden aplicar a una columna, mientras que las restricciones a nivel de tabla pueden abarcar más de una columna en una tabla.

Cada restricción declarativa recibe un nombre. Este nombre se puede asignar explícitamente usando la opción RESTRICCIÓN en una declaración CREATE TABLE o ALTER TABLE. Si no se especifica la opción CONSTRAINT, el motor de base de datos asigna implícitamente el nombre de la restricción. Se recomienda encarecidamente utilizar nombres de restricciones explícitos, ya que esto puede mejorar en gran medida la búsqueda de esas restricciones.

Las restricciones declarativas se pueden agrupar en las siguientes categorías:

    cláusula DEFAULT;

    cláusula ÚNICA;

    cláusula de CLAVE PRIMARIA;

    cláusula VERIFICAR;

    integridad referencial y la cláusula FOREIGN KEY.

El uso de la cláusula DEFAULT para definir una restricción predeterminada se mostró anteriormente. Todas las demás restricciones se analizan en las secciones siguientes.

oferta ÚNICA

A veces, varias columnas o un grupo de columnas de una tabla tienen valores únicos, lo que permite utilizarlas como clave primaria. Las columnas o grupos de columnas que se pueden utilizar como clave principal se denominan claves potenciales (clave candidata). Cada clave candidata se define mediante una cláusula. ÚNICO en una declaración CREATE TABLE o ALTER TABLE. La sintaxis de la cláusula ÚNICA es la siguiente:

La opción CONSTRAINT en la cláusula UNIQUE asigna un nombre explícito a la clave candidata. Opción Agrupado o NO Agrupado Esto se debe al hecho de que el motor de base de datos crea un índice en cada clave de tabla potencial. Este índice se puede agrupar cuando orden fisico Las filas están determinadas por el orden indexado de los valores de las columnas. Si no se especifica el orden de las filas, el índice no está agrupado. El valor predeterminado es NO CLUSTERADO. El parámetro col_name1 especifica el nombre de la columna que crea la clave candidata. ( Clave potencial puede tener hasta 16 columnas.)

El uso de la cláusula UNIQUE se muestra en el siguiente ejemplo. (Antes de ejecutar este ejemplo, debe eliminar la tabla Proyectos en la base de datos SampleDb usando la instrucción DROP TABLE Proyectos).

UTILICE SampleDb; CREAR TABLA Proyectos (Número CHAR(4) DEFAULT "p1", Nombre del proyecto NCHAR (15) NOT NULL, Presupuesto FLOAT (53) NULL, CONSTRAINT número_único ÚNICO (Número));

Cada valor en la columna Número de la tabla Proyectos es único, incluido valor NULO. (Al igual que cualquier otro valor con una restricción ÚNICA, si se permiten valores NULL para la columna correspondiente, esa columna puede contener como máximo una fila con un valor NULL). Intentar insertar un valor en la columna Número que ya está en fallará porque .To. el sistema no lo aceptará. El nombre explícito de la restricción definida en el ejemplo es número_único.

Oferta CLAVE PRINCIPAL

Clave primaria de la tabla. Es una columna o grupo de columnas cuyos valores son diferentes en cada fila. Cada clave principal se define mediante la cláusula CLAVE PRIMARIA en una declaración CREATE TABLE o ALTER TABLE. La sintaxis de la cláusula PRIMARY KEY es la siguiente:

Todos los parámetros de la cláusula PRIMARY KEY tienen el mismo significado que los parámetros correspondientes del mismo nombre en la cláusula UNIQUE. Pero a diferencia de la columna UNIQUE, la columna PRIMARY KEY no permite valores NULL y tiene un valor predeterminado de CLUSTERED.

El siguiente ejemplo muestra la declaración de clave principal para la tabla Empleado en la base de datos SampleDb. Antes de ejecutar este ejemplo, debe eliminar la tabla Empleado en la base de datos SampleDb usando la declaración DROP TABLE Empleado.

UTILICE SampleDb; CREAR TABLA Empleado (Id INT NOT NULL, Nombre NCHAR (20) NOT NULL, Apellido NCHAR (20) NOT NULL, Número de departamento CHAR (4) NULL, CONSTRAINT Primary_id PRIMARY KEY (Id));

Al ejecutar este código nuevamente se crea la tabla Empleado con una clave principal definida. La clave principal de una tabla se define mediante una restricción de integridad declarativa denominada id_primaria. Esta restricción de integridad es una restricción a nivel de tabla porque se especifica después de que se definan todas las columnas de la tabla Empleado.

El siguiente ejemplo es equivalente al anterior, excepto que la clave principal de la tabla Empleado se define como una restricción a nivel de columna.

UTILICE SampleDb; MESA DE GOTA Empleado; CREAR TABLA Empleado (Id INT NOT NULL CONSTRAINT id_primario CLAVE PRIMARIA, Nombre NCHAR (20) NOT NULL, Apellido NCHAR (20) NOT NULL, Número de departamento CHAR (4) NULL);

En el ejemplo, la cláusula PRIMARY KEY pertenece a la declaración de la columna correspondiente, junto con la declaración de su tipo de datos y la propiedad para contener valores NULL. Por esta razón, esta limitación se llama restricción a nivel de columna.

CONSULTAR oferta

Verificar restricción (VERIFICAR RESTRICCIÓN) define las condiciones para los datos insertados en la columna. Cada fila que se inserta en una tabla, o cada valor que actualiza el valor de una columna, debe cumplir estas condiciones. Los límites de prueba se establecen mediante una propuesta. CONTROLAR, definido en una instrucción CREATE TABLE o ALTER TABLE. La sintaxis de la cláusula CHECK es la siguiente:

La expresión debe ser un valor booleano (verdadero o falso) y puede hacer referencia a cualquier columna de la tabla actual (o solo a la columna actual si se define como una restricción a nivel de columna), pero no a otras tablas. La cláusula CHECK no se aplica al replicar datos si la opción NOT FOR REPLICATION está presente. (Con la replicación, una base de datos, o parte de ella, se almacena en varias ubicaciones. La replicación puede mejorar la disponibilidad de los datos).

El siguiente ejemplo muestra el uso de la cláusula CHECK:

UTILICE SampleDb; CREAR TABLA Cliente (CustomerId INTEGER NOT NULL, CustomerRole VARCHAR(100) NULL, CHECK (CustomerRole IN ("admin", "moderador", "usuario")));

La tabla Cliente que crea el ejemplo incluye una columna CustomerRole que contiene la restricción de verificación correspondiente. Cuando inserta un nuevo valor que difiere de los valores del conjunto ("admin", "moderador", "usuario"), o cuando intenta cambiar un valor existente a un valor que difiere de estos valores, la base de datos El sistema de gestión devuelve un mensaje de error.

Oferta CLAVE EXTRANJERA

clave externa es una columna (o grupo de columnas de tabla) que contiene valores que coinciden con los valores de clave principal en la misma tabla o en otra. Una clave externa se define mediante una cláusula. LLAVE EXTRANJERA en combinación con oferta REFERENCIAS. La sintaxis de la cláusula FOREIGN KEY es la siguiente:

[ ((col_name1) ,...)] REFERENCIAS table_name ((col_name2),...) Convenciones de sintaxis

La cláusula FOREIGN KEY define explícitamente todas las columnas que se incluyen en la clave externa. La cláusula REFERENCES especifica el nombre de la tabla que contiene las columnas que crean la clave principal correspondiente. El número de columnas y su tipo de datos en la cláusula FOREIGN KEY deben coincidir con el número de columnas correspondientes y su tipo de datos en la cláusula REFERENCES (y, por supuesto, deben coincidir con el número de columnas y tipos de datos en la clave primaria de la tabla a la que se refieren).

UTILICE SampleDb; CREAR TABLA Works_on (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, Job NCHAR (15) NULL, EnterDate DATE NULL, CONSTRAINT Primary_works PRIMARY KEY (EmpId, ProjectNumber), CONSTRAINT Foreign_employee FOREIGN KEY (EmpId) REFERENCIAS Empleado (Id) , RESTRICCIÓN proyecto_extranjero CLAVE EXTRANJERA (Número de proyecto) REFERENCIAS Proyectos (Número));

La tabla Works_on en este ejemplo se especifica con tres restricciones declarativas para garantizar la integridad: trabajos_primarios, empleado_extranjero y proyecto_extranjero. Estas restricciones son una restricción a nivel de tabla donde la primera especifica la clave principal y la segunda y tercera especifican la clave externa de la tabla Works_on. Además, las claves externas definen las tablas Empleado y Proyectos como tablas de referencia, y sus columnas Id y Número como la clave principal correspondiente de la columna del mismo nombre en la tabla Works_on.

La cláusula FOREIGN KEY se puede omitir si la clave externa se define como una restricción a nivel de tabla porque la columna a la que se aplica la restricción es una "lista" implícita de columnas de clave externa, y palabra clave REFERENCIAS es suficiente para indicar de qué tipo de restricción se trata. Una tabla puede contener un máximo de 63 restricciones de CLAVE EXTRANJERA.

La definición de claves foráneas en las tablas de la base de datos impone la definición de otra limitación importante Para asegurar la integridad: integridad referencial.

Integridad referencial aplica reglas para inserciones y actualizaciones en tablas que contienen una clave externa y una restricción de clave primaria correspondiente. El ejemplo anterior tiene dos de estas restricciones: Foreign_employe y Foreign_project. La cláusula REFERENCES del ejemplo define las tablas Empleados y Proyectos como tablas de referencia (principales).

Si se especifica integridad referencial para dos tablas, no siempre será posible modificar los valores en la clave primaria y la clave externa correspondiente. Las siguientes secciones analizan cuándo esto es posible y cuándo no.

La modificación de valores de clave externa o primaria puede causar problemas de cuatro maneras. Todos estos casos se demostrarán utilizando la base de datos SampleDb. Los dos primeros casos implican modificaciones en la tabla de referencia y los dos últimos implican modificaciones en la tabla principal.

Posibles problemas de integridad referencial: caso 1

Insertar nueva linea a la tabla Works_on con el número de empleado 11111. La declaración Transact-SQL correspondiente tiene este aspecto:

UTILICE SampleDb; INSERTAR EN VALORES de Works_on (11111, "p1", "qwe", GETDATE())

Al insertar una nueva fila en una tabla secundaria, se usa Works_on nuevo numero empleado EmpId para el cual no hay ningún empleado (y número) coincidente en la tabla principal de empleados. Si se define la integridad referencial para ambas tablas, como se hizo anteriormente, el Motor de base de datos no permitirá que se inserte una nueva fila con ese número EmpId.

Posibles problemas de integridad referencial: caso 2

Cambiando el número de empleado 9502 en todas las filas de la tabla Works_on al número 11111. La declaración Transact-SQL correspondiente se ve así:

En este caso, el valor de clave externa existente en la tabla Works_on de referencia se reemplaza con un nuevo valor que no tiene un valor coincidente en la tabla principal Empleado. Si se define la integridad referencial para ambas tablas, entonces el sistema de gestión de la base de datos no permitirá la modificación de una fila con este número EmpId en la tabla Works_on.

Posibles problemas de integridad referencial: caso 3

Reemplazar el valor 9502 del número de identificación del empleado por el valor 22222 en la tabla Empleado. La declaración Transact-SQL correspondiente se vería así:

Este caso intenta reemplazar el valor de Id. de empleado existente 9502 con el valor 22222 solo en la tabla Empleado principal, sin cambiar los valores de Id. correspondientes en la tabla Works_on de referencia. El sistema no permite esta operación. La integridad referencial no permite la existencia en la tabla de referencia (la tabla para la cual oferta EXTRANJERA KEY define una clave externa) valores para los cuales no existe ningún valor correspondiente en la tabla principal (la tabla para la cual la cláusula PRIMARY KEY define la clave principal). De lo contrario, dichas filas en la tabla de referencia serían "huérfanas". Si se permitiera la modificación de la tabla Empleado descrita anteriormente, entonces las filas de la tabla Works_on con un valor de Id de 9502 serían huérfanas. Por tanto, el sistema no permite dicha modificación.

Posibles problemas de integridad referencial - Caso 4

Eliminar una fila en la tabla Empleado con un valor de Id. de 9502.

Este caso es similar al caso 3. Si se realizara esta operación, la fila con el valor Id para el cual hay valores coincidentes en la tabla de referencia (secundaria) Works_on se eliminaría de la tabla Empleado.

Opciones de BORRAR y ACTUALIZAR

El motor de base de datos puede reaccionar de manera diferente ante un intento de eliminar o modificar una clave principal. Si intenta actualizar los valores de una clave externa, todas esas actualizaciones serán inconsistentes con la clave primaria correspondiente y la base de datos se negará a realizar esas actualizaciones y mostrará un mensaje de error.

Pero si intenta realizar actualizaciones de los valores de la clave principal que provocan una inconsistencia en la clave externa correspondiente, el sistema de base de datos puede reaccionar de manera bastante flexible. En general, hay cuatro opciones que determinan cómo puede responder el sistema de base de datos:

SIN ACCIÓN

Solo se modifican (actualizan o eliminan) aquellos valores de la tabla principal que no tienen valores correspondientes en la clave externa de la tabla secundaria (de referencia).

CASCADA

Se permite la modificación (actualización o eliminación) de cualquier valor en la tabla principal. Cuando actualiza un valor de clave principal en una tabla principal o cuando elimina una fila completa que contiene valor dado, en la tabla secundaria (de referencia), todas las filas con los valores de clave externa correspondientes se actualizan (es decir, se eliminan).

ESTABLECER NULO

Se permite la modificación (actualización o eliminación) de cualquier valor en la tabla principal. Si la actualización de un valor en una tabla principal provoca una inconsistencia en una tabla secundaria, el sistema de base de datos establece la clave externa de todas las filas correspondientes en la tabla secundaria en NULL. Lo mismo sucede si se elimina una fila de una tabla principal, lo que provoca una inconsistencia en la tabla secundaria. Por lo tanto, se ignoran todas las inconsistencias de los datos.

ESTABLECER POR DEFECTO

Similar a la opción SET NULL, pero con una excepción: a todas las claves externas correspondientes a la clave principal que se está modificando se les asigna un valor predeterminado. No hace falta decir que después de la modificación, la clave principal de la tabla principal aún debe contener el valor predeterminado.

EN Lenguaje Transact-SQL Se admiten las dos primeras de estas opciones. El uso de las opciones AL ELIMINAR y AL ACTUALIZAR se muestra en el siguiente ejemplo:

UTILICE SampleDb; CREAR TABLA Works_on (EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, Job NCHAR (15) NULL, EnterDate DATE NULL, CONSTRAINT Primary_works PRIMARY KEY (EmpId, ProjectNumber), CONSTRAINT Foreign_employee FOREIGN KEY (EmpId) REFERENCIAS Empleado (Id) AL ELIMINAR CASCADA, RESTRICCIÓN proyecto_extranjero CLAVE EXTRANJERA (Número de proyecto) REFERENCIAS Proyectos (Número) AL ACTUALIZAR CASCADA);

Este ejemplo crea la tabla Works_on usando las opciones ON DELETE CASCADE y ON UPDATE CASCADE. Si la tabla Works_on está cargada con valores, cada eliminación de una fila en la tabla Empleado provocará una eliminación en cascada de todas las filas de la tabla Works_on que tengan valores de clave externa que coincidan con los valores de clave principal de las filas que se eliminan. en la tabla Empleado. De manera similar, cada actualización del valor de la columna Número de la tabla Proyecto provocará la misma actualización de todos los valores correspondientes de la columna NúmeroProyecto de la tabla Works_on.

El tipo de lenguaje utilizado en un DBMS particular se llama dialectoSQL. Por ejemplo, el dialecto Oracle DBMS se llama P.L./ SQL; MSSQLServer y DB2 usan dialecto Tramitar- SQL; en Interbase y Firebird– isql. Cada dialecto SQL es compatible hasta cierto punto con el estándar SQL, pero puede tener diferencias y extensiones de lenguaje específicas, por lo que para conocer la sintaxis de una declaración SQL en particular, primero debe mirar Ayuda SGBD específicos.

Para operaciones en bases de datos y tablas, el estándar SQL proporciona los siguientes operadores:

La siguiente es la sintaxis SQL92 para estas declaraciones. Dado que su sintaxis en el DBMS puede diferir de la estándar, se recomienda consultar el sistema de ayuda del DBMS al realizar trabajos de laboratorio.

Los nombres de los objetos de la base de datos (tablas, columnas, etc.) pueden constar de caracteres alfanuméricos y un carácter de subrayado. Los caracteres especiales (@$#, etc.) suelen indicar un tipo especial de tabla (sistema, temporal, etc.). No se recomienda utilizar caracteres nacionales (rusos), espacios y palabras reservadas en los nombres, pero si aún se utilizan, dichos nombres deben escribirse entre comillas ".." o en corchetes [..].

Además, al describir las construcciones de sentencias SQL, se utilizará la siguiente notación: las partes opcionales de la construcción se escriben entre corchetes; diseños alternativos están separados por una barra vertical | ; las llaves () resaltan los bloques lógicos de la estructura; elipsis Indica que la parte anterior de la estructura se puede repetir muchas veces. Las estructuras "ampliables" están escritas entre paréntesis angulares< >.

Creando una base de datos

CREAR BASE DE DATOS nombre_base de datos

Eliminar una o más bases de datos

SOLTAR BASE DE DATOS nombre_base de datos[,nombre_base de datos…]

Declarar la base de datos actual

USAR Nombre_base de datos –- en SQL Server y MySQL

ESTABLECER BASE DE DATOS Nombre_ bases_ datos – en pájaro de fuego

Creando una tabla

CREAR TABLA Nombre de la tabla (

<описание_столбца> [, <descripción_columna> |

<restricción de integridad de tabla>…]

< descripción_columna>

Nombre de columna TIPO

(SIN ACCIÓN|CASCADA|ESTABLECER PREDETERMINADO|ESTABLECER NULO)]

TIPO La columna puede ser un tipo de datos estándar (ver Tabla 1) o un nombre de dominio (ver sección 6.2).

Algunos DBMS le permiten crear columnas calculadas (calculado columnas). Estas son columnas virtuales, cuyo valor no se almacena en la memoria física, sino que el servidor DBMS lo calcula cada vez que se accede a esta columna utilizando la fórmula especificada al declarar esta columna. La fórmula puede incluir valores de otras columnas de esa fila, constantes, funciones integradas y variables globales.

La descripción de una columna calculada en SQL Server es:

<описание_столбца> Nombre de columna COMO expresión

Descripción de la columna calculada en pájaro de fuego tiene la forma:

<описание_столбца> Nombre de columna COMPUTADO POR<expresión>

El DBMS MySQL 3.23 no admite columnas calculadas.

< >

RESTRICCIÓN nombre_restricción_integridad

(ÚNICA|CLAVE PRIMARIA)( lista_de_columnas_formando_clave)

|CLAVE EXTRANJERA ( lista_ columnas_FK)

REFERENCIAS Nombre de la tabla(lista_columnas_PAQUETE)

(SIN ACCIÓN|CASCADA|ESTABLECER PREDETERMINADO|ESTABLECER NULO)]

(SIN ACCIÓN|CASCADA|ESTABLECER PREDETERMINADO|ESTABLECER NULO)]

|COMPROBAR ( condición_prueba)

Algunos DBMS permiten la declaración de tablas temporales (que existen sólo durante una sesión). En SQL Server, los nombres de las tablas temporales deben comenzar con # (tablas temporales locales visibles solo para el usuario que las creó) o ## (tablas globales visibles para todos los usuarios); MySQL usa la palabra clave TEMPORARY para crear tablas temporales, por ejemplo:

CREARTEMPORARIOMESA... (para obtener más sintaxis, consulte CREAR TABLA).

Cambiar la estructura de la tabla

Se utiliza para cambiar el tipo de columna de tablas existentes, agregar y eliminar columnas y restricciones de integridad.

ALTERAR TABLA Nombre de la tabla

Cambiar un tipo de columna (en SQLServer y Firebird)

ALTERAR COLUMNA Nombre de columna nuevo_TIPO

Cambiar el tipo de columna, el nombre y las restricciones (en MySQL)

CAMBIAR COLUMNA Nombre de columna <descripción_columna>

Agregar una columna regular o calculada

|AÑADIR<descripción_columna>

Agregar una restricción de integridad

| AGREGAR

<restricción de integridad de tabla>

Eliminar una columna

| COLUMNA DE GOTA Nombre de columna

Eliminar una restricción de integridad

|RESTRICCIÓN DE CAÍDA nombre_restricción_integridad

Habilitar o deshabilitar la verificación de restricciones de integridad

Servidor BMSSQL

|(COMPROBAR|NO COMPROBAR) RESTRICCIÓN

{Lista_de_nombres_de_restricciones_de_integridad|TODOS)

Eliminar una tabla

MESA DE CAÍDA Nombre de la tabla



A continuación, veremos cómo declarar restricciones de integridad declarativas al crear nuevas tablas con el comando CREATETABLE o cambiar la estructura de tablas existentes con el comando ALTERTABLE (se describen con más detalle en la sección 4.2).

1. Disponibilidad obligatoria de datos (valores NULOS)

Declarado por la palabra NULL (la columna puede tener celdas vacias) o NOT NULL (columna obligatoria). El valor predeterminado es NULO.

Ejemplo de creación de la tabla 7:

CREARMESA Clientela(

Nombre del cliente NVARCHAR(60) NO NULO,

Fecha de nacimiento FECHA NULO,

Teléfono CARBONIZARSE(12));

2. Valor predeterminado (POR DEFECTO)

Se puede establecer un valor predeterminado para cada columna de la tabla. Si se modifica una celda y no se especifica su nuevo valor, el servidor inserta un valor predeterminado. El valor predeterminado puede ser NULL, una constante, una expresión evaluada o una función del sistema.

Veamos un ejemplo de creación de una tabla. Órdenes(Órdenes). Columna Fecha de pedido por defecto es la fecha actual, y la columna Cantidad(cantidad) por defecto es 0.

CREAR TABLAÓrdenes(

Número de pedido ENT NO NULO, -- número de orden

Fecha de pedido FECHA HORA NO NULO-- fecha del pedido

POR DEFECTO Obtener fecha()

La función GetDate() devuelve la fecha actual 8

Cantidad PEQUEÑO NO NULO-- cantidad de bienes, POR DEFECTO 0);

3. Declaración de claves primarias (CLAVE PRIMARIA)

Una clave primaria simple se declara con las palabras PRIMARYKEY al crear una tabla. Por ejemplo,

CREARMESA Personal( -- tabla "Empleados"

Núm. de tabulación ENTPRIMARIOLLAVE, -- clave primaria

WNombre NVARCHAR(40) NONULO, -- nombre completo

... -- descripción de otras columnas);

Una clave primaria compuesta se declara de manera diferente:

-- método 1 (anuncioPAQUETEal crear una tabla)

CREAR TABLA Clientela(

PasaSeria NUMÉRICO(4,0)NO NULO,-- serie pasaportes

NúmeroPas NUMÉRICO(6,0)NO NULO,-- número pasaportes

Nombre NVARCHAR(40)NO NULO,

Teléfono CARBONIZARSE(12),

-- declaración de una clave primaria compuesta

RESTRICCIÓN Clientes_PK

PRIMARIO LLAVE(PasSeria,PasNumber));

-- método 2(PAQUETEdeclarado después de la creación de la tabla)

-- primero crea una tabla sinPAQUETE

CREAR MESA Clientela(

PasaSeria NUMÉRICO(4,0)NO NULO,--serie pasaportes

NúmeroPas NUMÉRICO(6,0)NO NULO,--número pasaportes

Nombre del cliente NVARCHAR(40)NO NULO,

Teléfono CARBONIZARSE(12));

-- modificación mesasagregar RK

ALTERAR MESA Clientela

AGREGAR RESTRICCIÓN Clientes_PK

PRIMARIO LLAVE(PasSeria,PasNumber);

4. Singularidad de las columnas. (ÚNICO)

Como Primario Llave indica que una columna o grupo de columnas no puede contener valores duplicados, pero no es PAQUETE. Todas las columnas declaradas ÚNICAS deben ser NOTNULL. Un ejemplo de una declaración de columna única simple:

CREAR TABLA Estudiantes(

Código SC ENT PRIMARIO LLAVE, -- sustituto RK

FIO NVARCHAR(40) NO NULO, -- nombre completo

Libro de registro CARBONIZARSE(6) NO NULO ÚNICO); -- Número de registro

Ejemplo de declaración de campo único compuesto:

CREAR MESA Personal(-- mesa " Trabajadores"

Núm. de tabulación INT CLAVE PRIMARIA, -- hoja de tiempo número

WNombre NVARCHAR(40) NO NULO, -- nombre completo

PasaSeria NUMÉRICO(4,0) NO NULO, -- serie pasaportes

NúmeroPas NUMÉRICO(6,0) NO NULO, -- número pasaportes

-- anuncio compuesto único campos

RESTRICCIÓN Personal_UNQ ÚNICO(PasSeria,PasNumber));

5. Restricciones en valores columna (CONTROLAR)

Esta restricción le permite especificar un rango, lista o "máscara" de valores lógicamente válidos para una columna.

Ejemplo de creación de tabla Trabajadores(Trabajadores):

CREARMESA Trabajadores(

-- Números de personal de 4 dígitos

Núm. de tabulación INT CLAVE PRIMARIA

CONTROLAR(Núm. de tabulación ENTRE 1000 Y 9999),

Nombre VARCHAR(60) NO NULO, -- nombre completo empleado

-- pisocarta " metro" o " y"

Alta burguesía CARBONIZARSE(1) NO NULO

CONTROLAR(Alta burguesía EN("m","f")),

Edad mínima 14 años

Edad PEQUEÑO NO NULO CONTROLAR(Edad>=14),

--Número de certificado de seguro de pensiones (por máscara)

PensionCert CARBONIZARSE(14)

CONTROLAR(PensiónSert COMO ""));

Este ejemplo muestra diferentes tipos de cheques. El rango de valores aceptables está indicado por el constructo ENTRE…Y; condiciones normales (como para la columna Edad) usa signos de comparación =,<>, >, >=, <, <=, связанные при необходимости логическими операциямиAND,OR,NOT(например,Edad>=14Y Edad<=70); для указания списка допустимых значений используется предикатINи его отрицаниеNOTIN; конструкция

COMO máscara_valores_permitidos EXCEPTO lista_excepciones

se utiliza para establecer una máscara de valores válidos para columnas de cadena. La máscara utiliza dos caracteres especiales: "%" es una subcadena arbitraria y "_" es un carácter individual. La cláusula EXCEPT es opcional.

La condición de selección CHECK puede comparar los valores de dos columnas de la misma tabla y columnas de tablas diferentes.

Entonces nos familiarizamos con los tipos de datos, ahora mejoraremos las tablas de nuestro foro. Veámoslos primero. Y comencemos con la tabla de usuarios. Tenemos 4 columnas en él:

Id_user son valores enteros, lo que significa que el tipo será int, limitémoslo a 10 caracteres: int (10).
El nombre es un valor de cadena varchar, limitémoslo a 20 caracteres: varchar(20).
email es un valor de cadena varchar, limitémoslo a 50 caracteres: varchar(50).
La contraseña es un valor de cadena varchar, la limitaremos a 15 caracteres: varchar(15).

Todos los valores de campo son obligatorios, lo que significa que debe agregar el tipo NOT NULL.

id_user int (10) NO NULO
nombre varchar(20) NO NULO
correo electrónico varchar(50) NO NULO

La primera columna, como recordarás del modelo conceptual de nuestra base de datos, es la clave primaria (es decir, sus valores son únicos e identifican de forma única el registro). Es posible controlar la unicidad por uno mismo, pero no es racional. Hay un atributo especial en SQL para esto: AUTO_INCREMENT, que al acceder a la tabla para agregar datos, calcula el valor máximo de esta columna, aumenta en 1 el valor resultante y lo ingresa en la columna. Por lo tanto, se genera automáticamente un número único en esta columna y, por lo tanto, el tipo NOT NULL es redundante. Entonces, asignemos un atributo a la columna con la clave principal:


nombre varchar(20) NO NULO
correo electrónico varchar(50) NO NULO
contraseña varchar(15) NO NULA

Ahora necesitamos especificar que el campo id_user es la clave principal. Para hacer esto, SQL usa la palabra clave CLAVE PRINCIPAL(), el nombre del campo clave se indica entre paréntesis. Hagamos cambios:

ID_usuario int (10) AUTO_INCREMENT
nombre varchar(20) NO NULO
correo electrónico varchar(50) NO NULO
contraseña varchar(15) NO NULA
CLAVE PRIMARIA (id_user)

Entonces, la tabla está lista y su versión final se ve así:

Crear usuarios de tabla (
id_user int (10) AUTO_INCREMENT,
nombre varchar(20) NO NULO,
correo electrónico varchar(50) NO NULO,
contraseña varchar(15) NO NULA,
CLAVE PRIMARIA (id_user)
);

Ahora veamos la segunda tabla: temas. Razonando de manera similar, tenemos los siguientes campos:



id_autor int (10) NO NULO
CLAVE PRIMARIA (id_topic)

Pero en nuestro modelo de base de datos, el campo id_author es una clave externa, es decir solo puede tener los valores que están en el campo id_user de la tabla de usuarios. Para indicar esto en SQL hay una palabra clave CLAVE EXTRANJERA(), que tiene la siguiente sintaxis:

CLAVE EXTRANJERA (nombre_columna_que_es_clave_extranjera) REFERENCIAS nombre_tabla_padre (nombre_columna_padre);

Indiquemos que id_author es una clave foránea:

Id_topic int (10) AUTO_INCREMENT
nombre_tema varchar(100) NO NULO
id_autor int (10) NO NULO
CLAVE PRIMARIA (id_topic)
CLAVE EXTRANJERA (id_autor) REFERENCIAS usuarios (id_usuario)

La tabla está lista y su versión final se ve así:

Crear temas de tabla (
id_topic int (10) AUTO_INCREMENT,
nombre_tema varchar(100) NO NULO,

CLAVE PRIMARIA (id_topic),
CLAVE EXTRANJERA (id_autor) REFERENCIAS usuarios (id_usuario)
);

La última tabla que queda son las publicaciones. Aquí todo es similar, sólo dos claves foráneas:

Crear publicaciones de tabla (
id_post int (10) AUTO_INCREMENT,
texto del mensaje NO NULO,
id_author int (10) NO NULO,
id_topic int (10) NO NULO,
CLAVE PRIMARIA (id_post),
CLAVE EXTRANJERA (id_autor) REFERENCIAS usuarios (id_usuario),
CLAVE EXTRANJERA (id_topic) REFERENCIAS temas (id_topic)
);

Tenga en cuenta que una tabla puede tener varias claves externas, pero en MySQL solo puede haber una clave principal. En la primera lección eliminamos nuestra base de datos del foro, es hora de crearla nuevamente.

Lanzamos el servidor MySQL (Inicio - Programas - MySQL - MySQL Server 5.1 - MySQL Command Line Client), ingresamos la contraseña, creamos un foro de base de datos (crear foro de base de datos;), lo seleccionamos para usarlo (usar foro;) y creamos nuestros tres tablas:

Tenga en cuenta que un comando se puede escribir en varias líneas usando la tecla Enter (MySQL sustituye automáticamente el carácter de nueva línea ->), y solo después del delimitador (punto y coma) al presionar la tecla Enter se ejecuta la consulta.

Recuerde, si hizo algo mal, siempre puede eliminar una tabla o toda la base de datos usando la instrucción DROP. Corregir algo en la línea de comando es extremadamente inconveniente, por lo que a veces (especialmente en la etapa inicial) es más fácil escribir consultas en algún editor, por ejemplo el Bloc de notas, y luego copiarlas y pegarlas en una ventana negra.

Entonces, se crean las tablas, para asegurarnos de esto, recordemos el equipo. mostrar tablas:

Y finalmente, veamos la estructura de nuestra tabla de últimas publicaciones:

Ahora los significados de todos los campos de la estructura quedan claros, excepto el campo DEFAULT. Este es el campo de valor predeterminado. Podríamos especificar un valor predeterminado para alguna columna (o todas). Por ejemplo, si tuviéramos un campo llamado "Casado" y escribiéramos ENUM ("sí", "no"), entonces tendría sentido convertir uno de los valores en el valor predeterminado. La sintaxis sería:

Enumeración casada ("sí", "no") NOT NULL predeterminada ("sí")

Aquellos. esta palabra clave se escribe separada por un espacio después del tipo de datos y el valor predeterminado se indica entre paréntesis.

Pero volvamos a nuestras mesas. Ahora necesitamos ingresar datos en nuestras tablas. En los sitios web, normalmente se ingresa información en algunos formularios html, luego un script en algún lenguaje (php, java...) extrae estos datos del formulario y los ingresa en la base de datos. Lo hace a través de una consulta SQL para ingresar datos en la base de datos. Todavía no sabemos cómo escribir scripts en PHP, pero ahora aprenderemos cómo enviar consultas SQL para ingresar datos.

Para ello se utiliza el operador INSERTAR. Hay dos tipos de sintaxis que puede utilizar. La primera opción se utiliza para ingresar datos en todos los campos de la tabla:

INSERTAR EN VALORES nombre_tabla ("valor_primera_columna", "valor_segunda_columna", ..., "valor_última_columna");


Intentemos agregar los siguientes valores a nuestra tabla de usuarios:

INSERTAR EN LOS VALORES de los usuarios ("1","sergey", " [correo electrónico protegido]", "1111");

La segunda opción se utiliza para ingresar datos en algunos campos de la tabla:

INSERTAR EN nombre_tabla ("nombre_columna", "nombre_columna") VALORES ("valor_primera_columna", "valor_segunda_columna");


En nuestra tabla de usuarios, todos los campos son obligatorios, pero nuestro primer campo tiene la palabra clave AUTO_INCREMENT (es decir, se completa automáticamente), por lo que podemos omitir esta columna:

INSERTAR EN usuarios (nombre, correo electrónico, contraseña) VALORES ("valera", " [correo electrónico protegido]", "2222");

Si tuviéramos campos con tipo NULL, es decir. Opcional, también podríamos ignorarlos. Pero si intenta dejar un campo con el valor NOT NULL vacío, el servidor mostrará un mensaje de error y no completará la solicitud. Además, al ingresar datos, el servidor verifica las relaciones entre tablas. Por lo tanto, no podrá agregar un valor a un campo que sea una clave externa que no exista en la tabla relacionada. Verificará esto ingresando datos en las dos tablas restantes.

Pero primero, agreguemos información sobre algunos usuarios más. Para agregar varias líneas a la vez, solo necesitas enumerar los paréntesis con valores separados por comas:

Ahora ingresemos los datos en la segunda tabla: temas. Todo es igual, pero debemos recordar que los valores del campo id_author deben estar presentes en la tabla de usuarios:

Ahora intentemos agregar otro tema, pero con id_author, que no está en la tabla de usuarios (como agregamos solo 5 usuarios a la tabla de usuarios, entonces id=6 no existe):

El servidor arroja un error y dice que no puede ingresar dicha línea porque un campo que es una clave externa contiene un valor que no está en la tabla de usuarios relacionados.

Ahora agreguemos algunas filas a la tabla de publicaciones, recordando que tenemos 2 claves externas, es decir, id_author e id_topic, que ingresaremos, deben estar presentes en las tablas asociadas a ellos:

Entonces tenemos 3 tablas que contienen datos. Surge la pregunta: cómo ver qué datos están almacenados en las tablas. Esto es lo que haremos en la próxima lección.




Arriba