7.5 Control de restricciones de MySQL

Restricciones de integridad de la base de datos

(1) Integridad de la entidad

Hacer cumplir la integridad de la columna del identificador o clave principal en la tabla,
por ejemplo: restricción de clave principal, restricción única

(2) Integridad Referencial (Integridad Referencial)

La integridad referencial conserva las relaciones definidas entre las tablas cuando se eliminan e ingresan registros, y la integridad referencial garantiza que los valores clave sean coherentes en todas las tablas.

(3) Integridad definida por el usuario

Reglas comerciales definidas por el usuario, incluida la integridad del dominio. Incluyendo tipo, formato, rango de valores, etc.


Restricciones comunes en MySQL

1. Restricción de clave principal (CLAVE PRINCIPAL)

Se utiliza para definir la clave principal de la tabla básica, que actúa como un identificador único(不能为NULL,不能重复)

  • Definición de restricciones de columna ([[#1 clave principal única|columna única como clave principal]])
字段名 数据类型 [其它约束] PRIMARY KEY
  • Para la definición de restricciones de tabla ([[#2 claves primarias múltiples|columnas múltiples combinadas como claves primarias]])
PRIMARY KEY (列名[,列名])

(1) Clave principal única

[Ejemplo 7-18] Cree una tabla Stu y defina Sno como la clave principal de Stu.

CREATE TABLE Stu
Sno char(6) PRIMARY KEY,
Sname char(8),
Ssex char(2),
Zno varchar(20));

o

CREATE TABLE Stu
Sno char(6) NOT NULL,
Sname char(8),
Ssex char(2),
Zno varchar(20),
PRIMARY KEY(Sno)
);

(2) Múltiples claves primarias

[Ejemplo 7-20] Cree una tabla SC, la clave principal está compuesta por Sno y Cno.

create table sc
sno char(12),
cno char(10) , 
score int,
primary key(sno,cno)
);

(3) Agregar restricciones de clave principal a las tablas existentes

ALTER TABLE Stu
ADD PRIMARY KEY (Sno);

(4) Eliminar restricciones de clave principal existentes

ALTER TABLE Stu
DROP PRIMARY KEY;

2. Restricciones de clave externa (FOREIGN KEY)

La clave externa de la tabla secundaria se refiere a la clave principal de la tabla principal

[FOREIGN KEY (子表列名表)] REFERENCES 父表名(列名表)
[ on delete [ cascade | restrict | set null | no action ]]
[ on update [ cascade | restrict | set null | no action ]]

cascada: eliminación en cascada, es decir, eliminar la tabla de clave principal y eliminar la tabla de clave externa al mismo tiempo.

Si se elimina un departamento en la tabla de departamentos, si desea consultar la información del departamento correspondiente al número de departamento eliminado en la tabla de estudiantes, se informará un error, porque este departamento ya no existe, por lo tanto, elimine el departamento al conectarse. una tabla (tabla de clave principal), se deben eliminar otras tablas asociadas a ella.Esto explica el papel de las claves externas para mantener la consistencia e integridad de los datos. Por supuesto, por otro lado, si elimina los registros en la tabla de estudiantes, no afectará los datos en la tabla de departamentos y puede consultar el número de departamento correctamente. Por lo tanto, eliminar los datos en la tabla de clave externa no afecta la tabla de clave principal.

establecer nulo: cuando el valor es Establecer nulo, al eliminar el registro correspondiente en la tabla de clave principal, primero verifique si el registro tiene una clave externa correspondiente y, de ser así, establezca el valor de clave externa en la tabla secundaria en nulo

ninguna acción, restringir: predeterminado; significa rechazar la operación, si la tabla secundaria hace referencia a la clave principal en la tabla principal, cuando se elimina la clave principal de la tabla principal, la operación se rechazará

La diferencia entre NO ACTION y RESTRICT: solo en casos individuales y conducirá a la diferencia, el primero se ejecuta después de las acciones de otras restricciones, y el último tiene la prioridad más alta para ejecutar.

Ejemplo: Cree una tabla SC, defina Sno como una clave externa y haga referencia al sno de la tabla S

CREATE TABLE SC
(Sno char(6),
 Cno char(3),
 Score Int,
PRIMARY KEY (Sno, Cno),
FOREIGN key (Sno) REFERENCES S(Sno)
 )ENGINE=InnoDB;

Nota: el motor de almacenamiento MyISAM no admite claves externas


3. Restricción no nula (no nula)

注意:NULL不同于0、""、空格、'NULL'

(1) Gramática

属性名 数据类型 [NULL | NOT NULL]

(2) Ejemplos

Cree una tabla S y configure el campo Sname para que no esté vacío

CREATE TABLE S
(Sno char(6),
Sname char(8) NOT NULL,
Ssex char(2),
Sbirth date);

(3) Agregue una restricción no nula a un atributo de una tabla existente

Si establece una restricción no nula en el campo Sname en una tabla Stu ya creada
y usa modificar para modificarla, no puede usar ADD para aumentarla

ALTER TABLE S
MODIFY Sname char(8) not null;

4. La única restricción (ÚNICA)

Indica que el valor de una determinada columna o una combinación de varias columnas en la tabla básica debe ser único.
Al establecer una restricción ÚNICA, se deben considerar los siguientes factores:

  • Se permite que una mesa tenga 多个UNIQUE约束.
  • Un campo que satisface la restricción ÚNICA 允许取NULL值.
  • Las restricciones ÚNICAS se pueden definir en varios campos.
  • La restricción ÚNICA crea automáticamente un índice único en el campo especificado. Si elimina la restricción única, puede eliminar el índice directamente

(1) Un solo atributo

[Ejemplo 7-26] Cree una tabla Dept y defina Dname como la única restricción

CREATE TABLE Dept
(Dno char(6)PRIMARY KEY,
 Dname,varchar(20) UNIQUE,
 Tel char(13),
 Address varchar (20)
 );

(2) Múltiples atributos

[Ejemplo] Cree una tabla SC y defina Sno+Cno como la clave única.

CREATE TABLE SC
(Sno char(6),
Cno char(8),
Score int,
UNIQUE (Sno,Cno)
);

(3) La tabla ya ha sido modificada

ALTER TABEL S
MODIFY SNO char(20) NOT NULL UNIQUE;

(4) La diferencia entre CLAVE PRINCIPAL y ÚNICA

  • Solo puede haber una CLAVE PRIMARIA en una tabla básica, pero puede haber múltiples ÚNICOS
  • Para una columna o una combinación de varias columnas especificadas como PRIMARY KEY, ninguna de las columnas puede tener un valor NULL, y para la clave única restringida por UNIQUE, se permite NULL

5. Restricciones por defecto (DEFAULT)

Agregar un valor predeterminado a un campo

(1) Formato de sintaxis:

字段名 数据类型 [其它约束] DEFAULT 默认值

(2) Ejemplos

Cree una tabla de curso C y establezca la restricción de valor predeterminado en el campo up_limit del límite superior del número de candidatos del curso, y el valor predeterminado es un número entero de 100 personas.

CREATE TABLE C
(Cno char(8),
 Cname varchar(20),
 up_limit int default 100
);

6. Restricciones autocrecientes (AUTO_INCREMENT)

  • Es una restricción de integridad autoextendida. Cuando se inserta un nuevo registro en la tabla, el valor del campo generará automáticamente una identificación única.
  • Solo se puede crear una restricción en una tabla y debe ser 整型.

(1) Formato gramatical

列名 数据类型 AUTO_INCREMENT

(2) Ejemplos

Cree la tabla de departamentos y solicite que el número de departamento se incremente automáticamente.

CREATE TABLE Dept1
(Dno INT PRIMARY KEY AUTO_INCREMENT,
 Dname varchar(20) UNIQUE,
 Tel char(13),
 Address varchar (20)
);

这种递增的列必须为主键,AUTO_INCREMENT必须配合PRIMARY KEY


7. Puede nombrar restricciones (restricción)

(1) Denominación predeterminada

Si no se nombra, el sistema nombrará automáticamente la restricción al crear la restricción. Puede
usar la instrucción para ver los comandos utilizados para crear la tabla, incluidas las restricciones.

show create table <表名>

(2) Nombre personalizado

[Ejemplo 3-12] Cree una tabla SC que contenga las restricciones nombradas.

CREATE TABLE SC1
(Sno char(8),
 Cno char(4),
 Grade INT default 100 null,
 Primary key(sno,cno),
 constraint s_sc_fk
 Foreign key (sno) references Stu(sno)
 ) ;

7. Eliminar restricciones

(1) Eliminar la clave principal

alter table test 
drop primary key;

(2) Eliminar restricciones de clave externa

Descarte la restricción de clave externa llamada test_ibfk_1

alter table test 
drop foreign key test_ibfk_1;

(3) Eliminar la restricción única

alter table tableName 
drop index key_name;

(4) Eliminar restricciones predeterminadas

ALTER TABLE <数据表名> 
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

Supongo que te gusta

Origin blog.csdn.net/qq_25887493/article/details/123901488
Recomendado
Clasificación