[Operación y mantenimiento de front-end] ¡Abre los dos canales de Ren y Du! (Versión sin tonterías del comando mysql)

ORM

Algunos estudiantes que no conocen ORM pueden entender que es equivalente a usar código bajo para construir una interfaz. El código bajo es una herramienta más abstracta para hacer js, html y css. Aquí, significa herramientas más abstractas para hacer cosas nativas de MySQL.

Algunas personas dirán que uso ORM para escribir SQL cuando uso nodejs. No necesito aprender SQL nativo. Esto es completamente incorrecto. Puedes ir a su github para ver la herramienta ORM. Hay muchos problemas que no tiene. resuelto. Este tipo de cosas si no conoce SQL nativo, es muy difícil solucionar los problemas primero. Luego descubre, ¿espera a que otros solucionen el problema antes de conectarse?

También hay tablas conjuntas un poco más complicadas y el rendimiento de SQL escrito por ORM es deficiente.

Clasificación y características de las declaraciones SOL.

Al principio no presté mucha atención a esta clasificación y características, luego me confundí al aprender SQL, sentí que sería más fácil memorizar declaraciones SQL después de tener la clasificación.

El lenguaje SQL se divide en cuatro categorías: lenguaje de consulta de datos (DQL), lenguaje de manipulación de datos (DML), lenguaje de definición de datos (DDL) y lenguaje de control de datos (DCL).

Verá, todos estos son DxL, solo la x en el medio es diferente. D se refiere a Datos, que significa datos, y L se refiere a Idioma.

DQL

Así que veamos primero DQL. Q se refiere a consulta. Consulta

Nuestros SELECT, FORM y WHERE comunes son tablas de consulta y podemos entenderlas simplemente como declaraciones DQL.

SELECT select_list [ INTOnew_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUPBY group_by_expression ] 

DDL

La D en el medio se refiere a Definición, que entendemos simplemente como el lenguaje utilizado para crear bibliotecas y tablas.

CREATE创建 
ALTER修改 
DROP删除COMMENT 注释 

DML

M significa manipulación, simplemente lo entendemos como operaciones de agregar, actualizar y eliminar para cada dato en la tabla de datos.

INSERT添加 
UPDATE 更新 
DELETE删除 

DCL

C significa control, que simplemente significa transacciones en MySQL.

COMMIT提交 
ROLLBACK 回滚 
SET TRANSACTION设置当前事务的特性,它对后面的事务没有影响 

inicio de sesión mysql

Por ejemplo:

Ingrese el siguiente comando en la interfaz de línea de comando para iniciar sesión en MySQL:

mysql -u username -p 

Entre ellos, "nombre de usuario" es su nombre de usuario de MySQL y "-p" significa que debe ingresar una contraseña.

A continuación, se le solicitará su contraseña. Después de ingresar la contraseña y presionar Enter, si el inicio de sesión es exitoso, verá el mensaje MySQL, que indica que ha iniciado sesión exitosamente en el servidor MySQL.

Si no inicia sesión en esta máquina, se requiere el parámetro -h.

"-h" es una opción en el inicio de sesión de la línea de comando MySQL, que se utiliza para especificar el nombre de host o la dirección IP del servidor de base de datos MySQL.

DDL

Crear base de datos

Crear base de datos directamente

Sintaxis: tenga en cuenta que las declaraciones entre corchetes son opcionales.

CREATE DATABASE [IF NOT EXISTS] 数据库名 

Aunque es opcional recomiendo agregarlo, de lo contrario se reportará un error si los datos no existen.

En comparación con js, en realidad es una base de datos nueva y nueva orientada a objetos.

Cree una base de datos especificando el juego de caracteres

En 5.7, el juego de caracteres predeterminado de MySQL solo admite inglés, por lo que el juego de caracteres generalmente se establece en utf8 para admitir todos los idiomas. El valor predeterminado de MySQL 8 es utf8mb4, debemos usar 8. La gente ha dejado oficialmente de mantener 5.7.

Aquí hay una breve charla sobre la diferencia entre utf8 y utf8mb4:

UTF-8 y UTF8MB4 son dos conjuntos de caracteres en MySQL.

  • UTF-8: este es un conjunto de caracteres Unicode común que puede representar la mayoría de los caracteres, pero no puede representar algunos caracteres especiales (como los caracteres Emoji).
  • UTF8MB4: este es un conjunto de caracteres UTF-8 extendido que puede representar todos los caracteres Unicode, incluidos los caracteres Emoji.

Cuando necesite almacenar más caracteres, especialmente caracteres Emoji, se recomienda utilizar el juego de caracteres UTF8MB4. Cuando usa el juego de caracteres UTF8MB4, necesita usar 4 bytes para almacenar un carácter, pero con el juego de caracteres UTF-8, solo necesita usar 3 bytes. Por lo tanto, si su almacenamiento de datos necesita almacenar más caracteres, el uso del juego de caracteres UTF8MB4 puede generar más sobrecarga de espacio.

gramática:

CREATE DATABASE [IF NOT EXISTS] 数据库名 CHARACTER 字符集 

En comparación con js, en realidad es una nueva base de datos orientada a objetos, y luego, ¿cuál es el conjunto de caracteres del parámetro?

Reglas de clasificación

Ilustremos las reglas de clasificación de datos de utf8_general_ci y utf8_bin especificadas por el juego de caracteres utf8:

  • utf8_general_ci se refiere al sentido poco claro de mayúsculas y minúsculas, a y A se considerarán consistentes en el conjunto de caracteres.
  • utf8_bin necesita ser distinguido

gramática:

CREATE DATABASE [IF NOT EXISTS] 数据库名 CHARACTER 字符集 COLLATE utf8_bin 

En comparación con js, esto consiste en pasar el juego de caracteres y las reglas de clasificación como parámetros.

Ver base de datos

Ver todas las bases de datos

SHOW databases 

Ver la base de datos especificada

Puede ver información como declaraciones de creación de tablas y métodos de codificación.

SHOW CREATE DATABASE 数据库名 

Modificar base de datos

Esto rara vez se usa y siento que cambiarlo es un gran problema.

Sólo puede modificar el juego de caracteres y la clasificación de la base de datos, pero no el nombre de la base de datos.

gramática:

ALTER DATABASE 数据库名 CHARACTER SET 字符集 [COLLATE 排序规则] 

En comparación con js, cambia el valor del objeto, que es un método de establecimiento para cambiar el valor interno.

Eliminar base de datos

gramática:

DROP DATABASE 数据库名 

En comparación con js, es para permitir que el sistema recolecte basura los objetos de instancia que usted crea.

Usar base de datos

Ver la base de datos en uso

gramática

SELECT DARAVASE() 

Cambiar base de datos

USE 数据库名 

Hoja de operación

Crear mesa

CREATE TABLE 表名 (字段名1 数据类型,字段名2 数据类型,....) 

En comparación con js, es similar a la creación orientada a objetos de una instancia de una tabla: los parámetros pasados ​​a la instancia son el nombre del campo y el tipo de datos.

Por ejemplo:

CREATE TABLE student {id INT,name VARCHAR(20),birthday date
} 

Aquí clasificamos todos los tipos de datos:

entero

Comencemos con el tipo de datos más básico, el número entero. Primero, use una tabla para resumir:

tipo de datos Número de bytes mínimo firmado máximo firmado mínimo sin firmar valor máximo sin firmar
PEQUEÑO 1 -128 127 0 255
PEQUEÑO 2 -32768 32767 0 65535
MEDIO 3 -8388608 8388607 0 16777215
EN T 4 -2147483648 2147483647 0 4294967295
EMPEZANDO 8 -9223372036854775808 9223372036854775807 0 18446744073709551616

De forma predeterminada, los números enteros son positivos y negativos. Si necesita un número positivo puro, agregue la palabra clave sin signo.

punto flotante

tipo de datos Número de bytes Observación
flotar 4 Punto flotante de precisión simple
doble 8 Punto flotante de doble precisión

Tenga en cuenta aquí que el tipo de punto flotante puede indicar cuántas

CREATE TABLE test_float (num float(5, 2)
) engine=innodb charset=utf8; 

A partir de este resultado, resumimos las reglas de uso de float(M,D) y double(M,D):

  • D representa la precisión después del punto decimal de los datos de punto flotante, si excede los D dígitos, se redondeará, es decir, 1,233 se redondeará a 1,23 y 1,237 se redondeará a 1,24.
  • M representa el número total de dígitos en datos de punto flotante, D = 2 significa que se admiten un total de cinco dígitos, es decir, solo se admiten tres dígitos antes del punto decimal.

Tipo de punto fijo

El tipo de punto fijo es decimal y su uso es el mismo que el número de punto flotante anterior.

  • Las reglas de decimal(M,D) son las mismas que las de float/double, pero la diferencia es que float/double tiene por defecto la precisión real cuando no se especifican M y D, mientras que decimal tiene por defecto decimal(10, 0) cuando M y D no están especificados.

tipo de fecha

A continuación, echemos un vistazo a los tipos de fechas en MySQL. MySQL admite cinco formas de tipos de fechas: fecha, hora, año, fecha y hora. Use una tabla para resumir estos cinco tipos de fechas:

tipo de datos Número de bytes Formato Observación
fecha 3 aaaa-MM-dd Almacenar valor de fecha
tiempo 3 HH:mm:ss Almacenar horas, minutos y segundos.
año 1 yyyy Años de almacenamiento
fecha y hora 8 aaaa-MM-dd HH:mm:ss Fecha y hora de la tienda
marca de tiempo 4 aaaa-MM-dd HH:mm:ss Almacenar fecha y hora, se puede utilizar como marca de tiempo

Tipos de caracteres: tipos char y varchar

Char es complicado, almacena bytes, pero un carácter chino no corresponde a un byte. Varchar se basa en caracteres, por lo que normalmente usamos varchar.

1.char es una cadena de longitud fija, su rango de longitud es 0-255 y no tiene nada que ver con el método de codificación. No importa cuál sea la longitud real del carácter, se almacenará de acuerdo con la longitud especificada. no es suficiente, se llenará con espacios, varchar es una cadena de longitud variable. El rango de longitud en la base de datos codificada en utf8 es 0-21844
2. El número real de bytes ocupados por char es el número de bytes ocupados por los caracteres almacenados, y el número real de bytes ocupados por varchar son los caracteres almacenados +1 o +2 o + 3
3. MySQL procesará todos los espacios finales cuando procese datos de tipo char, pero no datos de tipo varchar.

Ver tabla

Ver todas las tablas

show tables 

Ver estructura de la tabla

DESC 表名 

Ver la declaración de creación de la tabla

SHOW CREATE TABLE 表名; 

El motor predeterminado para la creación de tablas es innodb, los datos predeterminados se completan con valores nulos y la clasificación predeterminada no distingue entre mayúsculas y minúsculas.

Copiar estructura de tabla

gramática:

CREATE TABLE 新表名 LIKE 旧表名 

Eliminar tabla

DROP TABLE 表名 

DML

Insertar registro

INSERT INTO 表名 (字段名1,字段名2...) VALUES (值1,值2...) 

Tenga en cuenta que, a excepción de los tipos numéricos, los valores de otros tipos de campos deben estar entre comillas.

replicación de gusanos

Con base en los datos existentes, copie los datos originales e insértelos en la tabla correspondiente.

Tenga en cuenta que debe crear una tabla con la misma estructura que la tabla de origen para copiar.

INSERT INTO 表名1 SELECT * FROM 表名2 

Actualizar registro de tabla

Actualizaciones incondicionales

UPDATE 表名 SET 字段1=值1[字段2=值2...] 

El valor de toda la columna cambiará.

Actualizar con condiciones

UPDATE 表名 SET 字段1=值1[字段2=值2...][WHERE 条件] 

Eliminar el registro

Eliminar condicionalmente

Eliminar ciertas filas de datos:

DELETE FROM 表名 WHERE 条件 

Eliminar sin condiciones

gramática

DELETE FROM 表名 

Se eliminarán todos los datos de la tabla.

Lenguaje de consulta de datos DQL

Consulta de tabla única

consulta sencilla

Consultar todos los datos de la tabla.

gramática

SELECT * FROM 表名 

Comparado con js, esta es la declaración de bucle for

const result = [];
for(let i = 0; i < 学生表数组.length; i++) {result.push(学生表数组[i])
}
return result; 

Consultar todos los datos de una columna específica de la tabla

Por supuesto, puedes consultar campos específicos:

SELECT 字段名1,字段名2,...字段名n FROM 表名 

Comparado con js, esta es la declaración de bucle for

// 下面的pick函数,就是从一个对象里取对应属性名的函数
// 很多工具库都有,比如loadash,自己写一个也很简单
const result = [];
for(let i = 0; i < 学生表数组.length; i++) {result.push(pick(学生表数组[i], ...所有字段))
}
return result; 

consulta de alias

El alias consiste en dar un nombre personalizado al nombre de la columna, normalmente utilizamos la palabra clave AS para lograrlo.

declaración

SELECT 字段名1 AS 别名,字段2 AS 别名... FROM 表名 AS 表的别名 

Eliminar valores duplicados

Al consultar la columna especificada, si hay datos duplicados en la columna especificada, se mostrarán de forma predeterminada.

SELECT DISTINCT 字段名 FROM 表名 

Por ejemplo, los datos que consulta:

SELECT DISTINCT name FROM student 

filtrará todas las filas con el mismo campo de nombre

Los resultados de la consulta participan en los cálculos.

En la declaración de consulta, la columna consultada puede realizar operaciones matemáticas (suma, resta, multiplicación y división) con otros valores. Los resultados de la operación solo afectarán la visualización y no afectarán los datos de la tabla.

gramática

SELECT 列名1 + 固定值 FROM 表名
SELECT 列表1 + 列名2 FROM 表名 

Lo anterior se limita a la suma de números, por ejemplo tenemos una tabla que es

Luego agregamos 5 años en la columna de edad, luego se mostrará

Por supuesto, también puede utilizar alias para que los nombres de las columnas se vean mejor.

A continuación, por cierto, las columnas y la suma de columnas también se encuentran entre ellos.

operador de comparación

En las condiciones de consulta, puede utilizar una variedad de operadores de comparación para expresar las condiciones de la consulta.

Por ejemplo:

  • = igual a -> mayor que
  • < menos que
  • <= menor o igual que ->= mayor o igual que
  • <> o
  • != no es igual a

Operadores logicos

  • y o && se cumplen múltiples condiciones al mismo tiempo
  • o o || se cumple una de varias condiciones
  • no o! insatisfecho

Consulta dentro del rango especificado en

gramática

SELECT 字段名 FROM 表名 WHERE 字段 [not] in (数据1,数据2...) 

consulta difusa

gramática

SELECT * FROM 表名 WHERE 字段名 like “通配符字符串” 
  • % significa 0 o más caracteres (cualquier número de caracteres)
  • _ representa un personaje

La consulta es nula.

Para consultar datos para los cuales un campo está vacío (nulo), en lugar de usar = null (nulo no es igual a ningún valor), use is null en su lugar.

Por ejemplo:

SELECT * FROM student WHERE english IS null 

clasificar

La declaración de clasificación se ejecuta después de la declaración SELECT

gramática

SELECT 字段名 FROM 别名 [WHERE 条件] ORDER BY 字段名 [ASC|DESC] 
  • Orden ascendente predeterminado de ASC
  • DESC orden descendente

función de una sola línea

Una función de una sola fila se refiere a calcular cada fila de datos y obtener una fila de resultados de salida.

función numérica

abdominales(x)

Encuentra el valor absoluto

Por ejemplo

SELECT ABS(-1) -- 返回1 

techo(x)

Redondeado

Por ejemplo

SELECT CEIL(1.5) --返回2 

piso(x)

Redondear a la baja

ronda(x)

redondeo

Funciones de cadena

concatenación(s1, s2,…sn)

Las cadenas s1, s2 y otras cadenas se combinan en una sola cadena

localizar(s1,s)

Obtenga la posición inicial de s1 de la cadena s

inferior(es)

Cambie todas las letras de la cadena s a letras minúsculas

superior(es)

Convertir cadena a mayúsculas

reemplazar(s, s1, s2)

Reemplace la cadena s2 con la cadena s y encuentre la cadena s1

substr(s, inicio, longitud)

Interceptar una subcadena de longitud longitud desde la posición inicial de la cadena s

adornos

Eliminar espacios iniciales y finales

función agregada

La consulta de la función de agregación es una consulta vertical. Calcula el valor de una columna y devuelve un valor de resultado. La función de agregación ignora los valores nulos.

contar

Cuente el número de registros en la columna especificada. Los registros que sean NULL no se contarán.

SUMA

Calcule la suma numérica de la columna especificada. Si no es de tipo numérico, el resultado del cálculo es 0

MÁXIMO

Calcular el valor máximo de la columna especificada.

MÍNIMO

Calcular el valor mínimo de la columna especificada.

AVG

Calcule el promedio de la columna especificada. Si no es de tipo numérico, el resultado del cálculo es 0

consulta de grupo

La consulta de grupo se refiere al uso de la instrucción GROUP BY para agrupar la información de la consulta, con los mismos datos que un grupo.

El orden de ejecución de la declaración GROUP BY es después de la declaración WHERE y antes de la declaración SELECT.

gramática

SELECT 字段1,字段2...FROM 表名 GROUP BY 分组字符安 [HAVING 条件] 

GROUP BY agrupa el mismo contenido en los resultados del campo de grupo como un grupo

Ejemplo

SELECT * FROM student3 GROUP BY age 

Agrupar a personas de la misma edad en un grupo.

El uso anterior es incorrecto: el propósito de la agrupación es para estadísticas y generalmente se usa junto con funciones agregadas.

Por ejemplo:

SELECT SUM(math), sex FROM student GROUP BY sex; 

Comparación entre DÓNDE y TENER

  • Tener es filtrar los datos después de agrupar, y dónde está antes de agrupar.
  • Las funciones agregadas se pueden usar en la declaración de tener, pero las funciones agregadas no se pueden usar después de dónde.

límite

LIMIT sirve para limitar el número de registros de consulta y debe colocarse al final de la declaración SQL.

gramática:

LIMIT offset, length;或者 limit length 

offset es el desplazamiento, que puede considerarse como el número de registros omitidos

Resumir el orden de escritura y el orden de ejecución de las declaraciones de consulta.

Orden de escritura

SELECCIONE el campo DEL nombre de la tabla DONDE condición GRUPO POR el campo TENIENDO condición ORDENAR POR el campo LÍMITE de desplazamiento, longitud

Orden de ejecución

  • del nombre de la tabla
  • donde condición
  • agrupar por campo
  • teniendo condición
  • seleccionar campo
  • ordenar por campo
  • límite

limitaciones y estrategias

restricciones de clave primaria

El papel de la clave primaria

Se utiliza para identificar de forma única un registro, como el número de identificación de una persona. Cada tabla debe tener una clave principal y cada tabla solo puede tener una clave principal.

Por lo general, el campo comercial no se utiliza como clave principal. Se diseña un campo de identificación para cada tabla por separado, y la identificación se usa como clave principal. La clave principal la utilizan la base de datos y el programa, no el cliente final. así que no importa si la clave primaria no tiene significado. Lo principal es no repetirla, solo que no esté vacía.

Agregar clave principal al crear una tabla

create table stu1 (id int primary key,name varchar(20)
) 
create table stu1 {id int,name varchar(20),primary key(id)
} 

Estrategia de incremento automático de clave principal

create table stu1 (id int primary key auto_increment,name varchar(20)
) 

restricción no nula

NOT NULL, lo que indica que esta columna es obligatoria al agregar datos

mysql> CREATE TABLE tb_dept4-> (-> id INT(11) PRIMARY KEY,-> name VARCHAR(22) NOT NULL,-> location VARCHAR(50)-> ); 

restricción única

La columna a la que se agrega una restricción única no se puede repetir, pero puede ser nula

CREATE TABLE Employees
( employee_name CHAR(50) NOT NULL, social_num INTEGER, phone INTEGER, UNIQUE (social_num)
) 

restricciones predeterminadas

La sintaxis es la predeterminada.

mysql> CREATE TABLE tb_dept3-> (-> id INT(11) PRIMARY KEY,-> name VARCHAR(22),-> location VARCHAR(50) DEFAULT 'Beijing'-> ); 

relación de mesa

En la vida real, existe una relación entre entidades, como: esposo y esposa, departamento y empleado, maestro y estudiante, etc. La tabla que diseñamos es una descripción de la entidad en la realidad, por lo que cuando diseñamos la tabla, esta La relación debe reflejarse.

Las relaciones entre tablas incluyen principalmente: uno a muchos (muchos a uno), uno a uno y muchos a muchos.

Uno a muchos (muchos a uno)

Por ejemplo: clases y estudiantes, departamentos y empleados, clientes y pedidos, categorías y productos, etc.

Principios de creación de tablas:

No tiene por qué ser una clave foránea, esta relación puede estar formada por una columna de la tabla A correspondiente a la clave primaria de la tabla B.

muchos a muchos

Por ejemplo: profesores y estudiantes, estudiantes y cursos, usuarios y roles

Relación de muchos a muchos, principio de creación de tablas: debe crear una tercera tabla, con al menos dos campos en la tabla intermedia

Consulta de varias tablas

producto cartesiano

El producto cartesiano en MySQL se refiere a que cuando se realiza una operación JOIN entre varias tablas sin especificar condiciones, los resultados devueltos son todas las combinaciones posibles en estas tablas.

Por ejemplo, supongamos que tenemos dos tablas A y B, donde A contiene dos filas (1 y 2) y B contiene tres filas (A, B y C),

 SELECT * FROM A, B; 

Entonces el conjunto de resultados devuelto contendrá 6 filas, a saber:

1 A
1 B
1 C
2 A
2 B
2 C 

Convertido a javascript es un bucle for entre dos tablas

const result = [];
for(let i = 0; i < A表.length; i++){ for(let j = 0; j < B表.length; j++){result.push(A[i], B[j])} 
} 

Consulta de varias tablas

Para borrar el producto cartesiano, debe utilizar una consulta de unión, que se divide en uniones internas y uniones externas.

Introducción a la declaración JOIN

1.INNER JOIN INNER JOIN es el tipo JOIN más utilizado y solo devuelve filas comunes a las dos tablas. Busca valores que existen en ambas tablas y combina los valores en un conjunto de resultados.

Por ejemplo, supongamos que tiene dos tablas, una es "pedidos" y la otra es "clientes". Hay una columna "customer_id" en ambas tablas y los datos de estas dos tablas se pueden combinar usando INNER JOIN:

SELECT *
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id; 

En realidad, se trata de una selección basada en el producto cartesiano anterior.

Convertido a javascript es un bucle for entre dos tablas

const result = [];
for(let i = 0; i < orders.length; i++){  for(let j = 0; j < customers.length; j++){if(orders[i].customer_id === customers[j].customer_id){result.push(orders[i], customers[j])}} 
} 

2.LEFT JOIN LEFT JOIN devuelve todas las filas de la tabla de la izquierda, incluso si no hay filas coincidentes en la tabla de la derecha. Si no hay filas coincidentes, las columnas de la tabla de la derecha aparecerán como NULL.

Por ejemplo, supongamos que tiene dos tablas, una es "pedidos" y la otra es "clientes". Utilice LEFT JOIN para enumerar todos los pedidos y la información del cliente al que pertenece el pedido:

SELECT *
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.customer_id; 

Convertido a javascript es un bucle for entre dos tablas

const result = [];
for(let i = 0; i < orders.length; i++){ for(let j = 0; j < customers.length; j++){if(orders[i].customer_id === customers[i].customer_id) {result.push(A[i], B[j])}} 
} 

3.RIGHT JOIN RIGHT JOIN es similar a LEFT JOIN, pero devuelve todas las filas de la tabla derecha, incluso si no hay filas coincidentes en la tabla izquierda. Si no hay filas coincidentes, las columnas de la tabla de la izquierda aparecerán como NULL.

Por ejemplo, supongamos que tiene dos tablas, una es "pedidos" y la otra es "clientes". Utilice RIGHT JOIN para enumerar toda la información de los clientes junto con sus pedidos:

SELECT *
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.customer_id; 

4.FULL OUTER JOIN MySQL no admite FULL OUTER JOIN, pero puede usar el operador UNION para combinar LEFT JOIN y RIGHT JOIN para obtener el mismo resultado.

Por ejemplo, supongamos que tiene dos tablas, una es "pedidos" y la otra es "clientes". Utilice UNIÓN, UNIÓN IZQUIERDA y UNIÓN DERECHA para implementar UNIÓN EXTERNA COMPLETA:

SELECT *
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.customer_id
UNION
SELECT *
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.customer_id; 

UNIÓN

UNIONEs un operador utilizado para fusionar dos o más declaraciones SELECT en la base de datos MySQL. Puede fusionar los conjuntos de resultados de dos o más declaraciones SELECT en un conjunto de resultados. UNIONLas filas duplicadas se eliminarán automáticamente y se podrán utilizar si es necesario incluirlas UNION ALL.

Por ejemplo

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2; 
  • SELECT column_name(s) FROM table1y SELECT column_name(s) FROM table2representan respectivamente las dos declaraciones SELECT que se fusionarán.
  • UNIONEl operador se utiliza para fusionar conjuntos de resultados. Devuelve la unión de dos conjuntos de resultados, eliminando automáticamente las filas duplicadas.
  • Si desea mantener filas duplicadas, puede utilizar UNION ALLel operador.

subconsulta

Para ejercicios detallados, lea este artículo: juejin.cn/post/708368…

El resultado de una instrucción SELECT como parte de otra sintaxis SELECT

gramática

SELECT 字段 ...FROM 表 WHERE 字段 运算符 (SELECT 字段... FROM 表) 

El resultado de una subconsulta de una sola fila es un valor.

Operadores de una sola línea =, >, >=, <, <=, !=

Operadores multilínea en, cualquiera, todos

Subconsulta de varias columnas

El resultado de la subconsulta es una sola columna, que se utiliza como resultado de la subconsulta condicional después de WHERE. El resultado de la subconsulta son varias columnas, que deben utilizarse como una tabla después de FROM.

gramática

SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件 

Copia de seguridad y restauración de datos

Cuando realizamos transmisión, almacenamiento e intercambio de datos en el servidor, pueden ocurrir fallas en los datos, como apagados inesperados o daños en los medios de almacenamiento. Sin las medidas de la CIA para realizar copias de seguridad y restaurar datos, los datos pueden perderse.

mysqldump -u 用户名 -p 密码 数据库 > 文件的路径/文件名.sql 

Tenga en cuenta que esta copia de seguridad es una copia de seguridad a nivel de tabla y primero debe crear la base de datos al restaurar.

asuntos

¿Qué es una transacción de base de datos?

Una transacción de base de datos es una operación de base de datos (agregar, eliminar, modificar) que accede y posiblemente manipula elementos de datos. Estas operaciones se ejecutan todas o no se ejecutan en absoluto. Son una unidad de trabajo indivisible.

propósito de la transacción

  • Proporciona una manera para que las operaciones de la base de datos se recuperen de una falla a un estado normal.
  • Cuando varias aplicaciones acceden a la base de datos al mismo tiempo, se puede proporcionar un método de aislamiento entre estas aplicaciones para evitar que las operaciones de cada una interfieran entre sí.

transacciones operativas

Hay dos formas de realizar operaciones de transacciones en MySQL:

  • Confirmar transacciones automáticamente * Cada declaración de adición, eliminación y modificación de mysql es una transacción separada. De forma predeterminada, mysql iniciará automáticamente una transacción al ejecutar cada declaración y enviará automáticamente la transacción después de la ejecución.
  • Confirmar manualmente la transacción* Declaraciones SQL relacionadas con la transacción* iniciar la transacción; abrir la transacción* confirmar; enviar la transacción* revertir; revertir la transacción

Ejemplo:

start transaction;
update xxx -- 因为这里没有提交事务,所以数据库的数据不会发生变化 

principios de los asuntos

Después de que se inicia la transacción, todas las operaciones se guardarán temporalmente en el registro de transacciones. El registro de transacciones solo se sincronizará con la tabla de datos después de recibir el comando de confirmación. En otros casos, el registro de transacciones se borrará (revertir, desconectar).

Excepción de simultaneidad de transacciones

Problemas que pueden surgir durante operaciones de transacciones concurrentes

  • Reversión perdida (problema con transacciones simultáneas)

"Reversión perdida" significa que al realizar una operación de reversión en una transacción MySQL, si se han confirmado algunas modificaciones antes de la reversión, estas modificaciones se perderán, lo que significa que la operación de reversión no puede deshacer estas modificaciones enviadas.

Por ejemplo, supongamos que en una transacción MySQL, algunas operaciones de inserción o actualización se realizan primero, pero se realiza una operación de reversión antes de confirmar la transacción. Si otras conexiones o transacciones ya han realizado algunas modificaciones antes de revertirlas, estas modificaciones no se revertirán y los datos finales en la base de datos contendrán estas modificaciones confirmadas.

  • cobertura perdida

"Pérdida de sobrescritura" significa que al realizar una operación de actualización en MySQL, si dos o más conexiones o transacciones simultáneas modifican la misma fila de datos al mismo tiempo, una de las modificaciones sobrescribirá los resultados de otras modificaciones, provocando que los resultados de otras modificaciones que se perderán.

Por ejemplo, supongamos que hay dos conexiones o transacciones simultáneas que intentan actualizar la misma fila de datos al mismo tiempo. Si ambas conexiones o transacciones realizan operaciones de actualización, los resultados de la última operación de actualización sobrescribirán los resultados de la operación de actualización anterior. De esta forma, se sobrescriben los resultados de la operación de actualización anterior, es decir, se produce una "pérdida de sobrescritura".

  • lectura sucia

Una transacción lee datos no confirmados de otra transacción

  • lectura no repetible

"Lectura no repetible" se refiere a la situación en MySQL donde la misma fila de datos se lee varias veces en la misma transacción, pero otras transacciones modifican la fila de datos durante este período, lo que genera resultados diferentes a los de las dos lecturas anteriores.

Por ejemplo, supongamos que se realizan las siguientes operaciones en una transacción:

1. Leer una determinada fila de datos;
2. Otra transacción modifica la fila de datos;
3. Leer la misma fila de datos nuevamente.

Si otra transacción modifica la fila de datos antes de la segunda lectura, los datos obtenidos en la segunda lectura serán diferentes de los datos leídos la primera vez, lo que resultará en una lectura no repetible.

  • lectura fantasma

"Lectura fantasma" se refiere a una situación en MySQL en la que la misma declaración de consulta se ejecuta varias veces en la misma transacción, pero durante este período otras transacciones insertan o eliminan filas que cumplen con las condiciones de la consulta, lo que da como resultado resultados de consulta diferentes entre las dos veces anteriores. .

Por ejemplo, supongamos que se realizan las siguientes operaciones en una transacción:

1. Ejecutar una determinada declaración de consulta y devolver un conjunto de filas calificadas;
2. Otra transacción inserta algunas filas calificadas nuevas;
3. Ejecutar la misma declaración de consulta nuevamente.

Si otra transacción inserta nuevas filas calificadas antes de ejecutar la instrucción de consulta por segunda vez, la segunda consulta devolverá más filas que la primera, lo que dará como resultado lecturas fantasma.

nivel de aislamiento

Creo que el nivel de aislamiento predeterminado del motor de almacenamiento InnoDb en Mysql es Lectura repetible, por lo que echemos un vistazo a qué excepciones de concurrencia puede resolver este nivel de aislamiento.

  • Reversión perdida* ok
  • Lectura sucia* ok
  • Lectura no repetible* ok
  • Cobertura perdida* ok
  • Lectura fantasma* Lógicamente hablando, esto no está bien, pero mysql también puede manejarlo.

Ver y modificar niveles de aislamiento

Controlar

SELECT @@transacation_isolation 

Revisar

SELECT @@session.tx_isolation='隔离级别' 

Crear usuario

gramática

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码' 

cambiar la contraseña

ALTER USER USER() IDENTIFIED BY `new_password` 
  • Nombre de usuario: El nombre de usuario que se creará.
  • Nombre de host: especifique el host en el que el usuario puede iniciar sesión. Si es un usuario local, se puede usar localhost. Si desea que el usuario inicie sesión desde cualquier host remoto, puede usar el carácter comodín %.
  • Contraseña: La contraseña de inicio de sesión del usuario. La contraseña puede estar vacía. Si está vacía, el usuario puede iniciar sesión en el servidor sin contraseña.

índice

En pocas palabras, un índice es un directorio que puede ayudarnos rápidamente a encontrar los datos correspondientes.

En términos generales, el índice en sí también es muy grande y no se puede almacenar completamente en la memoria, por lo que el índice a menudo se almacena en el disco en forma de un archivo de índice.

Aunque el índice mejora en gran medida la velocidad de consulta, también reduce la velocidad de actualización de la tabla, como INSERTAR, ACTUALIZAR y ELIMINAR en la tabla. Porque al actualizar la tabla, Mysql no solo necesita guardar los datos, sino también guardar el archivo de índice. Cada vez que se actualiza un campo que agrega una columna de índice, se ajustará la información del índice después de los cambios de valor clave causados ​​por la actualización.

índice ordinario

No hay restricciones en su uso, se permite crearlo en todos los tipos de datos y puede tener valores duplicados y valores nulos. Un índice contiene solo una columna y una tabla puede tener varios índices de una sola columna.

Creado al crear la tabla.

gramática

INDEX 索引名 (列名) 

Ejemplo

create table student (id int primary key,name varchar(20),age int,index student_name_index(name)
) 

Crear directamente

CREATE INDEX 索引名 ON 表名(列名) 

Pruebe si la creación es exitosa

show index from student2 

índice único

Similar a un índice normal, la diferencia es que el valor de la columna del índice debe ser único, pero se permiten valores nulos. En el caso de un índice compuesto, la combinación de valores de columna debe ser única.

gramática

UNIQUE INDEX 索引名 (列名) 

por fin

Hemos preparado un paquete de información inicial para todos. Contiene 54 libros electrónicos relacionados con el front-end de 2,57 G, "Guía de entrevistas de front-end (con respuestas y análisis)", tutoriales en vídeo sobre conocimientos clave y difíciles (conjunto completo).



Los amigos necesitados pueden hacer clic en la tarjeta a continuación para recibirla y compartirla gratis.

Supongo que te gusta

Origin blog.csdn.net/web2022050901/article/details/129379571
Recomendado
Clasificación