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
UNION
Es 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. UNION
Las 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 table1
ySELECT column_name(s) FROM table2
representan respectivamente las dos declaraciones SELECT que se fusionarán.UNION
El 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 ALL
el 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.