Artigo Diretório
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;
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;
Método Dois
例:create table TEST02 (select * from TEST);
select * from TEST02;
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
例: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;
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.
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;
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);
例:添加数据记录
insert into TEST05 values (1,'zhangsan','20',1);
insert into TEST04 values (1,'sleep');
insert into TEST05 values (1,'zhangsan',20,1);
例:drop table TEST04;
drop table TEST05;
drop table TEST04;
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';
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;
3. Renomeie o usuário
RENAME USER 'zhangsan'@'localhost' TO 'wangwu'@'localhost';
SELECT User,authentication_string,Host from user;
4. Excluir usuários
DROP USER 'lisi'@'localhost';
SELECT User,authentication_string,Host from user;
5. Modifique a senha do usuário atualmente conectado
SET PASSWORD = PASSWORD('abc123');
quit
mysql -u root -p
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 #直接登录
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
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;