Comandos básicos de operación de bases de datos


Comandos básicos de operación de bases de datos

reglas de nomenclatura

  • Los nombres de los campos deben comenzar con una letra.
  • La longitud no puede exceder los 30 caracteres (diferentes bases de datos y versiones serán diferentes)
  • No se pueden utilizar palabras reservadas de SQL
  • Sólo se pueden utilizar los siguientes caracteres az, AZ, 0-9, $, etc.
  • MySQL usa todas las letras minúsculas
  • Varias palabras separadas por guiones bajos

Operaciones de la biblioteca

Orden describir
mostrar bases de datos; Consultar todas las bases de datos.
crear base de datos 库名; Crear base de datos
utilizar el nombre de la biblioteca; Usar biblioteca
eliminar el nombre de la biblioteca de la base de datos; Eliminar base de datos

Operaciones de tabla

Orden describir
mostrar mesas; Consultar todas las tablas
crear tabla nombre de la tabla (nombre de campo 1 tipo de campo 1 (longitud), nombre de campo 2 tipo de campo 2 (longitud),...); Crear mesa
soltar el nombre de la tabla; Eliminar tabla
alterar tabla nombre de tabla agregar columna nombre de campo tipo de campo (longitud) Modificar tabla
nombre de la tabla de descripción; Ver estructura de la tabla
  • Al crear una tabla, varios campos deben estar separados por comas ",", pero no es necesario que el último campo esté

Registrar operaciones en la tabla.

Orden describir
seleccione el nombre del campo 1, el nombre del campo 2, el nombre del campo 3... del nombre de la tabla; / seleccione * del nombre de la tabla; Consultar/consultar todos los datos de la tabla según el nombre del campo
insertar en el nombre de la tabla valores (valor del campo 1, valor del campo 2,...) / insertar en el nombre de la tabla (nombre del campo) valores (valor del campo), (valor del campo) Agregar datos a la tabla/Agregar datos al campo especificado
actualizar nombre de tabla establecer nombre de campo = nuevo valor donde nombre de campo = valor de campo Modifique los datos en la tabla, se cambiará todo el campo y habrá una consulta condicional más adelante
eliminar del nombre de la tabla; Eliminar datos en la tabla
establecer nombres gbk; Resolver caracteres chinos confusos
insertar en el nombre de la tabla (nombre de campo 1, nombre de campo 2,...) valores (valor de campo 1, valor de campo 2,...), (valor de campo 1, valor de campo 2,...)

Clave principal e incremento automático

  • CLAVE PRIMARIA AUTO_INCREMENT

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Importar estructura de tabla
1. Seleccionar base de datos
2. Importar sql, fuente xxx.sql

DQL (consulta de datos)

Agregar comentarios al crear tablas y campos

create table test(id int comment 'id号',name varchar(255) comment '名字')comment='测试表';

Información de la tabla de creación de consultas

show create table test;

11. Consulta simple.
Cualquier declaración SQL termina con ";".
Las declaraciones SQL no distinguen entre mayúsculas y minúsculas, pero los datos almacenados en la tabla se dividen en diferentes tamaños en Oracle. MySQL no distingue. Oracle es más riguroso y MySQL es más suelto.
Los campos pueden participar en operaciones matemáticas
usando su alias, y la palabra clave as puede omitirse. Si hay chino en el alias, use comillas simples para encerrar la cadena
en la declaración SQL. La cadena debe estar entre comillas simples . Utilice
"," para consultar varios campos.
Utilice "*" para separar todos los campos en la consulta. En el desarrollo real, no se recomienda utilizar " * ", que es menos eficiente.

12. Consulta condicional
seleccionar
campo, campo...
del
nombre de la tabla
donde
condición;
orden de ejecución: desde, dónde, seleccionar

Insertar descripción de la imagen aquí
entre…y…: Es un intervalo cerrado [1100 - 3000]
entre…y…: Cuando se usa, debe ser pequeño a la izquierda y grande a la derecha
entre…y…: Se puede usar en números y cadenas, pero está cerrado por la izquierda en cuanto a caracteres, apertura derecha [A - C)

NULL no es un valor en la base de datos, no significa nada y está vacío.
El vacío no es un valor y no se puede medir con un signo igual.
Debe usar es nulo o no es nulo

y tiene mayor prioridad que o, puedes usar corchetes "()" para resolver el problema de prioridad

El valor después de in no es un intervalo, sino un valor específico

En la consulta difusa, si desea consultar el contenido con "_", puede usar los caracteres de transferencia "\", "\_" y listo.

13. Clasificación (ascendente, descendente)
por campo asc/desc

El valor predeterminado es orden ascendente
asc orden ascendente
desc
orden descendente. Utilice ", " para separar varios campos al mismo tiempo. Los
campos anteriores pueden desempeñar un papel principal. Solo cuando los campos anteriores no puedan completar la clasificación, se habilitarán los campos posteriores. . (Cuando los campos anteriores son iguales, se ejecutarán los siguientes campos).
Puede ordenar por número de campo y puede ordenar según el número de campo (el número de campo es el campo utilizado en la consulta), pero no se recomienda para usarlo en programas Java. Puede usarse para la práctica diaria.

seleccionar
campo
de
superficie
donde
condición
ordenar por
...
Orden de ejecución: desde, dónde, seleccionar, ordenar por
Nota: ordenar por se ejecuta al final

14. Función de agrupación
recuento recuento
suma suma
valor promedio
máximo valor máximo
mínimo valor mínimo
Nota: Todas las funciones de agrupación operan con un determinado conjunto de datos. Hay
5 funciones de agrupación en total.
La función de agrupación tiene otro nombre, función de procesamiento de múltiples líneas.
Características de la función de procesamiento de múltiples líneas: ingrese varias líneas, el resultado final de salida es una línea.
La función de agrupación ignora automáticamente NULL
. Todas las funciones de agrupación ignoran automáticamente NULL, por lo que no es necesario agregarlo a la condición donde. La condición de filtro anterior no es nula,
seleccione suma (comm) de emp; la función de suma ignora automáticamente NULL.
Hay una regla de sintaxis en la declaración SQL. La función de agrupación no se puede usar directamente en la cláusula donde?
Motivo: porque agrupar por se ejecuta después de ejecutarse dónde.
Orden de ejecución: donde, agrupar por, función de grupo (sin agrupar por, la función de grupo no se puede usar), por lo que la función de grupo no se puede usar en la cláusula donde.

¿Cuál es la diferencia entre contar (*) y contar (un campo determinado)?
contar (*): no cuenta la cantidad de datos en un determinado campo, sino que cuenta el número total de registros, que no tiene nada que ver con un determinado campo contar (un determinado campo): significa contar el número total de
datos en un campo determinado que no es NULL.

Las funciones de agrupación se pueden combinar y separar mediante " , "

La función de agrupación ignorará NULL, pero la expresión matemática no ignorará NUL. El resultado de cualquier expresión matemática con NULL debe ser NULL.

15. La función de procesamiento de una sola fila
ingresa una fila y genera una fila.Nota
: En la base de datos, siempre que aparezca NULL en la expresión matemática, el resultado será NULL y NULL no se ignorará en la expresión matemática.
Solución: ifnull() función de procesamiento nulo, que pertenece a la función de procesamiento de una sola fila
ifnull (¿cómo deben tratarse los datos NULL?)

16. agrupar por y tener
agrupar por: Agrupar por un determinado campo o determinados campos.
tener: es filtrar los datos después de agruparlos nuevamente.
Nota: agrupar por y tener son socios. Si desea utilizar tener, debe utilizar agrupar por.

Orden de ejecución: desde, agrupar por, seleccionar (función de agrupación)
Nota: Las funciones de agrupación generalmente se usan junto con agrupar por. Cualquier función de agrupación no se ejecutará hasta que se ejecute la instrucción agrupar por.
Cuando una declaración SQL no tiene un grupo por, los datos de toda la tabla formarán un grupo propio, de hecho, habrá un grupo por predeterminado en ella.

Cuando hay group by en una declaración, aquí solo se escriben los campos y funciones de agrupación de parámetros que pueden aparecer después de seleccionar. Otros no están permitidos. Aunque se puede ejecutar en MySQL, no tiene sentido. Si se ejecuta en Oracle, un Se informará el error. .

La consulta de grupo de campos múltiples
simplemente trata varios campos como un solo campo.
seleccione
deptno,job,max(sal)
del grupo
emp
por
deptno,job;

Donde el filtrado es mayor que tener filtrado,
se recomienda usarlo donde sea posible.

17. Resuma una declaración DQL completa

seleccione 5 campos de consulta
...
de 1 tabla de consulta
...
donde 2 filtros de condiciones
...
agrupar por 3 grupos
...
tener 4 filtros de condiciones
...
ordenar por 6 ordenar
...

1. Eliminar registros duplicados
distintos.

select distinct job from emp;
select distinct deptno,job from emp;

distinto solo puede aparecer al frente de todos los campos y se combinarán varios campos para eliminar la duplicación.

¿Cuenta el número de puestos de trabajo?

 select count(distinct job) from emp;

2. Descripción general de la consulta de conexión
:
en el desarrollo real, la mayoría de los datos no se consultan en una sola tabla, sino que generalmente son consultas conjuntas de varias tablas.
Debido a que hay demasiados campos en una tabla, se repetirá una gran cantidad de datos, lo que provocará redundancia de datos.

3. Clasificación:
Unión interna: Las dos tablas AB tienen una relación igual y no hay distinción entre tablas primarias y secundarias.
Uniones equivalentes
. Uniones no equivalentes.
Autouniones
. Uniones externas: Las dos tablas AB se dividen en primarias. tablas y tablas secundarias. La tabla principal está marcada. Las uniones izquierdas se pueden escribir como uniones derechas, las uniones derechas se pueden escribir como uniones izquierdas, uniones externas izquierdas (uniones izquierdas),
uniones
externas derechas (uniones derechas)
y uniones completas: casi nunca usado. Hay combinaciones izquierda y derecha para encontrar todos los datos en las dos tablas.

4. Fenómeno del producto de Descartes (fenómeno del producto cartesiano):
Insertar descripción de la imagen aquí

Respecto a los alias de tablas:
alta eficiencia de ejecución
y buena legibilidad
14 x 4 = 56 entradas

select e.ename,d.dname from emp e,dept d;

Evite el fenómeno del producto cartesiano: el número de coincidencias sigue siendo 56 (el número de coincidencias no se reducirá), pero solo se muestran los registros válidos.
Descubra el nombre del departamento de cada empleado y solicite que se muestren el nombre del empleado y el nombre del departamento.

select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno; # SQL92,以后不用

5.
La característica más importante de las uniones internas y las uniones equivalentes es que la condición es una relación de equivalencia.
Descubra el nombre del departamento de cada empleado y solicite que se muestren el nombre del empleado y el nombre del departamento.
SQL92: (no utilizado)

select 
 e.ename,d.dname  
from 
 emp e,dept d 
where 
 e.deptno=d.deptno; # SQL92,以后不用

SQL99: (de uso común)

select 
 e.ename,d.dname 
from 
 emp e 
join
 dept d 
on
 e.deptno=d.deptno;

interior: indica conexión interna, interior se puede omitir y el propósito de interior es mejorar la legibilidad.

select 
 e.ename,d.dname 
from 
 emp e 
inner join
 dept d 
on
 e.deptno=d.deptno;

...
Una
unión
B
en
la condición de conexión
donde
...
la estructura es más clara, la condición de conexión de la tabla está separada de la siguiente condición donde

6.
La característica más importante de las uniones no equivalentes en las uniones internas es que la relación en la condición de unión no es equivalente.

Para conocer el grado salarial de cada empleado, es necesario mostrar el nombre del empleado, el salario y el grado salarial.

select 
 e.ename,e.sal,s.grade 
from 
 emp e 
join 
 salgrade s 
on 
 e.sal between s.losal and s.hisal;

7.
La característica más importante de la autounión es que una tabla se considera dos tablas y se unen entre sí.
Las autouniones de tablas pueden ser iguales o desiguales.
empno: número de empleado
ename: nombre del empleado y nombre del líder
mgr: número del líder

select empno,ename,mgr from emp;

emp a 员工表
±------±-------±-----+
| empno | nombre | director |
±------±-------±-----+
| 7369 | HERRERO | 7902 |
| 7499 | ALLEN | 7698 |
| 7521 | GUARDIA | 7698 |
| 7566 | JONES | 7839 |
| 7654 | MARTÍN | 7698 |
| 7698 | BLAKE | 7839 |
| 7782 | CLARK | 7839 |
| 7788 | SCOTT | 7566 |
| 7839 | REY | NULO |
| 7844 | TURNER | 7698 |
| 7876 | ADÁN | 7788 |
| 7900 | JAMES | 7698 |
| 7902 | VADO | 7566 |
| 7934 | MOlinero | 7782 |
±------±-------±-----+

select empno,ename from emp;

tabla de liderazgo emp b
±------±-------±
| empno | ename |
±------±-------+
| 7566 | JONES |
| 7698 | BLAKE |
| 7782 | CLARK |
| 7788 | SCOTT |
| 7839 | KING |
| 7902 | FORD |
±------±-------+

Encuentre el líder superior de cada empleado y solicite que se muestren el nombre del empleado y el nombre del líder correspondiente.

select
 a.ename as '员工名',b.ename as '领导名'
from
 emp a
inner join
 emp b
on
 a.mgr = b.empno;

8. Unión externa (de uso común)
¿Cuál es la diferencia entre unión interna y unión externa?
Unión interna:
suponga que las tablas A y B están conectadas. Si utiliza la unión interna, se pueden consultar todos los registros que pueden coincidir entre la tabla A y la tabla. Esta es una unión interna.
No hay distinción entre las tablas primaria y secundaria AB. Las dos tablas son iguales.

Unión externa:
suponga que las tablas A y B están conectadas. Si usa una unión externa, una de las dos tablas AB es la tabla principal y la otra es la tabla secundaria. Los datos de la tabla principal se consultan principalmente y la secundaria La tabla se consulta como una tabla secundaria, los datos en no coinciden con los datos de la tabla principal y la tabla secundaria simula automáticamente NULL para que coincida.

Clasificación de combinación externa:
Unión externa izquierda (unión izquierda): indica que la tabla de la izquierda es la tabla principal.
Unión externa derecha (unión derecha): indica que la tabla de la derecha es la tabla principal.
Las combinaciones izquierdas se escriben en forma de combinaciones derechas y las combinaciones derechas también se escriben en la forma de combinación izquierda correspondiente.

¿Averiguar quién es el superior de cada empleado? (Todos los empleados deben ser consultados)
Unión externa izquierda (la tabla a es la tabla principal, la tabla b es la tabla secundaria) La
unión externa se puede omitir, la forma de distinguir las uniones internas y externas es a través de izquierda y derecha son uniones externas

select 
 a.ename as '员工名',b.ename as '领导名' 
from 
 emp a 
left outer join 
 emp b 
on  
 a.mgr = b.empno;

Unión exterior derecha (la tabla a es la tabla principal, la tabla b es la tabla secundaria)

select
 a.ename as '员工名',b.ename as '领导名'
from
 emp b
right outer join
 emp a
on
 a.mgr = b.empno;

A menudo se utilizan conexiones externas.
La característica más importante de las conexiones externas es que todos los datos de la tabla principal se pueden consultar incondicionalmente.
Descubra qué departamento no tiene empleados.

select
 d.*
from
 emp e
right join
 dept d
on
 e.deptno=d.deptno
where
 e.empno is null;

9. Combine la consulta entre tres tablas
para averiguar el nombre del departamento y el grado salarial de cada empleado.
tabla de empleados emp e

mysql> select empno,ename,sal,deptno from emp;
+-------+--------+---------+--------+
| empno | ename  | sal     | deptno |
+-------+--------+---------+--------+
|  7369 | SMITH  |  800.00 |     20 |
|  7499 | ALLEN  | 1600.00 |     30 |
|  7521 | WARD   | 1250.00 |     30 |
|  7566 | JONES  | 2975.00 |     20 |
|  7654 | MARTIN | 1250.00 |     30 |
|  7698 | BLAKE  | 2850.00 |     30 |
|  7782 | CLARK  | 2450.00 |     10 |
|  7788 | SCOTT  | 3000.00 |     20 |
|  7839 | KING   | 5000.00 |     10 |
|  7844 | TURNER | 1500.00 |     30 |
|  7876 | ADAMS  | 1100.00 |     20 |
|  7900 | JAMES  |  950.00 |     30 |
|  7902 | FORD   | 3000.00 |     20 |
|  7934 | MILLER | 1300.00 |     10 |
+-------+--------+---------+--------+
14 rows in set (0.00 sec)

mesa del departamento d

mysql> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)

grado salarial de salgrado

mysql> select * from salgrade;
+-------+-------+-------+
| GRADE | LOSAL | HISAL |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+
5 rows in set (0.00 sec)

A
se une
a B
se une a
C
en

Significa: la Tabla A y la Tabla B están conectadas primero, y después de la conexión (el resultado después de la conexión), la Tabla A continúa conectada con la Tabla C.

select
 e.ename,d.dname,s.grade
from
 emp e
join
 dept d
on
 e.deptno=d.deptno
join
 salgrade s
on
 e.sal between s.losal and s.hisal;
+--------+------------+-------+
| ename  | dname      | grade |
+--------+------------+-------+
| SMITH  | RESEARCH   |     1 |
| ALLEN  | SALES      |     3 |
| WARD   | SALES      |     2 |
| JONES  | RESEARCH   |     4 |
| MARTIN | SALES      |     2 |
| BLAKE  | SALES      |     4 |
| CLARK  | ACCOUNTING |     4 |
| SCOTT  | RESEARCH   |     4 |
| KING   | ACCOUNTING |     5 |
| TURNER | SALES      |     3 |
| ADAMS  | RESEARCH   |     1 |
| JAMES  | SALES      |     1 |
| FORD   | RESEARCH   |     4 |
| MILLER | ACCOUNTING |     2 |
+--------+------------+-------+
14 rows in set (0.00 sec)

Descubra el nombre del departamento, el grado salarial y el supervisor de cada empleado.
#e es la tabla principal, e1 es la tabla secundaria

select
 e.ename '员工',d.dname,s.grade,e1.ename '领导'
from
 emp e
join
 dept d
on
 e.deptno=d.deptno
join
 salgrade s
on
 e.sal between s.losal and s.hisal
left join	
 emp e1
on
 e.mgr=e1.empno;
+--------+------------+-------+-------+
| 员工   | dname      | grade | 领导  |
+--------+------------+-------+-------+
| SMITH  | RESEARCH   |     1 | FORD  |
| ALLEN  | SALES      |     3 | BLAKE |
| WARD   | SALES      |     2 | BLAKE |
| JONES  | RESEARCH   |     4 | KING  |
| MARTIN | SALES      |     2 | BLAKE |
| BLAKE  | SALES      |     4 | KING  |
| CLARK  | ACCOUNTING |     4 | KING  |
| SCOTT  | RESEARCH   |     4 | JONES |
| KING   | ACCOUNTING |     5 | NULL  |
| TURNER | SALES      |     3 | BLAKE |
| ADAMS  | RESEARCH   |     1 | SCOTT |
| JAMES  | SALES      |     1 | BLAKE |
| FORD   | RESEARCH   |     4 | JONES |
| MILLER | ACCOUNTING |     2 | CLARK |
+--------+------------+-------+-------+
14 rows in set (0.00 sec)

3. Subconsulta
1. ¿Qué es una subconsulta? ¿Dónde aparecerá la subconsulta?
Las declaraciones de selección están anidadas dentro de declaraciones de selección, y las declaraciones de selección anidadas son subconsultas.
Donde aparece:
seleccione
…(seleccione)
de
…(seleccione)
donde
…(seleccione)

2. Utilice subconsulta en la cláusula donde

Encuentre información sobre empleados que ganan más que el salario promedio.
Paso 1: Encuentra el salario promedio.

select avg(sal) from emp;
+-------------+
| avg(sal)    |
+-------------+
| 2073.214286 |
+-------------+
1 row in set (0.00 sec)

Paso 2: dónde filtrar

select * from emp where sal>2073.214286;
+-------+-------+-----------+------+------------+---------+------+--------+
| EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
+-------+-------+-----------+------+------------+---------+------+--------+
|  7566 | JONES | MANAGER   | 7839 | 1981-04-02 | 2975.00 | NULL |     20 |
|  7698 | BLAKE | MANAGER   | 7839 | 1981-05-01 | 2850.00 | NULL |     30 |
|  7782 | CLARK | MANAGER   | 7839 | 1981-06-09 | 2450.00 | NULL |     10 |
|  7788 | SCOTT | ANALYST   | 7566 | 1987-04-19 | 3000.00 | NULL |     20 |
|  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
|  7902 | FORD  | ANALYST   | 7566 | 1981-12-03 | 3000.00 | NULL |     20 |
+-------+-------+-----------+------+------------+---------+------+--------+
6 rows in set (0.00 sec)

Paso 3: fusionar

select * from emp where sal>(select avg(sal) from emp);
+-------+-------+-----------+------+------------+---------+------+--------+
| EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
+-------+-------+-----------+------+------------+---------+------+--------+
|  7566 | JONES | MANAGER   | 7839 | 1981-04-02 | 2975.00 | NULL |     20 |
|  7698 | BLAKE | MANAGER   | 7839 | 1981-05-01 | 2850.00 | NULL |     30 |
|  7782 | CLARK | MANAGER   | 7839 | 1981-06-09 | 2450.00 | NULL |     10 |
|  7788 | SCOTT | ANALYST   | 7566 | 1987-04-19 | 3000.00 | NULL |     20 |
|  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
|  7902 | FORD  | ANALYST   | 7566 | 1981-12-03 | 3000.00 | NULL |     20 |
+-------+-------+-----------+------+------------+---------+------+--------+
6 rows in set (0.00 sec)

3. Subconsulta anidada detrás de

Encuentre el grado salarial para el salario promedio en cada departamento.
Paso 1: Encuentre el salario promedio de cada departamento (agrupe según el número de departamento y encuentre el salario promedio)

select deptno,avg(sal) as avgsal from emp group by deptno;
+--------+-------------+
| deptno | avgsal      |
+--------+-------------+
|     20 | 2175.000000 |
|     30 | 1566.666667 |
|     10 | 2916.666667 |
+--------+-------------+
3 rows in set (0.00 sec)

Paso 2: Trate el resultado de la consulta anterior como una tabla temporal t y conecte la tabla t a la tabla salgrade s. La condición es: t.avgsal entre s.losal y s.hisal

select
 t.*,s.grade
from
 (select deptno,avg(sal) as avgsal from emp group by deptno) t
join
 salgrade s
on
 t.avgsal between s.losal and s.hisal;
 +--------+-------------+-------+
| deptno | avgsal      | grade |
+--------+-------------+-------+
|     20 | 2175.000000 |     4 |
|     30 | 1566.666667 |     3 |
|     10 | 2916.666667 |     4 |
+--------+-------------+-------+
3 rows in set (0.00 sec)

Encuentre el grado salarial promedio para cada departamento.
Paso 1: Descubra el grado salarial de cada empleado.
tabla de empleados emp e

mysql> select ename,sal from emp;
+--------+---------+
| ename  | sal     |
+--------+---------+
| SMITH  |  800.00 |
| ALLEN  | 1600.00 |
| WARD   | 1250.00 |
| JONES  | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| SCOTT  | 3000.00 |
| KING   | 5000.00 |
| TURNER | 1500.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| FORD   | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
14 rows in set (0.00 sec)

tabla de calificaciones de salgrado

mysql> select * from salgrade;
+-------+-------+-------+
| GRADE | LOSAL | HISAL |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+
5 rows in set (0.00 sec)
mysql> select e.ename,e.sal,e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
+--------+---------+--------+-------+
| ename  | sal     | deptno | grade |
+--------+---------+--------+-------+
| SMITH  |  800.00 |     20 |     1 |
| ALLEN  | 1600.00 |     30 |     3 |
| WARD   | 1250.00 |     30 |     2 |
| JONES  | 2975.00 |     20 |     4 |
| MARTIN | 1250.00 |     30 |     2 |
| BLAKE  | 2850.00 |     30 |     4 |
| CLARK  | 2450.00 |     10 |     4 |
| SCOTT  | 3000.00 |     20 |     4 |
| KING   | 5000.00 |     10 |     5 |
| TURNER | 1500.00 |     30 |     3 |
| ADAMS  | 1100.00 |     20 |     1 |
| JAMES  |  950.00 |     30 |     1 |
| FORD   | 3000.00 |     20 |     4 |
| MILLER | 1300.00 |     10 |     2 |
+--------+---------+--------+-------+
14 rows in set (0.00 sec)

Paso 2: Según los resultados anteriores, continúe agrupando por departamento y encuentre la calificación promedio.

select
 e.deptno,avg(s.grade)
from
 emp e
join
 salgrade s
on
 e.sal between s.losal and s.hisal
group by
 e.deptno;
+--------+--------------+
| deptno | avg(s.grade) |
+--------+--------------+
|     20 |       2.8000 |
|     30 |       2.5000 |
|     10 |       3.6667 |
+--------+--------------+
3 rows in set (0.00 sec)

4. Subconsulta anidada después de seleccionar

Descubra el nombre del departamento de cada empleado y solicite que se muestren el nombre del empleado y el nombre del departamento.
Los siguientes resultados son los mismos.

select
 e.ename,d.dname
from
 emp e
join
 dept d
on 
 e.deptno=d.deptno;
select
 e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname
from
 emp e;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | RESEARCH   |
| ALLEN  | SALES      |
| WARD   | SALES      |
| JONES  | RESEARCH   |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| CLARK  | ACCOUNTING |
| SCOTT  | RESEARCH   |
| KING   | ACCOUNTING |
| TURNER | SALES      |
| ADAMS  | RESEARCH   |
| JAMES  | SALES      |
| FORD   | RESEARCH   |
| MILLER | ACCOUNTING |
+--------+------------+
14 rows in set (0.00 sec)

4. ¿Sindicato (puede agregar los conjuntos de resultados de la consulta)
para averiguar los empleados cuyos puestos salariales son VENDEDOR y GERENTE?
El primer tipo: o

select ename,job from emp where job='MANAGER' or job='SALESMAN';

El segundo tipo: en

select ename,job from emp where job in('MANAGER','SALESMAN');
+--------+----------+
| ename  | job      |
+--------+----------+
| ALLEN  | SALESMAN |
| WARD   | SALESMAN |
| JONES  | MANAGER  |
| MARTIN | SALESMAN |
| BLAKE  | MANAGER  |
| CLARK  | MANAGER  |
| TURNER | SALESMAN |
+--------+----------+
7 rows in set (0.00 sec)

El tercer tipo: unión

select ename,job from emp where job = 'MANAGER' union select ename,job from emp where job = 'SALESMAN';
+--------+----------+
| ename  | job      |
+--------+----------+
| JONES  | MANAGER  |
| BLAKE  | MANAGER  |
| CLARK  | MANAGER  |
| ALLEN  | SALESMAN |
| WARD   | SALESMAN |
| MARTIN | SALESMAN |
| TURNER | SALESMAN |
+--------+----------+
7 rows in set (0.01 sec)

unión: los datos de dos tablas no relacionadas se unen y se muestran.
unión: el número de campos después de la selección debe ser el mismo cuando se usa.

5. El límite de consultas de paginación
es exclusivo de MySQL y no está disponible en otras bases de datos, por lo que no se aprobará. (Existe un mecanismo similar en Oracle, llamado rownum)
limit toma parte de los datos en el conjunto de resultados, esa es su función.
Mecanismo de sintaxis:
límite startIndex, longitud
startIndex indica la posición inicial, comenzando desde 0, 0 indica el primer dato,
longitud indica cuántos tomar, si escribe un número directamente, el valor predeterminado es 0.

Saque los 5 mejores empleados por salario (idea: tome los 5 mejores en orden descendente)

select ename,sal from emp order by sal desc; 

# 取前5个  limit 0,5
select ename,sal from emp order by sal desc limit 0,5; 
+-------+---------+
| ename | sal     |
+-------+---------+
| KING  | 5000.00 |
| FORD  | 3000.00 |
| SCOTT | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)

# 取前5个,limit 5,直接写一个数字的话,前面默认就是0
select ename,sal from emp order by sal desc limit 5; 
+-------+---------+
| ename | sal     |
+-------+---------+
| KING  | 5000.00 |
| FORD  | 3000.00 |
| SCOTT | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)

limitista es el último paso en la ejecución de la declaración SQL

select		5
 ...
from		1
 ...
where		2
 ...
group by	3
 ...
having		4
 ...
order by	6
 ...
limit		7
 ...

¿Encuentre los empleados cuyo salario se ubica del 4 al 9?

select ename,sal from emp order by sal desc limit 3,6;
+--------+---------+
| ename  | sal     |
+--------+---------+
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
+--------+---------+
6 rows in set (0.00 sec)

6. ¿SQL de paginación estándar común?
Cada página muestra 3 registros:
Página 1: 0, 3 (0, 1,
2) Página 2: 3, 3 (3, 4, 5)
Página 3: 6, 3 (6, 7, 8
) Página 4: 9, 3 (9, 10, 11)
Página 5: 12, 3 (12, 13, 14)

Mostrar registros de tamaño de página por página:
número de página: (número de página - 1) * tamaño de página, tamaño de página

pageNo: qué página se muestra
pageSize: cuántos registros se muestran en cada página

java代码{
    
    
	int pageNo = 2;	// 页码2
	int pageSize = 10; // 每页显示10条
	
	limit (pageNo - 1) * pageSize, pageSize
	limit (2 - 1) * 10, pageSize
	limit 10,10
}

6. Cree
el formato de sintaxis de la tabla:

create table 表名(
	字段名1 数据类型,
	字段名2 数据类型,
	字段名3 数据类型,
	......
);

Con respecto a los tipos de datos de los campos en MySQL, los tipos de datos comunes son
tipo entero int (int en Java)
bigint tipo entero largo (long en Java)
float tipo punto flotante (float double en Java)
char cadena de longitud fija (String)
varchar cadena de longitud variable (StringBuffer StringBuilder) 255
fecha tipo de fecha (java.sql.Date tipo en Java)
objeto grande binario blob (almacenamiento de información multimedia como imágenes y videos) (Objeto en Java)
objeto grande de carácter clob (almacenamiento Texto más grande , por ejemplo, puede almacenar cadenas 4G) (Objeto en Java)

¿Cómo elegir entre char y varchar?
En el desarrollo real, cuando la longitud de los datos en un determinado campo no cambia, es una longitud fija, como el sexo, la fecha de nacimiento, etc., todos son caracteres.
Cuando la longitud de los datos de un campo es incierta, como introducción, nombre, etc., se utiliza varchar.

¿Uso de tipos blob y clob?
Debe utilizar la transmisión IO.
Los tipos de medios generalmente no los colocan directamente en la base de datos, sino que los datos del tipo de medio se colocan en la base de datos a través de una ruta, que generalmente usa el tipo char o varchar.

Tabla de películas: t_movie

id(int) nombre(varchar) tiempo de reproducción(fecha/char) haibao(blob) historial(clob)
1 Spider-Man
2
3

Generalmente se recomienda que el nombre de la tabla en la base de datos comience con t_ o tbl_

Cree una tabla de estudiantes:
la información del estudiante incluye:
ID de estudiante, nombre, sexo, número de clase, fecha de nacimiento
ID de estudiante: bigint
Nombre: varchar
Género: char
ID de clase: varchar
Cumpleaños: char

create table t_student(
	no bigint,
	name varchar(255),
	sex char(1),
	classno varchar(255),
	birth char(10)
);

7. La declaración de inserción inserta datos
Formato de sintaxis:
Requisitos: el número de campos y el número de valores son los mismos, y los tipos de datos deben ser los mismos.

insert into 表名(字段名1,字段名2,字段名3,...) values(1,2,3,...);
insert into t_student(no,name,sex,classno,birth) values(1,'zhangsan','1','gaosan1ban','1950-10-12');

El orden de los campos se puede cambiar, pero el anverso y el reverso deben corresponder.

insert into t_student(name,sex,classno,birth,no) values('lisi','1','gaosan1ban','1950-10-12',2);

Puede escribir un campo y NULL se insertará automáticamente en todos los campos restantes.

insert into t_student(name) values('wangwu');


soltar tabla si existe t_student; # Eliminar el valor predeterminado cuando esta tabla existe

create table t_student(
	no bigint,
	name varchar(255),
	sex char(1) default 1,
	classno varchar(255),
	birth char(10)
);
insert into t_student(name) values('zhangsan');
select * from t_student;
+------+----------+------+---------+-------+
| no   | name     | sex  | classno | birth |
+------+----------+------+---------+-------+
| NULL | zhangsan | 1    | NULL    | NULL  |
+------+----------+------+---------+-------+

Nota: Cuando una instrucción de inserción se ejecuta correctamente, inevitablemente habrá una fila más de registros en la tabla.
Incluso si algunos campos en esta fila de registros son NULL, no hay forma de ejecutarlos más adelante.
La declaración de inserción inserta datos y solo se puede actualizar mediante actualización.

Los campos se pueden omitir, pero los siguientes valores tienen requisitos de cantidad y pedido.

insert into t_student values(1,'jack','0','gaosan2ban','1986-10-23');

Insertar varios registros

insert into t_student
 (no,name,sex,classno,birth) 
values
 (3,'rose','1','gaosi2ban','1952-12-14'),
 (4,'laotie','1','gaosi2ban','1952-12-19');

8.
Sintaxis de copia de tabla:

create table 表面 as select语句;

Cree los resultados de la consulta como una tabla.

 create table emp1 as select * from emp;
 create table emp2 as select empno,ename from emp;

9. Inserte los resultados de la consulta en una tabla.
Existen requisitos para insertar campos y el número de campos debe corresponder.

insert into dept1 select * from dept;

10. Modificar datos: actualizar
el formato de sintaxis:

	update 表名 set 字段名1=1,字段名2=2... where 条件;

Nota: No existe ninguna condición para que se actualicen todos los datos de la tabla completa.

Cambie la LOC del departamento 10 a SHANGHAI y el nombre del departamento a RENSHIBU

update dept1 set loc='SHANGHAI',dname='RENSHIBU' where deptno=10;

Actualizar todos los registros

update dept1 set loc='x', dname='y';

11. Eliminar
el formato de sintaxis de datos:

delete from 表名 where 条件;

Nota: Eliminar todo sin condiciones.

¿Eliminar datos de 10 departamentos?

delete from dept1 where deptno=10;

¿Eliminar todos los registros?

delete from dept1;

¿Cómo eliminar una tabla grande? (énfasis)

 truncate table emp1;	# 表被截断,不可回滚,永久丢失。

12. Modifique la estructura de la tabla.
Simplemente use la herramienta directamente. En circunstancias normales, una vez diseñada la tabla, rara vez es necesario modificar la estructura de la tabla.
Las declaraciones que modifican la estructura de la tabla no aparecerán en el código Java, solo insertar eliminar actualizar seleccionar, que son todas operaciones de datos en la tabla.
Existe un término para agregar, eliminar, modificar y consultar: Operación CRUD
crear (agregar)
Recuperar (recuperar)
Actualizar (modificar)
Eliminar (eliminar)

13. Restricción
¿Qué es una restricción? ¿Cuáles son las limitaciones comunes?
Al crear una tabla, puede agregar las restricciones correspondientes a los campos de la tabla. El propósito de agregar restricciones es garantizar la legalidad, validez e integridad de los datos de la tabla.
¿Cuáles son las limitaciones comunes?
Restricción no nula (no nula): el campo restringido no puede ser NULL.
Restricción única: el campo restringido no se puede repetir.
Restricción de clave primaria (clave principal): el campo restringido no puede ser NULL ni repetido (denominado PK)
. restricción de clave (clave externa):... (denominada FK)
restricción de verificación (verificación): tenga en cuenta que la base de datos Oracle tiene una restricción de verificación, pero MySQL no. Actualmente, MySQL no admite esta restricción.

14. Restricción no nula no nula

drop table if exists t_user;
create table t_user(
	id int,
	username varchar(255) not null,
	password varchar(255)
);
	insert into t_user(id,username,password) values(1,'lisi','123');

1. Restricción única (única)
El campo modificado por la restricción única es único y no se puede repetir. Pero puede ser NULL.
Restricciones a nivel de columna
Restricciones a nivel de tabla

Caso: agregar único a una determinada columna

drop table if exists t_user;
create table t_user(
	id int,
	username varchar(255) unique	# 列级约束,可以使用表级约束来添加一个字段,效果一样
);
insert into t_user values(1,'zhangsan');
insert into t_user values(2,'zhangsan');	# ERROR 1062 (23000): Duplicate entry 'zhangsan' for key 'username'(字段重复报错 )
insert into t_user(id) values(2);
insert into t_user(id) values(3);
insert into t_user(id) values(4);

Caso: agregar exclusivo a dos o más columnas

drop table if exists t_user;
create table t_user(
	id int,
	usercode varchar(255),
	username varchar(255),
	unique(usercode,username)	# 多个字段联合起来添加约束,不能重复,就添加了一个约束(表级约束)
);
insert into t_user values(1,'111','zs');
insert into t_user values(2,'111','ls');
insert into t_user values(3,'222','zs');
insert into t_user values(3,'111','zs');	# ERROR 1062 (23000): Duplicate entry '111-zs' for key 'usercode'
select * from t_user;

drop table if exists t_user;
create table t_user(
	id int,
	usercode varchar(255) unique,
	username varchar(255) unique
);
insert into t_user values(1,'111','zs');
insert into t_user values(2,'111','ls');	# ERROR 1062 (23000): Duplicate entry '111' for key 'usercode'
select * from t_user;

Nota: las restricciones no nulas solo tienen restricciones a nivel de columna, no restricciones a nivel de tabla.

2. Restricciones de clave principal
¿Cómo agregar restricciones de clave principal a una tabla?

drop table if exists t_user;
create table t_user(
	id int primary key,		// 列级约束
	username varchar(255),
	email varchar(255)
);
insert into t_user(id,username,email) values(1,'zs','[email protected]');
insert into t_user(id,username,email) values(2,'ls','[email protected]');
insert into t_user(id,username,email) values(3,'ww','[email protected]');
select * from t_user;

insert into t_user(id,username,email) values(1,'jack','[email protected]');	# ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
insert into t_user(username,email) values('jack','[email protected]');	# ERROR 1364 (HY000): Field 'id' doesn't have a default value

Resumen: la identificación es la clave principal. Debido a que se agrega la restricción de la clave principal, los datos en el campo de la clave principal no pueden ser NULL ni repetirse.
Características de la clave primaria: No puede ser NULL ni repetida (única).
Terminología relacionada con la clave principal:
Restricción de clave principal: clave principal
Campo de clave principal: después de agregar la clave principal al campo de identificación, la identificación se denomina campo de clave principal
Valor de clave principal: cada valor en el campo de identificación es el valor de clave principal

¿Cuál es el papel de la clave principal?
Existen requisitos en los tres paradigmas del diseño de tablas. El primer paradigma requiere que cualquier tabla tenga una clave principal.
La función de la clave principal: el valor de la clave principal es el identificador único de esta fila registrada en esta tabla. (Igual que el número de identificación de una persona)

Clasificación de claves primarias:
dividida según la cantidad de campos en el campo de clave primaria:
clave primaria única (recomendada, de uso común)
clave primaria compuesta (múltiples campos combinados para agregar una restricción de clave primaria) (no se recomiendan claves primarias compuestas porque son compuestas Las claves primarias violan los tres paradigmas) según la
naturaleza de la clave primaria. Para dividir:
Clave primaria natural: El valor de la clave primaria es preferiblemente un número natural que no tiene nada que ver con el negocio. (Recomendado, de uso común)
Clave principal comercial: el valor de la clave principal está vinculado al negocio del sistema, por ejemplo, use el número de tarjeta bancaria como clave principal y el número de tarjeta de identificación como clave principal. (No recomendado)
Es mejor no utilizar campos vinculados al negocio como claves principales. Porque una vez que el negocio cambie en el futuro, es posible que el valor de la clave principal también deba cambiar, pero a veces no hay forma de cambiarlo, porque el cambio puede hacer que el valor de la clave principal se repita.

Una tabla sólo puede tener una restricción de clave principal. (debe recordar)

Defina la clave principal utilizando restricciones a nivel de tabla:

drop table if exists t_user;
create table t_user(
	id int,
	username varchar(255),
	primary key(id)
);
insert into t_user(id,username) values(1,'zs');
insert into t_user(id,username) values(2,'ls');
insert into t_user(id,username) values(3,'ww');
insert into t_user(id,username) values(4,'cs');
select * from t_user;

insert into t_user(id,username) values(4,'cs');	# ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'

mysql proporciona incremento automático del valor de la clave principal: (auto_increment) (énfasis)

drop table if exists t_user;
create table t_user(
	id int primary key auto_increment,	# id字段自动维护一个自增的数据,从1开始,以1递增。
	username varchar(255)
);
insert into t_user(username) values('a');
insert into t_user(username) values('b');
insert into t_user(username) values('c');
insert into t_user(username) values('e');
insert into t_user(username) values('e');
insert into t_user(username) values('f');
select * from t_user;

Consejo: Oracle también proporciona un mecanismo de incremento automático llamado: objeto de secuencia.

3. Restricciones de clave externa
Términos relacionados:
Restricciones de clave externa: clave externa, el valor de la restricción de clave externa no se puede escribir de manera incidental, debe provenir del valor de un campo en una tabla determinada y el campo al que se hace referencia debe ser único.
Campo de clave externa: agregue un campo con una restricción de clave externa.
Valor de clave externa: cada valor en el campo de clave externa.

Antecedentes comerciales:
¿diseña una tabla de base de datos para mantener la información de los estudiantes y las clases?
La primera opción: una tabla almacena todos los datos no
(pk) nombre clase no nombre de clase
1 zs1 101 Clase 1, grado 3, escuela secundaria Yizhuang No. 2, zona de desarrollo económico y tecnológico del distrito de Daxing,
Beijing 2 zs2 101 Clase 1, grado 3, Yizhuang Escuela Secundaria No. 2, Zona de Desarrollo Económico y Tecnológico del Distrito de Daxing, Beijing
3 zs3 102 Clase 2, Clase 2, Senior 3, Escuela Secundaria No. 2 de Yizhuang, Zona de Desarrollo Económico y Tecnológico, Distrito de Daxing, Beijing 4 zs4
102 Clase 2, Clase 3, Senior 3, Escuela Secundaria Yizhuang No. 2, Zona de Desarrollo Económico y Tecnológico del Distrito de Daxing, Beijing 5 zs5 102 Clase 2, Senior 3, Escuela Secundaria Yizhuang No. 2, Zona de Desarrollo Económico y Tecnológico del Distrito de Daxing, Beijing Desventajas
:
Redundante (no recomendado)

第二种方案:两张表(班级表和学生表)
t_class	班级表
cno(pk)		cname
101			北京大兴区经济技术开发区亦庄二中高三1班
102			北京大兴区经济技术开发区亦庄二中高三2班

t_student	学生表
sno(pk)		sname			classno(该字段添加外键约束fk)
1					zs1				101
2					zs2				101
3					zs3				102
4					zs4				102
5					zs5				102

Escriba la declaración de creación de la tabla para la tabla anterior:
el campo classno en t_student se refiere al campo cno en la tabla t_class. En este momento, la tabla t_student se denomina tabla secundaria. La tabla t_class se llama tabla principal.

Requisitos de secuencia: (primero agregue la tabla principal, elimine primero la tabla secundaria)
Al eliminar datos, elimine primero la tabla secundaria y luego elimine la tabla principal.
Al agregar datos, agregue primero la tabla principal y luego la tabla secundaria.
Al crear una tabla, primero cree la tabla principal y luego cree la tabla secundaria.
Al eliminar una tabla, elimine primero la tabla secundaria y luego la tabla principal.

drop table if exists t_student;
drop table if exists t_class;

create table t_class(
	cno int,
	cname varchar(255),
	primary key(cno)
);

create table t_student(
	sno int,
	sname varchar(255),
	classno int,
	foreign key(classno) references t_class(cno)
);

insert into t_class values(101,'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
insert into t_class values(102,'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy');

insert into t_student values(1,'zs1',101);
insert into t_student values(2,'zs2',101);
insert into t_student values(3,'zs3',102);
insert into t_student values(4,'zs4',102);
insert into t_student values(5,'zs5',102);
insert into t_student values(6,'zs6',102);

select * from t_class;
select * from t_student;

insert into t_student values(7,'lisi',103); # ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`staff`.`t_student`, CONSTRAINT `t_student_ibfk_1` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))

Las claves externas pueden ser NULL.
El campo referenciado no necesariamente tiene que ser la clave primaria, pero al menos tiene una restricción de unicidad, generalmente se refiere a la clave primaria.

Motor de almacenamiento (comprensión)

1. La declaración completa de creación de la tabla se escribe así

CREATE TABLE `t_x` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

Nota: En MySQL, todos los identificadores pueden estar encerrados entre símbolos. Es mejor no usarlo, no es universal.
Al crear una tabla, puede especificar el motor de almacenamiento y el juego de caracteres.
El motor de almacenamiento predeterminado utilizado por mysql es InnoDB.
El juego de caracteres predeterminado es UTF-8.

2. ¿Cuál es su motor de almacenamiento?
El motor de almacenamiento de nombres solo existe en mysql. (Existe un mecanismo correspondiente en Oracle, pero no se llama motor de almacenamiento. No hay un nombre especial en Oracle. Es el método de almacenamiento de la tabla). El motor de almacenamiento
es el método de almacenamiento de la tabla.
MySQL admite muchos motores de almacenamiento y cada motor de almacenamiento corresponde a un método de almacenamiento diferente.
Cada motor de almacenamiento tiene sus propias ventajas y desventajas, y es necesario elegir el motor de almacenamiento adecuado en el momento adecuado.

3. Verifique los motores de almacenamiento actualmente compatibles con MySQL.

show engines \G

Hay 9 motores de almacenamiento compatibles con mysql8

4. Motores de almacenamiento comunes

Motor de almacenamiento MyISAM

      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO

Los motores de almacenamiento como MyISAM no admiten transacciones.
MyISAM es el motor de almacenamiento más utilizado para MySQL, pero este motor no es el predeterminado.
MyISAM utiliza tres archivos para organizar una tabla:
xxx.frm (archivo que almacena el formato)
xxx.MYD (archivo que almacena los datos de la tabla)
xxx.MYI (archivo que almacena el índice de la tabla)
Ventajas: Se puede comprimir , ahorrando espacio de almacenamiento. Y se puede convertir en una tabla de solo lectura para mejorar la eficiencia de la recuperación.
Desventajas: no se admiten transacciones.

Motor de almacenamiento InnoDB (motor de almacenamiento predeterminado, de uso común)

      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES

Ventajas: admite transacciones, bloqueos a nivel de fila, claves externas, etc. La seguridad de los datos en este motor de almacenamiento está garantizada.

La estructura de la tabla se almacena en el archivo xxx.frm y
los datos se almacenan en un espacio de tabla (concepto lógico) como el espacio de tabla, que no se puede comprimir ni convertir en lectura automática.
Este motor de almacenamiento InnoDB proporciona un mecanismo de recuperación automática después de una falla de la base de datos MySQL.
InnoDB admite eliminación y actualización en cascada.

Motor de almacenamiento de MEMORIA

      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO

Desventajas: no se admiten transacciones. Los datos se perderán después de un corte de energía. Porque todos los datos e índices se almacenan en la memoria.
Ventajas: La velocidad de consulta más rápida.

ver (comprender)

Ver: observe los datos desde diferentes ángulos. (Los datos de una misma tabla se pueden ver desde diferentes ángulos)

Crear y eliminar vistas:

create view myview as select empno,ename from emp;
drop view myview

Nota: Solo se pueden crear declaraciones DQL como objetos de vista.

Agregar, eliminar, modificar y consultar vistas afectará los datos de la tabla original. (Los datos de la tabla original se ven afectados a través de la vista, no la tabla original que se opera directamente).
Las operaciones CRUD se pueden realizar en la vista.

Operaciones orientadas a la vista:

select * from myview;
+-------+--------+
| empno | ename  |
+-------+--------+
|  7369 | SMITH  |
|  7499 | ALLEN  |
|  7521 | WARD   |
|  7566 | JONES  |
|  7654 | MARTIN |
|  7698 | BLAKE  |
|  7782 | CLARK  |
|  7788 | SCOTT  |
|  7839 | KING   |
|  7844 | TURNER |
|  7876 | ADAMS  |
|  7900 | JAMES  |
|  7902 | FORD   |
|  7934 | MILLER |
+-------+--------+
create table emp_bak as select * from emp;
create view myview1 as select empno,ename,sal from emp_bak;
update myview1 set ename='hehe',sal=1 where empno=7369;	# 通过视图修改原表数据
delete from myview1 where empno=7369;	# 通过视图删除原表数据

Función de vista: las vistas pueden ocultar los detalles de implementación de la tabla. En sistemas con niveles de confidencialidad más altos, la base de datos solo proporciona vistas relevantes al mundo exterior y los programadores de Java solo realizan CRUD en los objetos de vista.

Importación y exportación de datos de bases de datos (comandos DBA)

Exportar toda la base de datos: ejecutar en la ventana de comando DOS

mysqldump 数据库>D:\数据库.sql -uroot -p密码

Exporte la tabla especificada en la biblioteca especificada: ejecútela en la ventana de comando DOS

mysqldump 数据库 表名>D:\数据库.sql -uroot -p密码

Datos de importacion:

create database 数据库;	
use 数据库;
source D:\数据库.sql

Transacción

1. ¿Qué es una transacción?
Una transacción es una unidad de lógica empresarial completa y no se puede dividir más.
Por ejemplo: transferencia de cuenta bancaria, transferir 10,000 de la cuenta A a la cuenta B, requiere ejecutar dos declaraciones de actualización.

update t_act set balance=balance-1000 where actno='act-001';
update t_act set balance=balance+1000 where actno='act-002';

Las dos declaraciones DML anteriores deben tener éxito o fallar al mismo tiempo. No se permite un éxito y un fracaso.
Para garantizar que las dos declaraciones DML anteriores tengan éxito o fallen al mismo tiempo, debe utilizar el "mecanismo de transacción" de la base de datos.

2. Las únicas declaraciones relacionadas con transacciones son: declaraciones DML. (insertar eliminar actualización)
Porque estas tres declaraciones están relacionadas con los "datos" en la tabla de la base de datos.
Las transacciones existen para garantizar la integridad y seguridad de los datos.

3. Suponiendo que todos los negocios se puedan completar utilizando una declaración DML, ¿aún se necesita un mecanismo de transacción?
No se requiere transacción.
Pero la situación real no es así: por lo general, una cosa (transacción [negocio]) requiere que se completen conjuntamente varias declaraciones DML.

4. ¿Cuáles son las características de la transacción?
Las transacciones incluyen cuatro características principales: ACID
A: Atomicidad: Una transacción es la unidad de trabajo más pequeña y no se puede dividir más.
C: Consistencia: la transacción debe garantizar que varias declaraciones DML tengan éxito o fallen al mismo tiempo.
I: Aislamiento: Existe aislamiento entre la transacción A y la transacción B.
D: Persistencia: los datos finales deben persistir en el archivo del disco duro antes de que la transacción finalice exitosamente.

5. Con respecto al aislamiento entre transacciones
. Existen niveles de aislamiento para el aislamiento de transacciones. Teóricamente, hay 4 niveles de aislamiento:
Nivel 1: lectura no confirmada (lectura no confirmada).
La transacción de la otra parte aún no se ha enviado. Nuestra transacción actual puede leer el datos enviados no comprometidos de la otra parte.
Hay un fenómeno de lectura sucia cuando la lectura no se confirma: significa que se han leído datos sucios.
Nivel 2: Lectura confirmada (lectura confirmada)
Nosotros podemos leer los datos después de enviar la transacción de la otra parte.
Este nivel de aislamiento resuelve el problema: el fenómeno de lectura sucia desaparece.
El problema con la lectura de los datos enviados es que no se pueden leer repetidamente.
Nivel 3: lectura repetible (lectura repetible)
Este nivel de aislamiento resuelve el problema de la lectura no repetible.
El problema con este nivel de aislamiento es que los datos leídos son fantasmas.
El cuarto nivel: lectura serializada / lectura serializable (serializable)
resuelve todos los problemas.
baja eficiencia. Requiere cola de transacciones.
El nivel de aislamiento predeterminado de la base de datos Oracle es: lectura confirmada.
El nivel de aislamiento predeterminado de la base de datos MySQL es: lectura repetible.

6. Transacción de demostración
La transacción MySQL se confirma automáticamente de forma predeterminada.
(¿Qué es el envío automático? Siempre que se ejecute cualquier declaración DML, se envía una vez). ¿Cómo desactivar el envío automático? iniciar la transacción;
si desea guardar el punto, volverá al punto de guardado.

Crear mesa:

drop table if exists t_user;
create table t_user(
	id int primary key auto_increment,
	username varchar(255)
);

Demostración: las transacciones en mysql se envían automáticamente, siempre que se ejecute un DML, se enviará una vez.

mysql> insert into t_user(username) values('zs');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
|  1 | zs       |
+----+----------+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
|  1 | zs       |
+----+----------+
1 row in set (0.00 sec)

Demostración: utilice iniciar transacción para desactivar las transacciones de confirmación automática.
Retroceder

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_user(username) values('lisi');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_user(username) values('wangwu');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
|  1 | zs       |
|  2 | lisi     |
|  3 | wangwu   |
+----+----------+
3 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
|  1 | zs       |
+----+----------+
1 row in set (0.00 sec)

entregar

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_user(username) values('wangwu');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_user(username) values('reos');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_user(username) values('jack');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
|  1 | zs       |
|  4 | wangwu   |
|  5 | reos     |
|  6 | jack     |
+----+----------+
4 rows in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
|  1 | zs       |
|  4 | wangwu   |
|  5 | reos     |
|  6 | jack     |
+----+----------+
4 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
|  1 | zs       |
|  4 | wangwu   |
|  5 | reos     |
|  6 | jack     |
+----+----------+
4 rows in set (0.00 sec)

índice

1. ¿Qué es un índice? ¿Cuál es el uso?
El índice equivale al índice de un libro, a través del cual se pueden encontrar rápidamente los recursos correspondientes.
En términos de bases de datos, existen dos métodos de recuperación al consultar una tabla:
el primer método: escaneo completo de la tabla,
el segundo método: recuperación basada en índice (muy eficiente) ¿
Por qué los índices pueden mejorar la eficiencia de recuperación?
De hecho, el principio más fundamental es reducir el alcance del escaneo.
Aunque los índices pueden mejorar la eficiencia de la recuperación, no se pueden agregar arbitrariamente porque los índices también son objetos en la base de datos y requieren un mantenimiento constante de la base de datos. Hay costos de mantenimiento. Por ejemplo, si los datos de la tabla se modifican con frecuencia, no es adecuado agregar un índice, porque una vez que se modifican los datos, el índice debe reordenarse y mantenerse.

Agregar un índice es agregar un índice a un determinado campo, o algunos campos.

select ename,sal from emp where ename='SMITH';

Cuando no se agrega ningún índice al campo ename, la declaración SQL anterior realizará un escaneo completo de la tabla y escaneará todos los valores en el campo ename.
Cuando se agrega un índice al campo ename, la declaración SQL anterior se escaneará de acuerdo con el índice para localizarla rápidamente.

2. ¿Cómo crear un objeto de índice? ¿Cómo eliminar objetos de índice?
Crea un objeto de índice:

create index 索引名称 on 表名(字段名);

Eliminar objetos de índice:

drop index 索引名称 on 表名;

3. ¿Cuándo debería considerar agregar índices a los campos? (qué condiciones se cumplen)

  • Gran cantidad de datos (según las necesidades del cliente y el entorno online)
  • Hay muy pocas operaciones DML en este campo (porque el campo debe modificarse y el índice también debe mantenerse)
  • Este campo suele aparecer en la cláusula dónde (en base a qué campo se consulta a menudo)

4. Nota: Los índices se agregarán automáticamente a las claves primarias y a los campos con restricciones únicas.
La consulta basada en la clave principal es más eficiente. Intente buscar según la clave principal.

5. Verifique el plan de ejecución de la declaración sql (explicar),
solo MySQL lo tiene.

mysql> explain select ename,sal from emp where sal = 5000;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   14 |    10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+

Agregue un índice al campo salario sal:

create index emp_sal_index on emp(sal);
mysql> explain select ename,sal from emp where sal = 5000;
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key           | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | emp   | NULL       | ref  | emp_sal_index | emp_sal_index | 9       | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+

6. La estructura de datos utilizada en la parte inferior del índice es: B + Árbol

7. ¿Cómo se implementa el índice?
El alcance del escaneo se reduce a través del árbol B, y el índice subyacente se ordena y divide. El índice llevará la "dirección física" de los datos en la tabla. Finalmente, después de que los datos se recuperan a través del índice, la dirección física asociada
es Se obtiene y la dirección física se utiliza para ubicar los datos en la tabla Datos, la eficiencia es la más alta.

select ename from emp where ename='SMITH';
通过索引转换为:
select ename from emp where 物理地址=0x3;

8. ¿Clasificación del índice?
Índice único: agrega un índice a un solo campo.
Índice compuesto: agrega un índice a múltiples campos.
Índice de clave principal: se agrega automáticamente un índice a la clave principal.
Índice único: se agrega automáticamente un índice a campos con restricciones únicas.

9. ¿Cuándo vence el índice?
Al realizar una consulta difusa, el primer carácter comodín es %, y el índice no es válido en este momento.

select ename from emp where ename like '%A%';

Tres especificaciones de diseño principales para bases de datos (contenido clave, preguntado con frecuencia en entrevistas)

1. ¿Qué es un paradigma de diseño?
La base para diseñar tablas es que las tablas diseñadas de acuerdo con estos tres paradigmas no tendrán redundancia de datos.

2. ¿Cuáles son los tres paradigmas?
Primera forma normal: cualquier tabla debe tener una clave principal y cada campo debe ser atómico e irreducible.
Segunda forma normal: según la primera forma normal, todos los campos de clave no principal dependen completamente de la clave principal y no pueden producir dependencias parciales.
Muchos a muchos, tres tablas, dos claves foráneas en la tabla relacional.

t_student学生表
sno(pk)				sname
1					张三
2					李四
3					王五

t_teacher讲师表
tno				tname
1					王老师
2					张老师
3					李老师

t_student_teacher_relation	学生讲师关系表
id(pk)		sno(fk)		tno(fk)
1				1				3
2				1				1
3				2				2
4				2				3
5				3				1
6				3				3

Tercera forma normal: según la segunda forma normal, todos los campos de clave no principal dependen directamente de la clave principal y no pueden producir dependencias transitivas.
Uno a muchos, dos tablas, muchas tablas más claves externas.

班级t_class
cno(pk)		cname
1					a
2					b
3					c
4					d

学生t_student
sno(pk)			sname			classnoo(fk)
101					张1				1
102					张2				1
103					张3				2
104					张4				2
105					张5				2

Recordatorio (puede decirlo durante la entrevista): en el desarrollo real, la atención se centra en satisfacer las necesidades del cliente y, a veces, se cambia la redundancia por la velocidad de ejecución.

3. ¿Cómo diseñar uno a uno?
Hay dos opciones para el diseño uno a uno: compartir clave principal
tabla de inicio de sesión de usuario t_user_login

id(pk)		username		password
1			zs				123
2			ls				456

t_user_detail tabla de detalles del usuario

id(pk)		realname		tel
1			张三				111111111
2			李四				111132321

Hay dos opciones para el diseño uno a uno: clave externa única
tabla de inicio de sesión de usuario t_user_login

id(pk)		username		password
1			zs				123
2			ls				456

t_user_detail tabla de detalles del usuario

id(pk)		realname		tel					userid(fk+unique)
1			张三				111111111			2
2			李四				111132321			1

orden de ejecución SQL

(1) FROM [left_table] 选择表

(2) ON <join_condition> 链接条件

(3) <join_type> JOIN <right_table> 链接

(4) WHERE <where_condition> 条件过滤

(5) GROUP BY <group_by_list> 分组

(6) AGG_FUNC(column or expression),... 聚合/分组

(7) HAVING <having_condition> 分组过滤

(8) SELECT (9) DISTINCT column,... 选择字段、去重

(9) ORDER BY <order_by_list> 排序

(10) LIMIT count OFFSET count; 分页

Funciones comunes

La base de datos MySQL proporciona funciones ricas, similares a los métodos de Java.

función inferior ()

​ Este campo está todo convertido a minúsculas.

​ INFERIOR(nombre del campo str)

select lower(ename) from emp;
función superior ()

​ Este campo se convierte a todas las letras mayúsculas.

​ SUPERIOR(nombre del campo str)

función longitud()

Longitud del campo de consulta, una letra cuenta como un carácter y un carácter chino cuenta como tres caracteres

​ LONGITUD(nombre del campo str)

función concat()

​ Empalme de cuerdas

CONCAT (nombre del campo Str, contenido de empalme Str, contenido de empalme Str...)

función substr()

​Interceptar cadena

​ SUBSTR (nombre del campo, posición inicial de la intercepción, longitud total de la intercepción)

**Nota:**Los índices comienzan desde 1

función reemplazar()

Reemplazo

​ REPLACE(nombre del campo Str, contenido from_str que se reemplazará, contenido nuevo to_str)

función ifnull()

​ Determine si es nulo, si es nulo, reemplácelo con 0 o 1, etc.

​ IFNULL(nombre del campo expr1, contenido nuevo de expr2 que se reemplazará)

**Nota: **NULL aparece en la base de datos al realizar cálculos, no participa en el cálculo y siempre será NULL.

función redonda ()

Decimales redondeados

REDONDA (nombre del campo)

función techo()

​ Decimales, redondear hacia arriba, si hay decimales, quitar el número entero y sumar uno

CEIL (nombre del campo)

función piso()

​ Decimales, redondear hacia abajo, si hay decimales, quitar los decimales

​ PISO (nombre del campo)

función ahora()

Consultar la hora actual, año, mes, día, hora, minuto y segundo.

​ AHORA()

función curdate()

Año, mes y día

CORDADO()

función curtime()

Horas, minutos y segundos.

​ CORTIME()

función año()

Años

AÑO (fecha fecha) / AÑO (cadena de fecha escribe una fecha)

función mes()

mes

MES (fecha fecha) / MES (cadena de fecha escribir datos de fecha)

función día()

​ día

​ DÍA(fecha fecha) / DÍA(cadena de fecha escribir datos de fecha)

función hora()

tiempo

​ HORA(fecha fecha) / HORA(cadena de fecha escribir datos de fecha)

función minuto()

puntos

​ MINUTO(fecha fecha) / MINUTO(cadena de fecha escribir datos de fecha)

segunda función ()

segundos

SEGUNDO (fecha fecha) / SEGUNDO (cadena de fecha escribir datos de fecha)

función marca de tiempodiff()

Calcula la diferencia horaria entre dos fechas, que pueden ser año, mes, día, hora, minuto, segundo, día de la semana,
timestampdiff (tipo de intervalo, fecha anterior, fecha siguiente)

Personaje de escape

​ ' Como símbolo de declaración SQL, si aparece un solo apóstrofo en el contenido, será un error. Simplemente escápelo.

​Método 1: use \ para escapar a un carácter normal

​Método 2: use " " afuera

select 
 ename, 
 lower(ename),
 upper(ename),
 length(ename),
 concat(ename,'hello',100),
 substr(ename,2),
 substr(ename,1,3),
 replace(ename,'S','666'),
 ifnull(comm,0),
 round(sal),
 ceil(sal),
 floor(sal),
 now(),
 curdate(),
 curtime(),
 year('1999-02-12'),month(now()),day(now()),hour(now()),minute(curtime()),second('12:22:1')
from 
emp;

optimización SQL

1. Insertar optimización de datos
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

2. Optimización de la clave principal:
la división de páginas puede ocurrir cuando las claves principales se insertan desordenadas.
Insertar descripción de la imagen aquí

3. ordenar por optimización
Insertar descripción de la imagen aquí

Cuarto, agrupar por optimización
Insertar descripción de la imagen aquí

5. Limitar la optimización
Insertar descripción de la imagen aquí

6. Optimización del conteo

Insertar descripción de la imagen aquí
7. Optimización de la actualización:
intente actualizar los datos según la clave principal/campo de índice

Resumir
  1. Intente utilizar nombres de campos en lugar de *
  2. Al diseñar tablas, es mejor utilizar varchar en lugar de char como tipo de campo.
  3. Para el valor del campo, es mejor utilizar números en lugar de cadenas.
  4. Intente que las condiciones de filtrado sean lo más detalladas posible. Puede utilizar y pero no o.
  5. Diseño de índice, hasta 5 índices, no demasiados
  6. Consulta difusa, intente determinar el elemento inicial para que el índice sea efectivo
  7. La base de datos no tiene requisitos estrictos para los números. El índice nombre = 123 no es válido y el índice nombre = '123' es válido.
  8. Lo mejor es eliminar los índices inútiles inmediatamente.
    Insertar descripción de la imagen aquí

Cuando utilice not int, recuerde excluir NULL entre los siguientes paréntesis.

Supongo que te gusta

Origin blog.csdn.net/s17856147699/article/details/129452230
Recomendado
Clasificación