MySQL数据库管理 二

1、数据表高级操作

(1)克隆表

方法一:
create table 新表名 like 旧表名;                #克隆表结构
insert into 新表名 select * from 旧表名;     #克隆表数据
 
#此方法能保证 新表的表结构、表数据 跟旧表都是一致的
 
方法二:
CREATE TABLE 新表名 (SELECT * from 旧表名);
 
#此方法创建的新表的表数据和旧表是一样的,但可能会出现新表的表结构和旧表的不一致
 
show create table test02\G                    #获取数据表的表结构、索引等信息
SELECT * from test02;

mysql> show tables;
+-----------------+
| Tables_in_zx101 |
+-----------------+
| zx              |
+-----------------+
1 row in set (0.00 sec)mysql> select * from zx;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | zx   | 男   |   22 |
|  2 | ctt  | 女   |   23 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql> create table zx1 like zx;    ##复制表
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+-----------------+
| Tables_in_zx101 |
+-----------------+
| zx              |
| zx1             |
+-----------------+
2 rows in set (0.00 sec)mysql> insert into zx1 select * from zx;  ##复制表数据
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from zx1;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | zx   | 男   |   22 |
|  2 | ctt  | 女   |   23 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql> create table zx2 (select * from zx);   ##或者直接复制表和数据但可能会出现两个表的结构不一致
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from zx2;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | zx   | 男   |   22 |
|  2 | ctt  | 女   |   23 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql>

(2)清空表数据

方法一:
delete from xy102;
#DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。
 
方法二:
truncate table xy102;
#TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录。

方法一

mysql>  create table zx4(id int AUTO_INCREMENT, name varchar(20), sex char(2), age int, primary key(id));   ##设置id自增长
Query OK, 0 rows affected (0.00 sec)自己添加表内容mysql> select * from zx4;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | jlh  | 男   |   24 |
|  2 | zx   | 男   |   22 |
|  3 | zyr  | 男   |   20 |
|  4 | tc   | 男   |   19 |
+----+------+------+------+
4 rows in set (0.00 sec)mysql> show create table zx4;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                           |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| zx4   | CREATE TABLE "zx4" ("id" int(11) NOT NULL AUTO_INCREMENT,"name" varchar(20) DEFAULT NULL,"sex" char(2) DEFAULT NULL,"age" int(11) DEFAULT NULL,PRIMARY KEY ("id")
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |   ##自增长数据为5
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> delete from zx4;   ##删除表数据
Query OK, 4 rows affected (0.00 sec)mysql> show create table zx4;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                           |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| zx4   | CREATE TABLE "zx4" ("id" int(11) NOT NULL AUTO_INCREMENT,"name" varchar(20) DEFAULT NULL,"sex" char(2) DEFAULT NULL,"age" int(11) DEFAULT NULL,PRIMARY KEY ("id")
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |  ##自增长数据仍为5
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> insert into zx4(name, sex, age) values( 'tc', '男', 19);
Query OK, 1 row affected (0.00 sec)mysql> select * from zx4;     ##添加数据时id按之前的数据自增1
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  5 | tc   | 男   |   19 |
+----+------+------+------+
1 row in set (0.00 sec)mysql>

方法二

mysql> truncate table zx4;
Query OK, 0 rows affected (0.01 sec)mysql> show create table zx4;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                          |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| zx4   | CREATE TABLE "zx4" ("id" int(11) NOT NULL AUTO_INCREMENT,   ##id为自增长"name" varchar(20) DEFAULT NULL,"sex" char(2) DEFAULT NULL,"age" int(11) DEFAULT NULL,PRIMARY KEY ("id")
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |  
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)mysql> insert into zx4(name, sex, age) values( 'tc', '男', 19);
Query OK, 1 row affected (0.00 sec)mysql> select * from zx4;    ##添加内容id从1开始
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | tc   | 男   |   19 |
+----+------+------+------+
1 row in set (0.00 sec)mysql>

(3)创建临时表

临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表。

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

创建临时表,但show tables;查不到

mysql>  create temporary table linshi(id int AUTO_INCREMENT, name varchar(20), sex char(2), age int, pri
mary key(id));
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+-----------------+
| Tables_in_zx101 |
+-----------------+
| zx              |
| zx1             |
| zx2             |
| zx4             |
+-----------------+
4 rows in set (0.00 sec)mysql>

临时表可以进行增删改查操作

mysql> insert into linshi values(1, 'tc', '男', 19);
Query OK, 1 row affected (0.00 sec)mysql> insert into linshi values(2, 'zx', '男', 20);
Query OK, 1 row affected (0.00 sec)mysql> select * from linshi;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | tc   | 男   |   19 |
|  2 | zx   | 男   |   20 |
+----+------+------+------+
2 rows in set (0.00 sec)mysql> delete from linshi where id=2;
Query OK, 1 row affected (0.00 sec)mysql> select * from linshi;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | tc   | 男   |   19 |
+----+------+------+------+
1 row in set (0.00 sec)mysql>

2、外键约束(保证数据的完整性和一致性)

外键的定义:如果同一个属性字段X在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。

主键表和外键表的理解:
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)

注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。

(1)创建主从表

#创建主表 class
create table class (name varchar(10), price int);
 
#创建从表 student
create table student (id int, username varchar(20), ageint, sex char(2), classname varchar(10));
 
#为主表class添加一个主键约束,主键名建议以“PK_”开头,可以省略不写,系统会自动分配一个名称
alter table class add primary key (name);
 
#为从表student表添加外键,并将class表的name字段和 student表的classname字段建立外键关联。外键名建议以“FK_”开头,可以省略不写,系统会自动分配一个名称
alter table student add foreign key (classname) references class(name);
 
desc class;   #查看主键表的表结构
desc student;      #查看外键表的表结构
show create table student;   #可以查看表结构的详细信息

mysql> create table class (name varchar(10), price int);
Query OK, 0 rows affected (0.01 sec)mysql> create table student (id int, username varchar(20), age int, sex char(2), classname varchar(10));Query OK, 0 rows affected (0.00 sec)mysql>
mysql> alter table class add primary key (name);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table student add foreign key (classname) references class(name);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show create table class\G
*************************** 1. row ***************************Table: class
Create Table: CREATE TABLE "class" ("name" varchar(10) NOT NULL,"price" int(11) DEFAULT NULL,PRIMARY KEY ("name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)mysql> show create table student\G
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE "student" ("id" int(11) DEFAULT NULL,"username" varchar(20) DEFAULT NULL,"age" int(11) DEFAULT NULL,"sex" char(2) DEFAULT NULL,"classname" varchar(10) DEFAULT NULL,KEY "classname" ("classname"),CONSTRAINT "student_ibfk_1" FOREIGN KEY ("classname") REFERENCES "class" ("name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

(2)主从表中插入数据

#插入新的数据记录时,要先主表再从表
insert into class values('云计算', 24000);
insert into class values('JAVA', 25000);
insert into student values(1, 'zhangsan',  2, '男', 'JAVA');

mysql> insert into class values('云计算', 24000);
Query OK, 1 row affected (0.00 sec)mysql> insert into class values('JAVA', 25000);
Query OK, 1 row affected (0.00 sec)mysql> select * from class;
+-----------+-------+
| name      | price |
+-----------+-------+
| JAVA      | 25000 |
| 云计算    | 24000 |
+-----------+-------+
2 rows in set (0.00 sec)mysql> insert into student values(1, 'zhangsan', 20, '男', 'JAVA');
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+------+----------+------+------+-----------+
| id   | username | age  | sex  | classname |
+------+----------+------+------+-----------+
|    1 | zhangsan |   20 | 男   | JAVA      |
+------+----------+------+------+-----------+
1 row in set (0.00 sec)mysql> insert into student values(2, 'lisi', 21, '男', 'JSP');  ##classname的值只能是class表中name值中的两个之一
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails ("zx101"."student", CONSTRAINT "student_ibfk_1" FOREIGN KEY ("classname") REFERENCES "class" ("name"))
mysql>

(3)主从表中删除数据

#删数数据记录时,要先从表再主表,也就是说删除主键表的记录时必须先删除其他与之关联的表中的记录。

delete from student where id=1;

delete from class where name='JAVA';

mysql> select * from student;
+------+----------+------+------+-----------+
| id   | username | age  | sex  | classname |
+------+----------+------+------+-----------+
|    1 | zhangsan |   20 | 男   | JAVA      |
+------+----------+------+------+-----------+
1 row in set (0.00 sec)mysql> insert into student values(2, 'lisi', 21, '男', '云计算');
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+------+----------+------+------+-----------+
| id   | username | age  | sex  | classname |
+------+----------+------+------+-----------+
|    1 | zhangsan |   20 | 男   | JAVA      |
|    2 | lisi     |   21 | 男   | 云计算    |
+------+----------+------+------+-----------+
2 rows in set (0.00 sec)mysql> delete from class where name='JAVA'; ##想要删除主从表中的数据,必须先删除从表中外键约束的内容,再删除主键内容,负责无法删除
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails ("zx101"."student", CONSTRAINT "student_ibfk_1" FOREIGN KEY ("classname") REFERENCES "class" ("name"))
mysql> delete from student where id=1;
Query OK, 1 row affected (0.00 sec)mysql> delete from class where name='JAVA';
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+------+----------+------+------+-----------+
| id   | username | age  | sex  | classname |
+------+----------+------+------+-----------+
|    2 | lisi     |   21 | 男   | 云计算    |
+------+----------+------+------+-----------+
1 row in set (0.00 sec)mysql> select * from class;
+-----------+-------+
| name      | price |
+-----------+-------+
| 云计算    | 24000 |
+-----------+-------+
1 row in set (0.00 sec)mysql>

(4)删除外键约束

#查看和删除外键约束

show create table student;

desc student;

alter table student drop foreign key student_ibfk_1;

alter table student drop key classname;

mysql> show create table student\G
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE "student" ("id" int(11) DEFAULT NULL,"username" varchar(20) DEFAULT NULL,"age" int(11) DEFAULT NULL,"sex" char(2) DEFAULT NULL,"classname" varchar(10) DEFAULT NULL,KEY "classname" ("classname"),CONSTRAINT "student_ibfk_1" FOREIGN KEY ("classname") REFERENCES "class" ("name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)mysql> alter table student drop foreign key student_ibfk_1; ##想删除外键,先删除外键别名
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show create table student\G
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE "student" ("id" int(11) DEFAULT NULL,"username" varchar(20) DEFAULT NULL,"age" int(11) DEFAULT NULL,"sex" char(2) DEFAULT NULL,"classname" varchar(10) DEFAULT NULL,KEY "classname" ("classname")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)mysql> alter table student drop key classname; ##再删除外键键名
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show create table student\G
*************************** 1. row ***************************Table: student
Create Table: CREATE TABLE "student" ("id" int(11) DEFAULT NULL,"username" varchar(20) DEFAULT NULL,"age" int(11) DEFAULT NULL,"sex" char(2) DEFAULT NULL,"classname" varchar(10) DEFAULT NULL  ##外键被删除
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)mysql>

3、数据库用户管理

(1)新建用户

create user '用户名'@'来源地址' [identified by [password] '密码'];
'用户名':指定将创建的用户名
'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
            若使用加密密码,需要先使用SELECT PASSWORD('密码'); 获取密文,再在语句中              添加 PASSWORD '密文';
            若省略“IDENTIFIED BY”部分,则用户的密码将为空(不建议使用)

mysql> create user 'zx'@'%' identified by 'abc123';
Query OK, 0 rows affected (0.00 sec)mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| zx            | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+---------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)mysql>

(2)查看用户信息

#创建后的用户保存在 mysql 数据库的 user 表里
USE mysql;
SELECT User,authentication_string,Host from user;
#查看当前登录用户
select user();
[root@zx1 ~]# mysql -u zx -pabc123 -h 20.0.0.10
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select user();
+--------------+
| user()       |
+--------------+
| zx@20.0.0.10 |
+--------------+
1 row in set (0.00 sec)mysql>

(3)重命名用户

RENAME USER '用户名'@'来源地址' TO '新用户名'@'来源地址';

mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| zx            | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+---------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)mysql> rename user 'zx'@'%' to 'zx1'@'localhost';
Query OK, 0 rows affected (0.00 sec)mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| zx1           | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+---------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)mysql>

(4)删除用户

DROP USER '用户名'@'来源地址';

mysql> rename user 'zx'@'%' to 'zx1'@'localhost';
Query OK, 0 rows affected (0.00 sec)mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| zx1           | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+---------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)mysql> drop user 'zx1'@'localhost';
Query OK, 0 rows affected (0.00 sec)mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

(5)修改当前登录用户密码

方法1

SET PASSWORD = PASSWORD('123456');

方法2

ALTER USER 'root'@'localhost' IDENTIFIED BY 'abc123';

方法一

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)mysql> set password = password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> quit
Bye
[root@zx1 ~]# mysql -u root -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

方法二

mysql> alter user 'root'@'localhost' identified by 'abc123';
Query OK, 0 rows affected (0.00 sec)mysql> quit
Bye
[root@zx1 ~]# mysql -u root -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

(6)修改其他用户密码

SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('abc123');

mysql> create user 'zx'@'%' identified by 'abc123';
Query OK, 0 rows affected (0.01 sec)mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| zx            | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+---------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)mysql> alter user 'root'@'localhost' identified by 'abc123';
Query OK, 0 rows affected (0.00 sec)mysql> set password for 'zx'@'%' = password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql>

(7)忘记 root 密码的解决办法


(1)修改 /etc/my.cnf 配置文件,不使用密码直接登录到 mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables                    #添加,使登录mysql不使用授权表
 
systemctl restart mysqld
 
mysql                                #直接登录
 
(2)使用 update 修改 root 密码,刷新数据库
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';
 
FLUSH PRIVILEGES;
quit
 
mysql -u root -pabc123

[root@zx1 ~]# vim /etc/my.cnf
[root@zx1 ~]# systemctl restart mysqld
[root@zx1 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> update mysql.user set authentication_string = password('abc123') where user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 2  Changed: 0  Warnings: 1mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> quit
Bye
[root@zx1 ~]# mysql -u root -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

在server-id = 1下一行添加此内容

4、数据库用户授权

(1)授予权限

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

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
#mysql 5.7或之前的版本支持使用 IDENTIFIED BY '密码' 创建用户和授予权限,8.0开始只能 用于授予权限。

----------------------------------------------------------------------------------------------------------
#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。
#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符“*”。例如,使用“mydb.*”表示授权操作的对象为 mydb数据库中的所有表。
#'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.mydb.com”、“192.168.80.%”等。
#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分,则用户的密码将为空。

zx用户只有登录权限

[root@zx1 ~]# mysql -u zx -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)mysql>

进入root用户给zx用户授权

[root@zx1 ~]# mysql -u root -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| zx0105             |
| zx101              |
+--------------------+
6 rows in set (0.00 sec)mysql> use zx101;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+-----------------+
| Tables_in_zx101 |
+-----------------+
| class           |
| student         |
| zx              |
| zx1             |
| zx2             |
| zx4             |
+-----------------+
6 rows in set (0.00 sec)mysql> grant select on zx101.* to 'zx'@'%'; ##授权zx用户数据库zx101的select权限
Query OK, 0 rows affected (0.01 sec)mysql> quit
Bye
[root@zx1 ~]# mysql -u zx -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select user();
+--------------+
| user()       |
+--------------+
| zx@localhost |
+--------------+
1 row in set (0.00 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| zx101              |
+--------------------+
2 rows in set (0.00 sec)mysql> use zx101;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+-----------------+
| Tables_in_zx101 |
+-----------------+
| class           |
| student         |
| zx              |
| zx1             |
| zx2             |
| zx4             |
+-----------------+
6 rows in set (0.00 sec)mysql> select * from zx101.zx;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | zx   | 男   |   22 |
|  2 | ctt  | 女   |   23 |
|  3 | jlh  | 男   |   21 |
|  4 | zyr  | 男   |   20 |
+----+------+------+------+
4 rows in set (0.00 sec)mysql> delect from zx101.zx where id=1; ##只有select的权限,没有其他权限
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delect from zx101.zx where id=1' at line 1
mysql>

(2)查看权限

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

[root@zx1 ~]# mysql -u root -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.44 Source distributionCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root          | %         | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| zx            | %         | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)mysql> show grants for 'zx'@'%';
+---------------------------------------+
| Grants for zx@%                       |
+---------------------------------------+
| GRANT USAGE ON *.* TO 'zx'@'%'        |
| GRANT SELECT ON "zx101".* TO 'zx'@'%' |
+---------------------------------------+
2 rows in set (0.00 sec)mysql>

(3)撤销权限

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

mysql> revoke select on zx101.* from 'zx'@'%';
Query OK, 0 rows affected (0.00 sec)mysql> show grants for 'zx'@'%';
+--------------------------------+
| Grants for zx@%                |
+--------------------------------+
| GRANT USAGE ON *.* TO 'zx'@'%' |
+--------------------------------+
1 row in set (0.00 sec)mysql>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECharts 词云案例三:2024年阅读关键词

ECharts 词云案例三:2024年阅读关键词 引言 在数据可视化领域,ECharts 以其强大的功能性和灵活性,成为开发者和设计师的首选工具之一。继上一篇关于 ECharts 词云图的详细介绍后,本文将探索词云图的进阶应用——使用蒙版来创造更…

19.面包屑导航制作

面包屑导航制作 官网&#xff1a;组件 | Element 1. 在layout下新建BreadCrumb.vue BreadCrumb.vue <template><div class"bread-text"><el-breadcrumb class"bred"separator"/"><el-breadcrumb-item v-for"item in…

家人们,我最近迷上了食家巷的方形饼

那独特的方形造型&#xff0c;超级可爱。&#x1f44f;刚出炉的方形饼&#xff0c;热气腾腾&#xff0c;散发着诱人的香气。&#x1f60b;咬一口&#xff0c;酥脆的外皮“咔滋”作响&#xff0c;里面的面饼却又十分绵软&#xff0c;口感层次超丰富&#xff01;&#x1f929;无论…

Golang | Leetcode Golang题解之第144题二叉树的前序遍历

题目&#xff1a; 题解&#xff1a; func preorderTraversal(root *TreeNode) (vals []int) {var p1, p2 *TreeNode root, nilfor p1 ! nil {p2 p1.Leftif p2 ! nil {for p2.Right ! nil && p2.Right ! p1 {p2 p2.Right}if p2.Right nil {vals append(vals, p1.V…

iview 组件里面的(任何一个月)整月日期全部选中_iview时间轴选中有历史记录日期

iview 组件里面的整月日期全部选中&#xff1a; ①&#xff1a;第一种是当前月的日期全部选中&#xff1a; 先上效果图&#xff1a;当前月分 获取到的值&#xff1a; 当前月的方法&#xff1a; // getDateStr() {// var curDate new Date();// var curMonth curDate.ge…

每日一题——Python代码实现力扣58. 最后一个单词的长度(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码逻辑&#xff1a; 时间复杂度&#xff1a; 空间复杂度&#xff1a; …

HTML5休闲小游戏《城堡守卫传说》源码,引流、刷广告利器

HTML5休闲小游戏《城堡守卫传说》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods467802.html

成都百洲文化传媒有限公司助力商家扬帆远航

在数字经济的浪潮中&#xff0c;电商行业如日中天&#xff0c;成都百洲文化传媒有限公司正是这一领域的佼佼者。作为一家专注于电商服务的传媒公司&#xff0c;百洲文化以其专业的服务、创新的理念和卓越的成果&#xff0c;在业内树立了良好的口碑&#xff0c;成为众多商家信赖…

划分子网和构造超网的学习

子网掩码长度&#xff1d;32位 某位&#xff1d;1&#xff1a;IP地址中的对应位为网络号和子网号 某位&#xff1d;0&#xff1a;IP地址中的对应位为主机号 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。 使用子网掩码(subnet mask)可…

Python大数据-电商商品详情数据分析【JD电商平台为例】

一、项目背景 网上购物已经成为大众生活的重要组成部分。人们在电商平台上浏览商品并购物&#xff0c;产生了海量的用户行为数据&#xff0c;用户对商品的详情数据对商家具有重要的意义。利用好这些碎片化、非结构化的数据&#xff0c;将有利于企业在电商平台上的持续发展&…

Hbuilder无线连接手机

1.链接数据线进行操作 打开adbs所在位置 2.运行cmd 或者 powershell 3.运行项目

Linux 式套娃,把“文件系统”安装在一个“文件”上?

背景 “文件”在文件系统之中&#xff0c;这是人人理解的概念。但“文件”之上还有一个文件系统&#xff1f;那岂不是成套娃了。但这个其实是可以的。这个就涉及到今天我们要讲的 loop 设备。 很多童鞋在学习 Linux 的文件系统时&#xff0c;涉及到对磁盘设备的格式化&#x…

一个轻量级的TTS模型实现

1.环境 python 版本 3.9 2.训练数据集 本次采用LJSpeech数据集&#xff0c;百度网盘下载地址 链接&#xff1a;https://pan.baidu.com/s/1DDFmPpHQrTR_NvjAfwX-QA 提取码&#xff1a;1234 3.安装依赖 pip install TTS 4.工程结构 5代码部分 decoder.py import torch f…

汇编基础之使用vscode写hello world

汇编语言&#xff08;Assembly Language&#xff09; 概述 汇编语言&#xff08;Assembly Language&#xff09;是一种低级编程语言&#xff0c;它直接对应于计算机的机器代码&#xff08;machine code&#xff09;&#xff0c;但使用了更易读的文本符号。每台个人计算机都有…

iOS 18 Siri 升级之后都有哪些改变?

新界面 首先最显著的改变就是 Siri 的界面不同了&#xff0c;之前的界面是在打开 Siri 之后会出现一个圆形图案&#xff0c;而在 Siri 升级之后变成了屏幕边缘发出亮光。 来源&#xff1a;Apple 可在任意位置使用 苹果的生成式人工智能 Apple Intelligence 将为 Siri 提供支…

注意力机制和Transformer模型各部分功能解释

文章目录 Transformer1、各部分功能解释2、通过例子解释a.输入预处理位置编码b.Encoder 的处理c.Decoder的输入Decoder的工作流程d.输出预测总结 Attention代码和原理理解 Transformer 运行机理&#xff1a; &#xff08;1&#xff09;假设我们需要进行文本生成任务。我们将已…

Springboot集成SSE消息推送

SSE介绍 SSE&#xff08;Server-Sent Events&#xff09;的全称是服务器推送事件&#xff0c;它是一种基于 HTTP 协议的实时通信技术&#xff0c;用于在客户端和服务器之间建立持久、单向的链接&#xff0c;允许服务器向客户端发送异步消息。 了解 websocket 的小伙伴&…

SAP BC 换了logo后,其他人的logo都已经换了,但是其中有一台就是PRD 显示DEV的logo,从smw0上下载的是PRD

昨天终于发现是缓存的问题 GUI登录后 选项-本地数据-缓存 删除本地缓存文件&#xff0c;问题解决了

机器学习课程复习——聚类算法

Q:什么是硬聚类,什么是软聚类? 如果一个样本只能属于一个类,则称为硬聚类(hard clustering); 如果一个样本可以属于多个类,则称为软聚类(soft clustering)。 Q:聚类和分类的区别? 聚类分类学习类型无监督学习方法 不需要事先标记的数据 通过发现数据中的模式或结构来组…

sprintboot依赖管理和自动配置

springboot依赖管理和自动配置 依赖管理和自动配置依赖管理什么是依赖管理修改自动仲裁/默认版本号 starter场景启动器starter场景启动器基本介绍官方提供的starter第三方starter 自动配置自动配置基本介绍SpringBoot自动配置了哪些?如何修改默认配置如何修改默认扫描包结构re…