x para conectarse al servidor mysql:
mysql -h IP -P 端口号 -u root -p
Operar la base de datos a través del programa java:
Crear y eliminar base de datos:
utf8_bin distingue entre mayúsculas y minúsculas
utf8_general_ci no distingue entre mayúsculas y minúsculas
#创建一个数据库
CREATE DATABASE hsp_db01;
#删除数据库----慎用
DROP DATABASE hsp_db01;
#创建一个带utf8的数据库
CREATE DATABASE hsp_db02 CHARACTER SET utf8
#创建一个带utf8的数据库并带校对规则
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
consulta básica
SELECT * FROM t1 WHERE NAME = 'tom'
Mostrar sentencias de la base de datos:
SHOW DATABASES #显示所有数据库
SHOW CREATE DATABASE hsp_db02 #查看数据库的创建方法
Copia de seguridad de la base de datos: en la línea de comandos de DOS
mysqldump -u root -p -B 数据库1 数据库2 > D:\\beifen.sql
Copia de seguridad de tablas individuales:
mysqldump -u root -p 数据库1 表1 表2 数据库2 表2 > D:\\beifen.sql
Restaurar la base de datos: dentro de mysql
source d:\\beifen.sql
Crear mesa:
create table `user`(
id int,
`name` varchar(255),
`password` varchar(255),
`birthday` date)
character set utf8 collate utf8_bin engine innodb;
Modificar tabla:
Agregue columnas después del currículum:
ALTER TABLE `emp`
ADD image VARCHAR(3) NOT NULL DEFAULT " "
AFTER RESUME
Modifique la columna del trabajo para que su longitud sea 60
ALTER TABLE `emp`
modify job varchar(60) not null default ""
Eliminar la columna de sexo:
ALTER TABLE `emp`
DROP sex
Modifique el nombre de la tabla:
RENAME TABLE `emp` TO employee
Modificar los nombres de las columnas:
ALTER TABLE `emp`
CHANGE NAME user_name VARCHAR(32) DEFAULT NOT NULL ''
CRUD:
Añadir datos a la tabla: insertar en
INSERT INTO `emp` VALUES(100,"小妖怪","男",2022)
INSERT INTO `goods` (id,goods_name,price)
VALUES(10,"huawei",2000)
Ver todos los datos en la tabla:
SELECT * FROM goods
Declaración de actualización: cambiar el salario de todos a 5000----usar con precaución sin dónde
UPDATE employee SET sal = 5000
Cambiar el sueldo de bobo a 5000
UPDATE `employee`
SET sal = 5000
WHERE user_name = "bobo"
Aumento de salario: aumentar el salario de Bobo en 1000
UPDATE `employee`
SET sal = sal + 1000,job="出主意的"
WHERE user_name = "bobo"
Eliminar toda la información relacionada con Bobo:
DELETE FROM emp
WHERE user_name = "bobo"
Eliminar todos los registros: no donde, use con precaución
Mesa abatible: usar con precaución
drop table employee
instrucción SELECCIONAR:
Consultar a todos los estudiantes en la tabla:
SELECT * FROM students
Los nombres y las puntuaciones de inglés correspondientes de todos los estudiantes en la tabla de consulta:
SELECT `name`,`english` FROM students
Eliminar datos duplicados:
SELECT DISTINCT `name`,`english` FROM students
Use select para operar en columnas:
Cuente la puntuación total de cada estudiante :
SELECT `name`,(chinese+english+math) AS `all` FROM students
Sume 10 al puntaje total de todos los estudiantes:
select `name`,(chinese+english+math+10) as `all` from students
Encuentre todos los estudiantes con una puntuación total > 100:
SELECT * FROM students
WHERE (chinese+english+math) AS `all` > 100
Nombres que comienzan con Han ----LIKE
SELECT * FROM students
WHERE (chinese+english+math) AS `all` > 100
AND `name` LIKE "韩%"
Clasificación: orden por asc|desc ascendente y descendente
Ordenar por puntuación matemática:
select * from students
order by math
Orden descendiente:
select * from students
order by math desc
SELECT `name`,(chinese+english+math) AS `all` FROM students
ORDER BY `all` DESC
Recuento de función de agregación/estadística
Estadísticas para el número total de estudiantes:
SELECT COUNT(*) FROM students
El número total de estudiantes con una puntuación de matemáticas de 90
select count(*) from students
where math>90
La diferencia entre contar(*) y contar(columna)----ignorar vacío:
Suma de función estadística
Cuente la puntuación total de una clase de matemáticas:
select sum(math) from students
Calificaciones totales en cada materia:
SELECT SUM(math),SUM(english) FROM students
Estadísticas de la puntuación media de todas las puntuaciones de idiomas:
select sum(math)/count(*) from students
avg encuentra el puntaje promedio en matemáticas de una clase:
select AVG(math) from students
Puntuación general media:
select AVG(math+english) from students
Valor máximo: max, valor mínimo min
select max(math) from students
Estadísticas de grupo: agrupar por
Consulta salario por departamento:
SELECT AVG(sal),MAX(sal),deptno
FROM emp GROUP BY deptno
Salario promedio por puesto, por sector:
SELECT AVG(sal),MAX(sal),deptno,job
FROM emp GROUP BY deptno,job
El salario promedio es menos de 2000
select AVG(sal),max(sal),deptno
from emp group by deptno
HAVING AVG(sal)<2000
Uso de funciones relacionadas con cadenas:
Codificación de caracteres:
SELECT CHARSET(ename) FROM emp
Concatenación de cadenas:
SELECT CONCAT(ename,"工作是",job) FROM emp
Saca el valor con la primera letra minúscula:
SELECT CONCAT LCASE SUBSTRING(ename,1,1),SUBSTRING(ename,2)
FROM emp
o
SELECT CONCAT LCASE LEFT(ename,1),SUBSTRING(ename,2)
FROM emp
Declaración de control de flujo:
#流程控制语句
SELECT IF(TRUE,"北京","上海") FROM DUAL
SELECT ename,IF(comm IS NULL,0.0,comm)
FROM emp
Declaración de control de flujo 2:
SELECT ename,(SELECT CASE
WHEN job="clerk" THEN "职员"
WHEN job="manger" THEN "经理"
ELSE job END) AS job
FROM emp
Mejoras en una sola tabla:
Mejora de la consulta, ordene primero por departamento, luego descienda por salario:
SELECT * FROM emp
ORDER BY dep ASC,sal DESC
Mejora de consulta, consulta de paginación:
SELECT * FROM emp
ORDER BY id_num
LIMIT 0,3
#第一页
SELECT * FROM emp
ORDER BY id_num
LIMIT 3,3
#第二页
#语法:limit start,rows
#语法:limit 每页显示记录数*(第几页-1),每页显示记录数
#Muestra el número total de empleados en cada puesto, el salario promedio
#显示各个岗位的雇员总数,平均工资
SELECT COUNT(*),AVG(sal),job
FROM emp
GROUP BY job
Cuente el número de empleados que no reciben beneficios:
SELECT COUNT(*),COUNT(*)-COUNT(comm)
FROM emp
Deduplicación estadística:
SELECT COUNT(DISTINCT mgr)
FROM emp
Consulta de varias cláusulas:
SELECT dept,AVG(sal) AS avg_sal
FROM emp
GROUP BY dept
HAVING avg_sal > 1000
ORDER BY avg_sal DESC
LIMIT 0,2
Consulta de varias tablas:
Al escribir sql, escriba primero los simples y luego agregue condiciones de filtro
La clave es analizar las condiciones del filtro:
SELECT ename,sal,emp.dname FROM emp,dept
WHERE emp.deptno = dept.deptno AND dept.deptno = 10
Muestra el nombre, el salario y el grado salarial del empleado:
SELECT ename,sal,grade
FROM emp,salgrade
WHERE sal BETWEEN losal AND histal
Autoconexión: mostrar el nombre del empleado de la empresa y su superior:
Asegúrese de tomar un alias, la tabla toma un alias, no necesita agregar como
SELECT worker.ename AS "职员名",boss.ename AS "上司名"
FROM emp AS emp01,emp AS emp02
WHERE worker.mgr=boss.empno
Subconsulta de varias líneas: primero averigüe las condiciones del filtro,
SELECT *
FROM emp
WHERE deptno=(
SELECT deptno
FROM emp
WHERE ename="smith"
)
Subconsulta de varias filas 2:
SELECT *
FROM emp
WHERE job IN (
SELECT DISTINCT job
FROM emp
WHERE deptno=10
)AND deptno !=10
Subconsulta tabla temporal:
Réplica de tablas:
INSERT INTO mytab_01
(id,`name`,sal,job,deptno)
SELECT empno,ename,sal,job,deptno FROM emp
Autorreplicación: replicación de tablas (replicación de gusanos)
INSERT INTO mytab_01
SELECT * FROM mytab_01
Deduplicación de tablas: 1. Cree una nueva tabla tab_02 primero, para que tab_02 tenga registros duplicados
#创建一个新表
CREATE TABLE table_02 LIKE emp
#新表插入数据
INSERT INTO my_table02
SELECT * FROM emp
#数据去重,思路:
#1)先创建一个新表my_temp
CREATE TABLE my_temp LIKE my_table02
#2)通过关键字distinct处理,把数据记录到my_temp
INSERT INTO my_temp
SELECT DISTINCT * FROM my_table02
#3)清除my_table02的所有记录
DELETE FROM my_table02
#4)把my_temp的记录复制到mytable_02
INSERT INTO my_table02
SELECT * FROM my temp
#5)drop掉临时表my_temp
DROP TABLE my_temp
Consulta combinada: union elimina duplicados, union all no elimina duplicados
La conexión exterior de la tabla: muestra las calificaciones de todas las personas, si no hay calificación, también muestra el nombre y la identificación
unión externa izquierda, unión externa derecha
#原来的方式,不会显示没匹配到的
SELECT `name`,stu.id,grade
FROM stu ,exam
WHERE stu.id=exam.id
#改成左外连接
SELECT `name`,stu.id,grade
FROM stu LEFT JOIN exam
ON stu.id=exam.id
En este punto, stu es la mesa de la izquierda y examen es la mesa de la derecha.
Restricciones de mysql: clave principal clave principal, clave principal mixta
Después de definir la restricción de clave principal, los valores de la columna de clave principal no se pueden repetir
restricción única, que indica que la columna no se puede repetir
Restricción de clave externa: FOREIGN KEY espera que exista una identificación (u otra), primero cree la tabla principal
Puntos de atención de clave externa: la tabla principal debe ser una clave principal o única, y no se puede eliminar a voluntad. ¿Puede agregar vacío para ver la restricción de clave principal, la longitud puede ser inconsistente y el tipo de tabla es innodb?
Incremento automático: AUTO_INCREMENT
Generalmente se usa con la clave principal, también se puede usar con un único, generalmente se usa para enteros, el valor predeterminado es 1
Modifique el valor autocreciente:
ALTER TABLE t25 AUTO_INCREMENT = 100
Índice: experimente la optimización del índice, cree un índice para cada columna requerida
#创建 索引 索引名 在 哪个表(哪个列)
CREATE INDEX empno_index ON emp(empno)
El índice en sí ocupa espacio en el disco, así que vuelva a consultarlo después de crear el índice. Vuela rápido
SELECT * FROM emp
WHERE empno=123456
Crear un índice solo es válido para la columna creada
El principio de indexación: cuando no hay índice, el escaneo completo de la tabla es ineficiente
Cuando hay un índice, construye un árbol binario
Los problemas causados por el índice, 1, el espacio se vuelve más grande, 2, no es propicio para la modificación de los datos (el cambio de la estructura de datos__manteniendo el índice)
La clave principal también es un índice, único también es un índice, índice ordinario, índice de texto completo (buscar campos en el artículo) solr y ES
Crear índice: Agregar índice
#创建 索引 索引名 在 哪个表(哪个列)
CREATE INDEX empno_index ON emp(empno)
#添加唯一索引
CREATE UNIQUE INDEX id_index ON t25 (id)
#添加普通索引:
CREATE INDEX id_index ON t25 (id)
#添加普通索引2:
ALTER TABLE t25 ADD INDEX id_index (id)
#添加主键索引:
ALTER TABLE t25 ADD PRIMARY KEY (id)
#删除索引:
DROP INDEX id_index ON t25
#删除主键索引
ALTER TABLE t26 DROP PRIMARY KEY
#修改索引,先删除在添加
#查询索引:
SHOW INDEX FROM t24
SHOW INDEXES FROM t24
SHOW KEYS FROM t24
Comprobar si una tabla tiene índices:
SHOW INDEXES FROM t25
Cuáles son adecuados para crear índices: 1. Consultas repetidas 2. Unicidad de identificadores
Transacción: garantice la unicidad de los datos, ya sea que todos tengan éxito o todos fallen, como la transferencia
#1.创建表
#2.开始事务
START TRANSACTION
#3.设置保存点
SAVEPOINT a
#4.执行dml操作
INSERT INTO t27 VALUES(100,"tom")
#5.设置保存点
SAVEPOINT b
#6.执行dml操作
INSERT INTO t27 VALUES(101,"tom2")
#7.回退到b保存点
ROLLBACK TO b
#8.回退到a保存点
ROLLBACK TO a
#9.回退到事务开始状态
ROLLBACK
#10.提交事务,一切生效,不在更改
Operación de contraseña de usuario:
#1.创建新的用户
CREATE USER 'hsp_edu' @ 'localhost' IDENTIFIED BY '123456'
#2.删除用户
DROP USER 'hsp_edu' @ 'localhost'
#3.登录
#4.修改密码(自己的) (别人的)
SET PASSWORD=PASSWORD("abcdef")
#(别人的)
SET PASSWORD FOR 'hsp_edu' @ 'localhost' = PASSWORD('123456')