Los primeros *** conceptos básicos de preparación de Mysql

1. Conceptos comunes de base de datos

1. DB: base de datos, un contenedor para almacenar datos.

2. DBMS: sistema de gestión de bases de datos, utilizado para gestionar o crear DB.

3. SQL: lenguaje de consulta estructurado, que se utiliza para comunicarse con bases de datos, un lenguaje común a casi todos los programas de bases de datos convencionales.

4. El lenguaje SQL se divide en:

  • DQL (lenguaje de consulta de datos): lenguaje de consulta de datos selecciona declaraciones relacionadas;
  • DML (lenguaje de manipulación de datos): declaraciones de manipulación de datos insertar, actualizar, eliminar declaraciones;
  • DDL (lenguaje de definición de datos): lenguaje de definición de datos crear, soltar, alterar declaración;
  • TCL (lenguaje de control de transacciones): conjunto de lenguaje de control de transacciones autocommit = 0, iniciar la transposición, guardar punto, confirmar, deshacer;

En segundo lugar, las características de los datos de almacenamiento de la base de datos.

1. Los datos se almacenan en la tabla y la tabla se almacena en la base de datos;

2. Puede haber varias tablas en una biblioteca y cada tabla tiene un nombre de tabla único para identificarse;

3. Hay una o más columnas en la tabla, que también se denominan "campos", que son equivalentes a los atributos en Java;

4. Cada fila de datos en la tabla es equivalente a un objeto en Java.

Tres, algunos comandos de uso común en Mysql

ganar + R, cmd

Al ingresar services.msc se abrirá la ventana del servicio, encontrará el servicio MySQL en la ventana del servicio y hará clic con el botón derecho para iniciarlo o detenerlo.

Comando de parada: net stop mysql

Comando de inicio: net start mysql

Si se informa de un error: se produce el error 5 del sistema en el comando de inicio de mysql. acceso denegado.

Esta situación se debe a que la autoridad de operación del usuario actual es demasiado baja, por lo que ejecutar cmd como administrador puede ser normal.

1、mysql登录
mysql -h localhost -P 3306 -u root -p
说明:
-P大写的P后面跟上端口; 
如果是登录本地账号,ip和端口可以省略,如:mysql -u 用户名 -p
可以通过上面的命令连接原创机器的mysql
2、查看数据库版本
未登录状态:mysql --version  或  mysql -V
登录状态:select version();
3、显示所有数据库
show databases;

4、进入指定的库
use 库名;

5、显示当前库中的所有表
show tables;

6、查看其他库中的所有表
show tables from 库名;

7、查看表的创建语句
show create table 表名;

8、查看表结构
desc 表名;

9、查看当前所在库
select database();

10、查看当前mysql支持的存储引擎
show engines;

11、查看系统变量及其值
show variables;

12、查看某个系统变量
show variables like '变量名';
eg:
show variables like 'wait_timeout';
show variables like '%wait_timeout%t';
  • No distingue entre mayúsculas y minúsculas. Se recomienda que las palabras clave se escriban en mayúsculas, lo que indica que los nombres de las columnas están en minúsculas.
  • Cada comando debe terminar con un punto y coma en inglés
  • Cada nombre está sangrado o envuelto según sea necesario
  • Comentario de una sola línea: #note texto o texto de comentario, debe agregar un espacio aquí;
  • Comentario de varias líneas: / * texto del comentario * /

Cuatro, tipos de datos en MySQL

Incluye principalmente las siguientes cinco categorías:

  • Tipos de enteros: bit, bool, tinyint, smallint, mediumint, int, bigint
  • Tipos de coma flotante: flotante, doble, decimal
  • Tipos de cadenas: char, varchar, tinyblob, blob, mediumblob, longblob, tinytext, text, mediumtext, longtext
  • Tipo de fecha: Fecha, TateTime, TimeStamp, Hora, Año
  • Otros tipos de datos

Ejemplo 1: tipos enteros firmados y sin firmar

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |      |
| comperformance     |
| covid19_beta       |
| db_dorm            |
| kettle_demo        |
| mysql              |
| test               |
+--------------------+
8 rows in set (0.00 sec)

mysql> use test;
Database changed

mysql># 有符号类型
mysql> create table demo1(
    -> c1 tinyint
    -> );
Query OK, 0 rows affected (0.11 sec)

mysql> create table demo2(c2 tinyint);
Query OK, 0 rows affected (0.42 sec)

mysql> insert into demo1 values(-pow(2,7)),(pow(2,3)-3);
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from demo1;
+------+
| c1   |
+------+
| -128 |
|    5 |
+------+
2 rows in set (0.00 sec)


mysql># 无符号类型
mysql> create table demo3(c1 tinyint unsigned);
Query OK, 0 rows affected (0.19 sec)

mysql> insert into demo3 values(-1);
ERROR 1264 (22003): Out of range value adjusted for column 'c1' at row 1

mysql> insert into demo3 values (pow(2,8)+1);
ERROR 1264 (22003): Out of range value adjusted for column 'c1' at row 1

mysql> insert into demo3 values(0),(pow(2,8)-1);
Query OK, 2 rows affected (0.09 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from demo3;
+------+
| c1   |
+------+
|    0 |
|  255 |
+------+
2 rows in set (0.00 sec)

mysql># C1是无符号的tinyint类型的,插入了负数会报错

Ejemplo 2: tipo de coma flotante propenso a errores, tenga cuidado

El tipo numérico flotante se utiliza para representar valores de punto flotante de precisión simple, mientras que el tipo numérico doble se utiliza para representar valores de punto flotante de precisión doble. Tanto el tipo flotante como el doble son tipos de punto flotante, pero el decimal es un punto fijo. tipo. Los tipos de coma flotante y de coma fija se pueden expresar agregando (M, D) al nombre del tipo. M indica la longitud total del valor, D indica la longitud después de unos pocos puntos, y M y D también se denominan precisión y grado estándar.

Cuando no se especifica la precisión para float y double, el valor predeterminado se mostrará de acuerdo con la precisión real. Sin embargo, cuando no se especifica la precisión para DECIMAL, el número entero predeterminado es 10 y el número de minutos es 0.

mysql> use test;
Database changed
mysql> create table test5(a float(5,2),b double(5,2),c decimal(5,2));
Query OK, 0 rows affected (0.18 sec)

mysql> insert into test5 values (1,1,1),(2.1,2.1,2.1),(3.123,3.123,3.123),(4.125,4.125,4.125),(5.115,5.115,5.115),(6.126,6.126,6.126),(7.116,7.116,7.116),(8.1151,8.1151,8.1151),(9.1251,9.1251,9.1251),(10.11501,10.11501,10.11501),(11.12501,11.12501,11.12501);
Query OK, 11 rows affected, 9 warnings (0.04 sec)
Records: 11  Duplicates: 0  Warnings: 9

mysql> select * from test5;
+-------+-------+-------+
| a     | b     | c     |
+-------+-------+-------+
|  1.00 |  1.00 |  1.00 |
|  2.10 |  2.10 |  2.10 |
|  3.12 |  3.12 |  3.12 |
|  4.13 |  4.13 |  4.13 |
|  5.12 |  5.12 |  5.12 |
|  6.13 |  6.13 |  6.13 |
|  7.12 |  7.12 |  7.12 |
|  8.12 |  8.12 |  8.12 |
|  9.13 |  9.13 |  9.13 |
| 10.12 | 10.12 | 10.12 |
| 11.13 | 11.13 | 11.13 |
+-------+-------+-------+
11 rows in set (0.00 sec)

######################################################################
说明(注意看):
c是decimal类型,认真看⼀下输⼊和输出,发现decimal采⽤的是四舍五⼊认真看⼀下a和b的输⼊和输出,不是四舍五⼊,float和double采⽤的是四舍六⼊五成双,decimal插⼊的数据超过精度之后会触发警告。

什么是四舍六⼊五成双?
就是5以下舍弃,5以上进位,如果需要处理数字为5的时候,需要看5后⾯是否还有不为0的任何数字,如果有,则直接进位,如果没有,需要看5前⾯的数字,若是奇数则进位,若是偶数则将5舍掉

Eliminamos la precisión (M, D) y la escala del tipo de punto flotante para ver el efecto:

mysql> create table test6(a float,b double,c decimal);
Query OK, 0 rows affected (0.17 sec)

mysql> insert into test6 values (1,1,1),(1.234,1.234,1.4),(1.234,0.01,1.5);
Query OK, 3 rows affected, 2 warnings (0.16 sec)
Records: 3  Duplicates: 0  Warnings: 2

mysql> select * from test6;
+-------+-------+------+
| a     | b     | c    |
+-------+-------+------+
|     1 |     1 |    1 |
| 1.234 | 1.234 |    1 |
| 1.234 |  0.01 |    2 |
+-------+-------+------+
3 rows in set (0.00 sec)

#######################################################################
a和b的数据正确插⼊,⽽c被截断了浮点数float、double如果不写精度和标度,则会按照实际显⽰decimal不写精度和标度,⼩数点后⾯的会进⾏四舍五⼊,并且插⼊时会有警告!	

再看看下面的代码:
mysql> select sum(a),sum(b),sum(c) from test5;
+--------+--------+--------+
| sum(a) | sum(b) | sum(c) |
+--------+--------+--------+
|  67.22 |  67.22 |  67.22 |
+--------+--------+--------+
1 row in set (0.00 sec)

mysql> select sum(a),sum(b),sum(c) from test6;
+-----------------+--------+--------+
| sum(a)          | sum(b) | sum(c) |
+-----------------+--------+--------+
| 3.4679999351501 |  2.244 |      4 |
+-----------------+--------+--------+
1 row in set (0.00 sec)
########################################################################
从上⾯sum的结果可以看出float、double会存在精度问题,decimal精度正常的,⽐如银⾏对统计结果要求⽐较精准的建议使⽤decimal。

suplemento:

Descripción del tipo N

En el desarrollo nos encontraremos con algunas definiciones de tipo entero es int (N), este tipo de escritura es inútil en desarrollo, solo necesitamos recordar dos puntos:

  • No importa cuánto N sea igual a, int solo ocupa 4 bytes.
  • N representa el ancho de la pantalla, que no es suficiente para compensar 0. Si se excede la longitud, solo se muestra el número completo, pero solo es válido si el número entero está configurado como relleno cero sin signo.

Ejemplo:

mysql> CREATE TABLE test3 ( `a` int, `b` int(5), `c` int(5) unsigned, `d` int(5) zerofill, `e` int(5) unsigned zerofill, `f` int zerofill, `g` int unsigned zerofill );
Query OK, 0 rows affected (0.17 sec)

mysql> insert into test3 values (1,1,1,1,1,1,1),(11,11,11,11,11,11,11),(12345,12345,12345,12345,12345,12345,12345);
Query OK, 3 rows affected (0.14 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test3;
+-------+-------+-------+-------+-------+------------+------------+
| a     | b     | c     | d     | e     | f          | g          |
+-------+-------+-------+-------+-------+------------+------------+
|     1 |     1 |     1 | 00001 | 00001 | 0000000001 | 0000000001 |
|    11 |    11 |    11 | 00011 | 00011 | 0000000011 | 0000000011 |
| 12345 | 12345 | 12345 | 12345 | 12345 | 0000012345 | 0000012345 |
+-------+-------+-------+-------+-------+------------+------------+
3 rows in set (0.00 sec)

mysql> show create table test3;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                  |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test3 | CREATE TABLE `test3` (
  `a` int(11) default NULL,
  `b` int(5) default NULL,
  `c` int(5) unsigned default NULL,
  `d` int(5) unsigned zerofill default NULL,
  `e` int(5) unsigned zerofill default NULL,
  `f` int(10) unsigned zerofill default NULL,
  `g` int(10) unsigned zerofill default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql># show create table test3; 输出了表test3的创建语句,和我们原始的创建语句不一样,原始的d字段用的是无符号的,可以看出当时使用了zerofill自动会将无符号变为有符号。

Nota: Cuando el ancho de salida de int (5) es menor que 5, el anverso se rellena con 0. Cuando se omite n en int (n), el ancho es la longitud de la notación decimal del valor máximo del correspondiente tipo, como bigint. El valor máximo del símbolo es -1 = 18,446,744,073,709,551,615; la longitud es de 20 bits

Tipo de fecha

Tipo de cadena

El tipo char ocupa una longitud fija. Si los datos almacenados son de una longitud fija, se recomienda utilizar el tipo char, como información de longitud fija, como números de teléfono móvil y certificados de identidad.

选⼩不选⼤:⼀般情况下选择可以正确存储数据的最⼩数据类型,越⼩的数据类型通常更快,占⽤磁盘,内存和CPU缓存更⼩。

简单就好:简单的数据类型的操作通常需要更少的CPU周期,例如:整型⽐字符操作代价要⼩得多,因为字符集和校对规则(排序规则)使字符⽐整型⽐较更加复杂。

尽量避免NULL:尽量制定列为NOT	NULL,除⾮真的需要NULL类型的值,有NULL的列值会使得索引、索引统计和值⽐较更加复杂。

浮点类型的建议统⼀选择decimal

记录时间的建议使⽤int或者bigint类型,将时间转换为时间戳格式,如将时间转换为秒、毫秒,进⾏存储,⽅便⾛索引

Cinco, los comandos comúnmente utilizados por los administradores de bases de datos.

1. Cómo funcionan los permisos de mysql

Por razones de seguridad, mysql usa el nombre de host + nombre de usuario para determinar la identidad de un usuario, porque es difícil determinar la identidad de un usuario a través del nombre de usuario en Internet, pero podemos usar ip O el nombre de host juzga un máquina, y un usuario entra a través de esta máquina, podemos identificarlo como un usuario, por lo que el nombre de usuario + el nombre de host se usa en mysql para identificar la identidad del usuario. Cuando un usuario envía un comando a mysql, mysql usa el nombre de usuario y la fuente (host) para determinar los permisos del usuario.

2. La verificación de la autorización se divide en dos etapas:

Fase 1: Conectarse a la base de datos En este momento, mysql determinará si tiene permiso para conectarse basándose en su nombre de usuario y su fuente (ip o nombre de host);

Fase 2: Inicie una operación de solicitud al servidor mysql, como crear tabla, seleccionar, eliminar, actualizar, crear índice, etc. En este momento, mysql determinará si tiene permiso para operar estas instrucciones;

3. Tiempo de vigencia de la autoridad

La información de usuario y permisos se coloca en la biblioteca llamada mysql. Cuando se inicia mysql, estos contenidos se leen en la memoria y son efectivos a partir de este momento, por lo que si modifica la información de usuario y permisos operando directamente estas tablas, debe reinicie mysql O ejecute flush privilegios; para que sea efectivo. Una vez que el usuario inicia sesión, mysql creará una conexión con el usuario actual. En este momento, la información de permisos relacionados con el usuario se almacena en esta conexión y se almacena en la memoria. En este momento, si el usuario actual se modifica en otros lugares Los permisos de estos cambios no entrarán en vigor hasta la próxima vez que inicie sesión.

4. Uso de comandos comunes

1、用户信息在mysql.user表中
use mysql;
select user,host from user;

2、创建用户
create user 用户名[@主机名] [identified by '密码'];
#主机名默认值%,表示这个用户可以从任何主机连接mysql服务器
#密码可以省略,表示无密码登录
示例1:不指定主机名,表示这个用户可以从任何主机连接mysql服务器
mysql> create user wang;
Query OK, 0 rows affected (0.25 sec)

mysql> select user,host from user;
+------+-----------+
| user | host      |
+------+-----------+
| wang | %         |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)

mysql> exit;
Bye

C:\Windows\system32>mysql -uwang
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 50 to server version: 5.0.24a-community-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
###############################################################################
上⾯创建了⽤户名为wang⽆密码的⽤户,没有指定主机,可以看出host的默认值为%,表⽰wang可以从任何机器登录到mysql中。

⽤户创建之后可以在mysql库中通过select user,host from user;查看到。
###############################################################################
其他示例:
create user 'wang2'@'localhost' identifiled by '123';
说明:wang2的主机为localhost表⽰本机,此⽤户只能登陆本机的mysql	

create user 'wang3'@% identifiled by '123';
说明:wang3可以从任何机器连接到mysql服务器

create user 'wang4'@'192.168.11.%' identifiled by '123';
说明:wang4可以从192.168.11段的机器连接mysql	


3、修改密码
(1)管理员修改
set password for '用户名'@'主机' = password('密码');
(2)create user 用户名[@主机名][identifiled by '密码'];
set password = password('密码');
(3)修改mysql.user表修改密码
user mysql;
update user set authentication_string = password('321') where user = 'wang' and host='%';
flush privileges; # 对用户生效
##5.7中user表中的authentication_string字段表⽰密码,⽼的⼀些版本中密码字段是password。


4、给用户授权
创建用户后,需要给用户授权,才有意义。
grant privileges ON database.table TO 'username'[@'host'] [with grant option]

grant命令说明:
(1)priveleges(权限列表),可以是all,表⽰所有权限,也可以是select、update等权限,多个权限之间⽤逗号分开。
(2)ON ⽤来指定权限针对哪些库和表,格式为数据库.表名,点号前⾯⽤来指定数据库名,点号后⾯⽤来指定表名,*.*表⽰所有数据库所有表。
(3)TO 表⽰将权限赋予某个⽤户,格式为username@host,@前⾯为⽤户名,@后⾯接限制的主机,可以是IP、IP段、域名以及%,%表⽰任何地⽅。
(4)with grant option	这个选项表⽰该⽤户可以将⾃⼰拥有的权限授权给别⼈。注意:经常有⼈在创建操作⽤户的时候不指定with grant option选项导致后来该⽤户不能使⽤grant命令创建⽤户或者给其它⽤户授权。备注:可以使⽤GRANT重复给⽤户添加权限,权限叠加,⽐如你先给⽤户添加⼀个select权限,然后又给⽤户添加⼀个insert权限,那么该⽤户就同时拥有了select和insert权限。

示例:
grant all on *.* to 'test1'@'%';
说明:给test1授权可以操作所有库所有权限,相当于dba	

grant select on seata.* to 'test1'@'%';
说明:test1可以对seata库中所有的表执⾏select	

grant select,update on seata.* to 'test1'@'%';
说明:test1可以对seata库中所有的表执⾏select、update	

grant select(user,host) on mysql.user to 'test1'@'localhost';
说明:test1⽤户只能查询mysql.user表的user,host字段


5、查看用户有哪些权限
(1)show grants for '用户名'[@'主机']
主机可以省,默认值%
eg:show grants for 'test1'@'localhost';

(2)show grants;
查看当前用户权限
eg:show grants;

6、撤销用户的权限
revoke privileges ON database.table FROM '用户名'[@'主机'];
可以先通过show grants命令查询⼀下⽤户对于的权限,然后使⽤revoke命令撤销⽤户对应的权限.
eg:
show grants for 'test1'@'localhost';
revoke select(host) ON mysql.user from test1@localhost;
show grants for 'test1'@'localhost';
上⾯我们先通过grants命令查看test1的权限,然后调⽤revoke命令撤销对mysql.user表host字段的查询权限,最后又通过grants命令查看了test1的权限,和预期结果⼀致。


7、删除用户
(1)drop user'用户名'[@'主机']
eg:drop user test1@localhost;
drop的⽅式删除⽤户之后,⽤户下次登录才生效。

(2)通过删除mysql.user表数据的方式删除
eg:
delete from user where user='用户名' and host='主机';
flush privileges;
注意通过表的⽅式删除的,需要调⽤flush privileges;刷新权限信息(权限启动的时候在内存中保存着,通过表的⽅式修改之后需要刷新⼀下)。

1. Solo otorgue los permisos mínimos que puedan satisfacer las necesidades para evitar que los usuarios hagan cosas malas. Si el usuario solo necesita hacer una consulta, solo el permiso de selección es suficiente. No otorgue al usuario permisos de actualización, inserción o eliminación;

2. Al crear un usuario, restrinja el host de inicio de sesión del usuario, generalmente restringido a una IP específica o segmento de IP interno;

3. Eliminar usuarios que no tienen contraseña al inicializar la base de datos y crear automáticamente algunos usuarios cuando se instala la base de datos, estos usuarios no tienen contraseña por defecto;

4. Establezca una contraseña que cumpla con la complejidad de la contraseña para cada usuario;

5. Limpiar con regularidad los usuarios innecesarios, reclamar permisos o eliminar usuarios;

para resumir

1. Los usuarios y los permisos no necesitan actualizarse mediante operaciones basadas en comandos, y el próximo inicio de sesión se hará efectivo automáticamente;

2. Al operar la modificación de modo y la información del usuario de la tabla en la biblioteca mysql, es necesario invocar los privilegios de descarga, actualizar una vez, el siguiente inicio de sesión se hará efectivo automáticamente;

3. El método para que mysql identifique la identidad del usuario es: nombre de usuario + host;

4. El host se puede omitir en algunos comandos mencionados en este texto, y el valor predeterminado es%, que significa todas las máquinas;

5. La información de usuario y permisos en mysql está en la biblioteca llamada mysql;

Supongo que te gusta

Origin blog.csdn.net/qq_46009608/article/details/112966250
Recomendado
Clasificación