Hablar de la base de datos

Hablar de la base de datos

Vamos, resuélvelo

Que es SQL

El nombre completo de SQL es Structure Query Languagelenguaje de consulta estructurado. Es un lenguaje diseñado para asociaciones de tablas. Nuestro MySQL común es uno de ellos. Hoy, principalmente clasificaremos MySQL. MySQL es una base de datos relacional. MySQL es el primer paso en la entrada de nuestra base de datos.

Por defecto, todo el mundo ya ha instalado mysql. Ya sea win o linux, creo que todo el mundo lo ha dominado. Creo que no te será difícil cambiar entre versiones, contraseñas y permisos. Entremos directamente en MySQL.

Motor de almacenamiento MySQL

InnoDB

InnoDB es el motor de almacenamiento transaccional predeterminado de MySQL (después de MySQL 5.5.5) . Solo cuando necesite funciones que no admite, considere usar otros motores de almacenamiento.

InnoDB admite operaciones de clave externa.

Granularidad de bloqueo predeterminada de InnoDB 行级锁, el rendimiento de la concurrencia es mejor, se producirá un punto muerto.

Y MyISAM como está, el motor de almacenamiento InnoDB también está .frm文件存储表结构definido, pero la diferencia es que los datos de la tabla InnoDB y los datos del índice se almacenan juntos, se encuentran en los nodos hoja B + número, y los datos de la tabla MyISAM y los datos del índice están separados .

InnoDB admite operaciones transaccionales con características de aislamiento ACID transaccionales, el nivel de aislamiento predeterminado está 可重复读(repetable-read)por MVCC(并发版本控制)alcanzar. Podemos solucionar 脏读y 不可重复读problemas.

InnoDB tiene un archivo de registro seguro. Este archivo de registro se utiliza para recuperar la pérdida de datos causada por fallas de la base de datos u otras situaciones para garantizar la coherencia de los datos.

InnoDB y MyISAM admiten los mismos tipos de índices, pero la implementación específica es muy diferente debido a la diferencia en la estructura de archivos.

En términos de rendimiento de adición, eliminación, modificación y verificación, si realiza una gran cantidad de operaciones de adición, eliminación y modificación, se recomienda utilizar el motor de almacenamiento InnoDB. Elimina filas durante la eliminación y no reconstruye la tabla.

MyISAM

El diseño es simple y los datos se almacenan en un formato compacto . Para datos de solo lectura, o la tabla es relativamente pequeña, puede tolerar operaciones de reparación, aún puede usarla.

MyISAM no admite 事务operaciones y las funciones ACID no existen. Este diseño es por consideraciones de rendimiento y eficiencia.

MyISAM no admite 外键operaciones. Si agrega a la fuerza una clave externa, MySQL no informará un error, pero la clave externa no funciona.

MyISAM no admite bloqueos a nivel de fila . Solo puede bloquear toda la tabla. Los bloqueos compartidos se agregan a todas las tablas que deben leerse al leer y los bloqueos exclusivos se agregan a la tabla al escribir. Pero mientras la tabla tiene operaciones de lectura, también puede insertar nuevos registros en la tabla, lo que se denomina inserción concurrente (INSERCIÓN CONCURRENTE).

MyISAM se almacenan en tres archivos en el disco, el mismo nombre de archivo y nombre de la tabla, extensión, respectivamente .frm(存储表定义), .MYD(MYData,存储数据), MYI(MyIndex,存储索引). Lo que necesita especial atención aquí es que MyISAM solo 索引文件almacena en caché archivos de datos.

Si el host donde se encuentra la base de datos deja de funcionar, los archivos de datos MyISAM se dañan fácilmente y son difíciles de recuperar.

Rendimiento de adición, eliminación, modificación y consulta: el rendimiento de SELECT es superior, adecuado para más consultas

Ver motor de base de datos

Entrar en nuestra base de datos

show engines;

Puede ver los motores actualmente compatibles con MySQL y el motor predeterminado

Inserte la descripción de la imagen aquí

Si necesita crear la tabla de la base de datos del motor especificado, puede agregar el comando ENGINE después de la declaración de creación

create table test(id int(10),name varchar(20)) engine = MyISAM;

Si no se especifica, el motor InnoDB se utiliza de forma predeterminada.

Caracteristicas MYISAM INNODB
Soporte de transacciones no apoyo colocarse
Bloqueo de fila de datos no apoyo colocarse
Restricción de clave externa no apoyo colocarse
Índice de texto completo colocarse no apoyo
Tamaño del espacio de la mesa Menor Más grande, aproximadamente 2 veces más grande que MYISAM

En mil palabras, MyISAM ahorra espacio, es rápido, InnDB es seguro y tiene transacciones.

¿Qué es una empresa? Inserta una oración aquí

asuntos

Cuando se trata de asuntos, todo el mundo debe pensar en ACID. Cuando se habla de bases de datos, ACID es un canalla. ¿Qué es ACID? ¿No es atomicidad, consistencia, aislamiento y durabilidad ?

¿Qué es una transacción? Una transacción es una secuencia indivisible de operaciones de base de datos y la unidad básica de control de concurrencia de la base de datos. El resultado de su ejecución debe cambiar la base de datos de un estado consistente a otro estado consistente. Una transacción es un conjunto lógico de operaciones, que se ejecutan o no se ejecutan .

Cuatro condiciones ACID

  • ** Atomicidad: ** Atomicidad significa que una transacción es una unidad de trabajo indivisible. Las operaciones en la transacción ocurren todas o ninguna.
  • ** Coherencia: ** La integridad de los datos antes y después de la transacción debe ser coherente.
  • ** Aislamiento (aislamiento): ** El aislamiento de transacciones significa que cuando varios usuarios acceden a la base de datos simultáneamente, la transacción abierta por la base de datos para cada usuario no puede ser interferida por los datos de operación de otras transacciones. Varias transacciones concurrentes deben ser mutuamente excluyentes aislamiento.
  • ** Durabilidad (durabilidad): ** Durabilidad significa que una vez que se confirma una transacción, sus cambios en los datos en la base de datos son permanentes, e incluso si la base de datos falla, no debería tener ningún impacto en ella.

Ya que habla de aislamiento, hablemos del nivel de aislamiento de la base de datos.

Antes de comprender el nivel de aislamiento de la base de datos, primero debemos comprender

¿Qué es la lectura sucia? ¿Lectura fantasma? ¿No es repetible?

  • Lectura sucia: una transacción ha actualizado una copia de datos y otra transacción ha leído la misma copia de datos en este momento. Por alguna razón, si se realiza la operación RollBack anterior, los datos leídos por la siguiente transacción son Sería incorrecto.
  • Lectura no repetible: Los datos son inconsistentes en las dos consultas de una transacción. Estos pueden ser los datos originales actualizados por una transacción insertada entre las dos consultas.
  • Lectura fantasma: el número de elementos de datos en las dos consultas de una transacción es inconsistente. Por ejemplo, una transacción consulta varias filas de datos, mientras que otra transacción inserta nuevas columnas de datos en este momento. En la siguiente consulta, encontrará que hay varias columnas de datos que no tenía antes.

La principal diferencia entre la no repetibilidad y la lectura fantasma es que el enfoque de la lectura no repetible es la modificación, mientras que el enfoque de la lectura fantasma es agregar o eliminar .

El nivel de aislamiento de la base de datos

  1. Lecturas no confirmadas. Se produjeron modificaciones en la transacción. Incluso si no está confirmada, otras transacciones son visibles. Por ejemplo, para un número A, el 50 original se cambia a 100, pero todavía no he confirmado el cambio. Otra transacción ve el cambio, y esta vez el original La transacción se retrotrae. En este momento, A sigue siendo 50, pero la A vista por otra transacción es 100. Puede causar lecturas sucias, lecturas fantasmas o lecturas no repetibles.
  2. Confirmar y leer, para una transacción desde el principio hasta la confirmación, cualquier cambio realizado es invisible para otras transacciones, por ejemplo, para un número A originalmente 50, y luego enviado y modificado a 100, esta vez otra transacción antes de que A confirme la modificación , La lectura A es 50. Justo después de la lectura, A se modifica a 100. En este momento, otra transacción lee y encuentra que A repentinamente se convierte en 100; las lecturas sucias se pueden prevenir, pero las lecturas fantasmas o las lecturas no repetibles Todavía puede suceder
  3. Lectura repetible significa que los registros que se leen varias veces para un registro son los mismos. Por ejemplo, si lee un número A, siempre es A, y la lectura A dos veces antes y después es la misma; puede evitar lecturas sucias y lecturas no repetibles. Pero la lectura fantasma aún puede ocurrir.
  4. Lecturas serializables. En el caso de las lecturas simultáneas, los resultados de las lecturas serializadas son los mismos. No hay diferencia. Por ejemplo, no se producirán lecturas sucias y lecturas fantasmas; este nivel puede evitar lecturas sucias, lecturas no repetibles y fantasmas. leer.
Nivel de aislamiento Lectura sucia No repetible Lectura fantasma
LEER-NO COMPROMISO
LEÍDO COMPROMETIDO ×
REPETIBLE-LEER × ×
SERIALIZABLE × × ×

El nivel de aislamiento predeterminado admitido por el motor de almacenamiento MySQL InnoDB es REPEATABLE-READ (re-legible).

Cabe señalar aquí que la diferencia con el estándar SQL es que el motor de almacenamiento InnoDB utiliza el algoritmo de bloqueo Next-Key Lock bajo el nivel de aislamiento de transacciones REPEATABLE-READ , por lo que puede evitar la generación de lecturas fantasmas, que es diferente de otras bases de datos. El sistema (como SQL Server) es diferente. Por lo tanto, el nivel de aislamiento predeterminado admitido por el motor de almacenamiento InnoDB es REPEATABLE-READ (re-legible), que puede garantizar completamente los requisitos de aislamiento de las transacciones, es decir, ha alcanzado el nivel de aislamiento SERIALIZABLE (serializable) estándar de SQL.

Debido a que cuanto más bajo es el nivel de aislamiento, menos bloqueos son las solicitudes de transacción, por lo que el nivel de aislamiento de la mayoría de los sistemas de bases de datos es READ-COMMITTED (leer contenido enviado) :, pero lo que necesita saber es que el motor de almacenamiento InnoDB usa REPEATABLE-READ por defecto. Releer) no tendrá ninguna pérdida de rendimiento .

El motor de almacenamiento InnoDB generalmente usa el nivel de aislamiento SERIALIZABLE (serializable) en el caso de transacciones distribuidas.

índice

Descripción general del índice

Todos los tipos de MySQL se pueden indexar, usar el índice para mejorar las columnas relevantes es SELECTla mejor manera de consultar el rendimiento.

Primero observe la forma en que dos motores de almacenamiento de uso común implementan la indexación

Índice InnoDB e índice MyISAM

InnoDB usa un índice agrupado (jù cù suǒ yǐn), mientras que MyISAM usa un índice no agrupado. He leído muchos blogs y algunos de ellos son demasiado profesionales para entenderlos. De hecho, el almacenamiento de datos y el índice están juntos. Se llama índice agrupado, por lo que cuando busca un diccionario, el contenido que se va a buscar y el número de página están juntos, y los datos se encuentran cuando se encuentra el índice. El índice no agrupado significa que los datos y el índice se almacenan por separado.

Después de comprender la diferencia entre un índice agrupado y un índice no agrupado, veamos la capa inferior de estos dos tipos de almacenamiento. De hecho, los índices de los dos tipos de almacenamiento se implementan a través del árbol B + en el árbol B, que es solo una forma de implementación. Diferente.

La diferencia entre InnoDB y MyISAM implementa el índice BTree

  • InnoDB, su archivo de datos en sí es un archivo de índice. En comparación con MyISAM, el archivo de índice y el archivo de datos están separados . El archivo de datos de la tabla en sí es una estructura de índice organizado por B + Tree. El campo de datos de nodo del árbol guarda registros de datos completos. , La clave de este índice es la clave principal de la tabla de datos, por lo que el archivo de datos de la tabla InnoDB en sí es el índice principal. Esto se denomina "índice agrupado" o índice agrupado, y el resto de los índices se utilizan como índices auxiliares. El campo de datos del índice auxiliar almacena el valor de la clave principal del registro correspondiente en lugar de la dirección. Esto también es diferente de MyISAM. Búsquedas basadas en el índice principal Cuando encuentre el nodo donde se encuentra la clave, puede recuperar los datos; cuando busque en función del índice auxiliar, primero debe recuperar el valor de la clave principal y luego pasar por el índice principal. Por lo tanto, al diseñar una tabla, no se recomienda utilizar un campo largo como clave principal, y no se recomienda utilizar un campo no monótono como clave principal, lo que provocará divisiones frecuentes del índice principal.

  • En MyISAM, el campo de datos del nodo hoja B + Tree almacena la dirección del registro de datos . Durante la recuperación del índice, el índice se busca primero de acuerdo con el algoritmo de búsqueda B + Tree. Si la clave especificada existe, se recupera el valor del campo de datos y luego El valor del campo de datos es el registro de datos correspondiente al área de lectura de la dirección, que se denomina "índice no agrupado".

Después de hablar de tantos índices, ¿cuántos tipos hay? Enumerados aquí

Existen principalmente los siguientes índices en MySQL

  • 全局索引(FULLTEXT): Índice global. Actualmente, sólo el motor MyISAM soporta el índice global. Su apariencia es para resolver el problema de baja eficiencia de la consulta difusa de texto, y se limita a las columnas CHAR, VARCHAR y TEXT.

  • 哈希索引(HASH): El índice hash es la única estructura de datos de pares clave-valor utilizada en MySQL, que es muy adecuada como índice. El índice HASH tiene la ventaja de un posicionamiento único. No es necesario buscar nodo por nodo como un árbol, pero este tipo de búsqueda es adecuado para buscar una sola clave. Para la búsqueda de rango, el rendimiento del índice HASH será muy bajo. De forma predeterminada, el motor de almacenamiento MEMORY usa el índice HASH, pero también admite el índice BTREE.

  • B-Tree 索引: B significa Balance. BTree es un árbol balanceado. Tiene muchas variantes. La más común es B + Tree, que es ampliamente utilizado por MySQL.

  • R-Tree 索引: R-Tree rara vez se usa en MySQL y solo admite tipos de datos de geometría. Los únicos motores de almacenamiento que admiten este tipo son MyISAM, BDb, InnoDb, NDb, Archive. En comparación con B-Tree, la ventaja de R-Tree radica en su alcance. Encontrar.

Entonces, ¿por qué usar índices?

1. Al crear un índice único, se puede garantizar la unicidad de cada fila de datos en la tabla de la base de datos.

2. Puede acelerar enormemente la recuperación de datos, que también es la razón principal para crear un índice.

3. Ayude al servidor a evitar la clasificación y las tablas temporales

4. Convierta la E / S aleatoria en E / S secuencial

5. Puede acelerar la conexión entre la tabla y la tabla, especialmente en la realización de la integridad de referencia de los datos es particularmente significativa

El índice se puede crear cuando se crea la tabla, o se puede crear por separado

¿Por qué el índice puede mejorar la velocidad de las consultas?

Cuando la base de datos ejecuta una instrucción SQL, el método predeterminado es escanear toda la tabla de acuerdo con las condiciones de búsqueda y unir el conjunto de resultados de búsqueda cuando encuentra una condición coincidente. Si agregamos un índice a un campo, la consulta primero ubicará el número de filas con un valor específico en la lista de índices a la vez, reduciendo en gran medida el número de filas coincidentes atravesadas, por lo que la velocidad de la consulta se puede incrementar significativamente.

La definición oficial de MySQL de un índice es: un índice es una estructura de datos que ayuda a MySQL a obtener datos de manera eficiente. Puede entenderse como: índice es una estructura de datos.

Lectura de extensión de índice (árbol B y árbol B +, etc.):

http://blog.codinglabs.org/articles/theory-of-mysql-index.html

Paradigma de base de datos

El paradigma es una estructura de tabla con una redundancia mínima y los 3 paradigmas son los siguientes

Primera forma normal (1NF)

La primera forma normal: para asegurar la atomicidad de cada columna, cada columna es la unidad de datos más pequeña (también conocida como la unidad atómica más pequeña) que no se puede subdividir, luego se satisface la primera forma normal (1NF)

Inserte la descripción de la imagen aquí

Segunda forma normal (2NF)

Segunda forma normal: en primer lugar, se satisface la primera forma normal y la columna de clave principal de la tabla no tiene una dependencia parcial de la clave principal. Cada tabla debe describir solo una cosa.
Inserte la descripción de la imagen aquí

Tercera forma normal (3NF)

Tercera forma normal: se satisface la segunda forma normal y no hay dependencia transitiva de las columnas de clave no principal de la tabla. Además del número de pedido de clave principal, el nombre del cliente depende del número de cliente de clave no principal.

Inserte la descripción de la imagen aquí

MySQL y bloqueo tienen que decir

Inserte la descripción de la imagen aquí

En la base de datos relacional, puede de acuerdo con los puntos de bloqueo de la base de datos de granularidad de bloqueo de bloqueos de nivel de fila (motor INNODB), bloqueo de nivel de tabla (motor MYISAM) y bloqueos de nivel de página (motor BDB).

Bloqueos utilizados por los motores de almacenamiento MyISAM e InnoDB:

  • MyISAM utiliza el bloqueo a nivel de tabla.
  • InnoDB admite el bloqueo de nivel de fila y el bloqueo de nivel de tabla. El valor predeterminado es el bloqueo de nivel de fila

Bloqueo de fila y bloqueo de mesa y bloqueo de nivel de página

Bloqueo de fila

El bloqueo de nivel de fila es el mejor tipo de bloqueo en Mysql, lo que significa que solo se bloquea la fila de la operación actual. Los bloqueos a nivel de fila pueden reducir en gran medida los conflictos en las operaciones de la base de datos. La granularidad de bloqueo es la más pequeña, pero la sobrecarga de bloqueo también es la más grande. Las cerraduras de nivel de fila se dividen en cerraduras compartidas y cerraduras exclusivas.

Características: alta sobrecarga y bloqueo lento; se producirá un interbloqueo; la granularidad de bloqueo más pequeña, la menor probabilidad de conflictos de bloqueo y la mayor concurrencia.

Bloqueo de mesa

El bloqueo a nivel de tabla es el bloqueo con la mayor granularidad de bloqueo en MySQL. Significa bloquear toda la tabla de la operación actual. Es fácil de implementar y consume menos recursos. Es compatible con la mayoría de los motores MySQL. Los MYISAM e INNODB más utilizados admiten el bloqueo a nivel de tabla. Los bloqueos a nivel de tabla se dividen en bloqueos de lectura compartidos de tabla (bloqueos compartidos) y bloqueos de escritura exclusivos de tabla (bloqueos exclusivos).

Características: baja sobrecarga, bloqueo rápido; sin interbloqueo; gran granularidad de bloqueo, la mayor probabilidad de generar conflictos de bloqueo y la menor concurrencia.

Bloqueo a nivel de página

Los bloqueos a nivel de página son un tipo de bloqueo que tiene una granularidad de bloqueo entre bloqueos a nivel de fila y bloqueos a nivel de tabla en MySQL. El bloqueo a nivel de tabla es rápido, pero hay muchos conflictos y los conflictos a nivel de fila son pocos, pero la velocidad es lenta. Por lo tanto, se adopta un nivel de página comprometido y se bloquea un conjunto de registros adyacentes a la vez.

Características: la sobrecarga y el tiempo de bloqueo se encuentran entre los bloqueos de la tabla y los bloqueos de las filas; se producirán interbloqueos; la granularidad de bloqueo se encuentra entre los bloqueos de la tabla y los bloqueos de las filas, y la simultaneidad es promedio.

Desde el tipo de bloqueo se puede dividir en:

Cerradura compartida y cerradura exclusiva

Cerradura compartida

También llamado bloqueo de lectura. Cuando el usuario quiera leer datos, agregue un bloqueo compartido a los datos. Se pueden agregar múltiples bloqueos compartidos al mismo tiempo.

Cerradura exclusiva

También se llama bloqueo de escritura. Cuando el usuario desea escribir datos, se agrega un bloqueo exclusivo a los datos. Solo se puede agregar un candado exclusivo y es mutuamente excluyente con otros candados exclusivos y candados compartidos.

consejos:

Cuando estas dos cerraduras se pueden agregar y cuando no se pueden agregar es muy simple, al igual que cuando vas a un hotel (simulando el comportamiento de los datos de operación del usuario), puedes verificar la habitación (leer bloqueo), también puedes hacer la casa (escribir bloqueo), estás viendo la habitación A veces (agrega un bloqueo de lectura, otros también pueden agregar un bloqueo de lectura), otros también pueden venir y mirar con usted (se agregan múltiples bloqueos compartidos al mismo tiempo), pero si se queda durante la noche (agregue un bloqueo de escritura), otros no pueden vivir con usted (Solo se puede agregar un candado exclusivo).

Bloqueo optimista y pesimista en la base de datos

Bloqueo pesimista : suponiendo que se produzcan conflictos de simultaneidad, proteja todas las operaciones que puedan violar la integridad de los datos. Después de consultar los datos, la transacción se bloquea hasta que se confirma. Implementación: use el mecanismo de bloqueo en la base de datos

Bloqueo optimista : asumiendo que no se producirán conflictos de simultaneidad, solo se comprueba si hay violaciones de la integridad de los datos cuando se envía la operación. Al modificar datos, la transacción se bloquea y el bloqueo se realiza por versión. Método de implementación: generalmente, se utiliza el mecanismo de número de versión o algoritmo CAS.

Escenarios de uso: leer más y escribir menos (bloqueo optimista), escribir más (bloqueo pesimista).

¿Hay un punto muerto? Por supuesto que hay

Si hay recursos y alguien los usa, puede ocurrir un punto muerto.

Deadlock se refiere al fenómeno de que dos o más transacciones se ocupan entre sí en el mismo recurso y solicitan bloquear los recursos de la otra, lo que conduce a un círculo vicioso.

Formas comunes de resolver el estancamiento

1. Si diferentes programas acceden a varias tablas al mismo tiempo, intente acceder a las tablas en el mismo orden, lo que puede reducir en gran medida la posibilidad de un punto muerto.

2. En la misma transacción, intente bloquear todos los recursos necesarios a la vez para reducir la probabilidad de un punto muerto;

3. Para las partes comerciales que son muy propensas al interbloqueo, puede intentar actualizar la granularidad del bloqueo y reducir la probabilidad de interbloqueo mediante el bloqueo a nivel de tabla;

Expansión de ejemplos de causas y solución:

https://blog.csdn.net/tr1912/article/details/81668423

Sintaxis básica de MySQL

(Realmente no estoy inventando el recuento de palabras)

mysql -uroot -proot  -- 连接数据库
exit;  -- 退出连接

update mysql.user set authentication=PASSWORD('yourpassword') where user='root'; -- 修改root密码
flush privileges;  -- 刷新权限

-- 所有的语句都使用;结尾
show databases;  -- 查询数据库列表
use school;    -- 切换数据库 use 数据库名

show tables;  -- 查询数据库中所有的表
describe student; -- 显示数据库中所有的表的信息

create database westos; -- 创建数据库

Operaciones en la biblioteca

创建库		
		CREATE  DATABASE  [IF NOT EXISTS] 库名
[DEFAULT] CHARACTER SET 字符名 |  [DEFAULT] COLLATE 校对规则 

Aquí, los principiantes recomiendan el próximo software de visualización de bases de datos, como Navicat para mysql, sqlyog, etc., que tienen una base de datos de operaciones visual, pero estas instrucciones de funcionamiento de uso común deben dominarse.

查看库
	SHOW DATABASES
	SHOW CREATE DATABASE 库名【查看数据库创建时的详细信息】
删除库
	DROP DATABASE  [IF EXISTS]  库名 
修改库
	ALTER  DATABASE  [IF NOT EXISTS] 库名
	[DEFAULT] CHARACTER SET 字符名   | [DEFAULT] COLLATE 校对规则
备份库中的数据和
	mysqldump -u 用户名 -p 数据库名 > 文件名.sql【window命令】
	Source 文件名.sql【在库下执行】

	mysql -uroot -p mydb1<c:\test.sql  (window命令)

Operaciones sobre la mesa

增加表
		CREATE TABLE 表名(      列名    类型          )
修改表
	ALTER TABLE 表名
		ADD ( 列名  数据类型 );
	ALTER TABLE 表名
  		MODIFY( 列名  数据类型 );
查看表
		SHOW TABLES;
		SHOW CREATE TABLE 表名【查看表的创建细节】
		DESC 表名【查看表的结构】
删除表
		ALTER TABLE表名 
		DROP(列名);

Operar con los datos de la tabla

	增加
		INSERT INTO 表名 ( 列名..)  VALUES  (数据..);
	修改
		UPDATE  表名  SET 列名=.. , 列名=WHERE=条件 ;
	删除
		DELETE FROM 表名  WHERE=条件;
		TRUNCATE TABLE【先摧毁整张表,再创建表结构】
	查看
		SELECT 列名
        FROM 表名,
        WHERE 条件,
        GROUP BY 列名,
        HAVING BY,
        ORDER BY 列名

Preguntas comunes

https://blog.csdn.net/ThinkWon/article/details/104778621

Supongo que te gusta

Origin blog.csdn.net/weixin_43876186/article/details/108535197
Recomendado
Clasificación