Operação avançada de banco de dados MySQL (imagem detalhada e texto)

Operações avançadas da tabela de dados

Preparação: Instale o banco de dados MySQL

Código de fonte de implantação de script Shell com um clique, compilar e instalar MySQL

create database CLASS;
use CLASS;

create table TEST (id int not null,name char(20) 	not null,cardid varchar(18) not null unique 	key,primary key (id));

insert into TEST(id,name,cardid) values (1,'zhangsan','123123');

insert into TEST(id,name,cardid) values (2,'lisi','1231231');

insert into TEST(id,name,cardid) values (3,'wangwu','12312312');
select * from TEST;

Insira a descrição da imagem aqui


Um, mesa clone

Gere os registros de dados da tabela de dados em uma nova tabela

método um

例:create table TEST01 like TEST;
select * from TEST01;

desc TEST01;
insert into TEST01 select * from TEST;
select * from TEST01;

Insira a descrição da imagem aqui

Método Dois

例:create table TEST02 (select * from TEST);
select * from TEST02;

Insira a descrição da imagem aqui

2. Esvazie a tabela e exclua todos os dados da tabela

método um

delete from TEST02;

#DELETE Depois de esvaziar a tabela, são excluídas as entradas de registro no resultado retornado; DELETE funciona excluindo os dados do registro linha por linha; se houver campos de autocrescimento na tabela, use DELETE FROM para excluir todos os registros, e o novo adicionado os registros continuarão a incrementar e gravar os registros após o maior ID de registro original

Insira a descrição da imagem aqui

例:create table if not exists TEST03 (id int primary 	key auto_increment,name varchar(20) not null,cardid varchar(18) not null unique key);
show tables;

insert into TEST03 (name,cardid) values ('zhangsan','11111');		
select * from TEST03;
delete from TEST03;

insert into TEST03 (name,cardid) values ('lisi','22222');
select * from TEST03;

Insira a descrição da imagem aqui

Método Dois

例:select * from TEST03;
truncate table TEST03;
insert into TEST03 (name,cardid) values ('wangwu','33333');
select * from TEST03;

#TRUNCATE Depois de limpar a tabela, nenhuma entrada excluída é retornada; quando TRUNCATE funciona, a estrutura da tabela é reconstruída como está, portanto, em termos de velocidade, TRUNCATE será mais rápido do que DELETE para limpar a tabela; depois de usar TRUNCATE TABLE para limpar o dados na tabela, o ID mudará de 1. Inicie a gravação novamente.

Insira a descrição da imagem aqui


Três, crie uma mesa temporária

Depois que a tabela temporária é criada com sucesso, a tabela temporária criada não pode ser vista usando o comando SHOW TABLES.A tabela temporária será destruída após o término da conexão. Antes de sair da conexão, você também pode executar operações como adicionar, excluir, modificar e verificar, como usar a instrução DROP TABLE para excluir manualmente e diretamente a tabela temporária.

CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);

例:create temporary table TEST04 (id int not null,name varchar(20) not null,cardid varchar(18) not null unique key,primary key (id));
show tables;

insert into TEST04 values (1,'haha','12345');	
select * from TEST04;

Insira a descrição da imagem aquiInsira a descrição da imagem aqui

Quatro, crie restrições de chave estrangeira

Garanta a integridade e consistência
dos dados. A definição de uma chave estrangeira: Se o mesmo campo de atributo x é a chave primária na Tabela 1, mas não é a chave primária na Tabela 2, então o campo x é chamado de chave estrangeira de Mesa 2.

Compreensão das tabelas de chave primária e tabelas de chave estrangeira:
1. Tabelas com palavras-chave comuns como chaves primárias são tabelas de chave primária (tabela pai, tabela primária)
2. Tabelas com palavras-chave comuns como chaves estrangeiras são tabelas de chave estrangeira (da tabela, tabela estrangeira)

Nota: Os campos da tabela primária associados à chave estrangeira devem ser configurados como a chave primária, e a tabela secundária não pode ser uma tabela temporária. Os campos das tabelas primária e secundária têm o mesmo tipo de dados, comprimento de caracteres e restrições

例:create table TEST04 (hobid int(4),hobname varchar(50));
create table TEST05 (id int(4) primary key auto_increment,name varchar(50),age int(4),hobid int(4));

alter table TEST04 add constraint PK_hobid primary key(hobid);
alter table TEST05 add constraint FK_hobid foreign key(hobid) references TEST04(hobid);

Insira a descrição da imagem aqui

例:添加数据记录
insert into TEST05 values (1,'zhangsan','20',1);
insert into TEST04 values (1,'sleep');
insert into TEST05 values (1,'zhangsan',20,1);

Insira a descrição da imagem aqui

例:drop table TEST04;
drop table TEST05;
drop table TEST04;

Insira a descrição da imagem aqui
Nota: Se você deseja excluir um campo de restrição de chave estrangeira
, exclua a restrição de chave estrangeira primeiro e, em seguida, exclua o nome da chave estrangeira, que não é demonstrado aqui

show create table TEST05;
alter table TEST05 drop foreign key FK_hobid;
alter table TEST05 drop key FK_hobid;
desc TEST05;

6 restrições comuns no MySQL

Restrição de chave primária chave primária
Restrição de chave estrangeira chave estrangeira
Restrição não vazia não nulo
Restrição única Chave única
Restrições de valor padrão padrão
Restrição de auto-aumento Incremento automático

Cinco, gerenciamento de usuários de banco de dados

1. Crie um novo usuário

CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];

'Nome de usuário': Especifique o nome de usuário que será criado

'Endereço de origem': especifique o host no qual o usuário recém-criado pode fazer login. Você pode usar a forma de endereço IP, segmento de rede e nome do host. Os usuários locais podem usar localhost e qualquer host pode fazer login com o caractere curinga%

'Senha': Se você usar uma senha em texto simples, insira diretamente a 'senha', ela será criptografada automaticamente pelo Mysql quando inserida no banco de dados;
------ Se você usar uma senha criptografada, você precisa usar SELECT PASSWORD ('senha'); para obter o texto cifrado, então adicione PASSWORD'texto cifrado 'na instrução;
------ Se a parte "IDENTIFICADA POR" for omitida, a senha do usuário estará vazia (não recomendado)

例:create user 'zhangsan'@'localhost' identified by '123123';
select password('123123');
create user 'lisi'@'localhost' identified by password '*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1';

Insira a descrição da imagem aqui


2. Visualize as informações do usuário

O usuário criado é salvo na tabela de usuários do banco de dados mysql

USE mysql;
SELECT User,authentication_string,Host from user;

Insira a descrição da imagem aqui

3. Renomeie o usuário

RENAME USER 'zhangsan'@'localhost' TO 'wangwu'@'localhost';
SELECT User,authentication_string,Host from user;

Insira a descrição da imagem aqui

4. Excluir usuários

DROP USER 'lisi'@'localhost';
SELECT User,authentication_string,Host from user;

Insira a descrição da imagem aqui

5. Modifique a senha do usuário atualmente conectado

SET PASSWORD = PASSWORD('abc123');
quit
mysql -u root -p

Insira a descrição da imagem aqui

6. Modifique outras senhas de usuário

SET PASSWORD FOR 'wangwu'@'localhost' = PASSWORD('abc123');
use mysql;
SELECT User,authentication_string,Host from user;

7. A solução para esquecer a senha de root

1, Modifique o arquivo de configuração /etc/my.cnf, faça login no mysql diretamente sem usar uma senha

vim /etc/my.cnf
[mysqld]
skip-grant-tables					#添加,使登录mysql不使用授权表
systemctl restart mysqld
mysql								#直接登录

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

2, Use update para modificar a senha root e atualizar o banco de dados

UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('112233') where user='root';
FLUSH PRIVILEGES;
quit

再把 /etc/my.cnf 配置文件里的 skip-grant-tables 删除,并重启 mysql 服务。
mysql -u root -p
112233

Insira a descrição da imagem aqui

Seis, autorização do usuário do banco de dados

1. Conceda permissões

GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会创建新的用户;当指定的用户名存在时,GRANT 语句用于修改用户信息。

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];

#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。

#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符“*”。*例如,使用“kgc.*”表示授权操作的对象为 kgc数据库中的所有表。

#'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP 地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.lic.com”、“192.168.184.%”等。

#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分, 则用户的密码将为空。

#Permite que o usuário wangwu consulte os registros de dados de todas as tabelas no banco de dados CLASS localmente, mas proíba a consulta aos registros de tabelas em outros bancos de dados.

例:
GRANT select ON CLASS.* TO 'wangwu'@'localhost' IDENTIFIED BY '123456';
quit;
mysql -u wangwu -p
123456
show databases;
use information_schema;
show tables;
select * from INNODB_SYS_TABLESTATS;

#Permitir que o usuário wangwu se conecte ao mysql localmente e remotamente e tenha todas as permissões.

quit;
mysql -u root -p112233
GRANT ALL PRIVILEGES ON *.* TO 'wangwu'@'localhost' IDENTIFIED BY '123456';

flush privileges;
quit

mysql -u wangwu -p123456
create database SCHOOL;

2. Exibir permissões

SHOW GRANTS FOR 用户名@来源地址;

例:
SHOW GRANTS FOR 'wangwu'@'localhost';

3. Revogação de autoridade

REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;

例:quit;
mysql -u root -p112233
SHOW GRANTS FOR 'wangwu'@'localhost';
REVOKE SELECT ON "CLASS".* FROM 'wangwu'@'localhost';

SHOW GRANTS FOR 'wangwu'@'localhost';

A permissão #USAGE só pode ser usada para login no banco de dados e não pode realizar nenhuma operação; a permissão USAGE não pode ser reciclada, ou seja, REVOKE não pode excluir usuários.

flush privileges;

Acho que você gosta

Origin blog.csdn.net/weixin_51432770/article/details/113154390
Recomendado
Clasificación