dba4 多表查询 mysql管理工具 用户授权

本文介绍MySQL中的多表查询技巧,包括复制表、笛卡尔集、嵌套查询等,并覆盖MySQL管理工具的选择与部署,以及用户授权和权限撤销的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:多表查询

1.复制表(作用:备份表,快速表)

格式:mysql>create table  新表名  sql查询    旧表;(将指定的查询结果复制为新表)

use db4;

mysql> create table user2 select * from db3.user;(指定表的内容复制到新表作为新表内容)

mysql> show tables;

mysql> select * from t22;

create table user3 select name,uid,shell from db3.user order by uid desc limit 5;(指定条件的前5行以排序的方式复制到新表中作为新表内容)

select * from user3;

select * from user where shell="abc";   (到源库打命令)

create table user4 select * from db3.user where 1=2;

select * from user4;

desc user4;

2,多表查询

格式:select 字段名列表  from   表a,表b;

格式2:select 字段名列表 from  表a,表b  where 条件;

mysql> create table t3 select name,uid,shell from db3.user limit 3;

mysql> select * from t3; 

mysql> create table t4 select name,password,uid,homedir  from db3.user limit 5;

mysql> select * from t4;

迪卡尔集

mysql> select * from t3,t4;

mysql> select t3.name,t4.name  from  t3,t4;

mysql> select t3.*,t4.password,t4.homedir  from t3,t4;
mysql> select t3.*, t4.password,t4.homedir  from  t3,t4  where t3.uid =t4.uid;
mysql> select t3.*,t4.password,t4.homedir,t4.uid from t3,t4 where t3.uid=t4.uid;

嵌套查询(把内层的查询结果作为外层查询的查询条件)

select   字段名列表  from  表名  where  条件  (select  字段名列表  from  表名  where   条件);

mysql> select name from db3.user order by uid desc limit 1

mysql> select avg(uid) from db3.user;
mysql> select name,uid from db3.user where uid<(select avg(uid) from db3.user);   avg:平均值

 

mysql> select name from db4.t3;                                                   (尽量不用嵌套查询)

mysql> select name from db3.user where name in (select name from db4.t3);

 

左连接查询:以左边表为主显示查询结果

格式:select  字段名列表  from  表名a  left   join   表名b     on   条件;

先建表

mysql> create table db4.t5 select name,uid,shell from db3.user limit 5;

mysql> select * from db4.t5;

mysql> create table db4.t6 select name,uid,shell from db3.user limit 7;

mysql> select * from db4.t6;

(相同的显示出来,以左边为主)

mysql> select * from t5 left join t6 on t5.uid=t6.uid;      left(左边)   join(加入)

mysql> select * from t5 right join t6 on t5.uid=t6.uid;        right(右边)

右连接查询:以右边的表为主显示查询结果

格式:select  字段名列表   from  表名a   right  join  表名b   on    条件;

mysql> select t5.name,t6.name from t5 right  join t6 on t5.uid=t6.uid;(相同的显示出来,以右边为主)

二: mysql管理工具*

      常见的管理工具:

mysql  界面(命令行)操作系统(跨平台)说明(mysql官方bundle包自带)

 mysql-Workbench  界面(图形) 操作系统(跨平台)说明(mysql官方提供

mysql-Feont 界面(图形) 操作系统(Windows)  说明(开源,轻量级客户端软件)

phpMyAdmin 界面(浏览器) 操作系统(跨平台)  说明(开源,需LAMP平台)

Navicat  界面(图形) 操作平台(windows) 说明(专业,功能强大,商业版)

1.准备包:phpMyAdmin-2.11-all-languages.tar.gz

部署运行环境lamp

root@host50 ~]# rpm -q httpd
root@host50 ~]# yum -y install httpd
[root@host50 ~]# systemctl restart httpd
root@host50 ~]# systemctl enable httpd
[root@host50 ~]# yum -y install php-mysql  php
2,安装软件

[root@host50 ~]# tar -xf phpMyAdmin-2.11.11-all-languages.tar.gz

root@host50 ~]# ls

[root@host50 ~]# mv phpMyAdmin-2.11.11-all-languages  /var/www/html/phpadmin
root@host50 ~]# cd /var/www/html
[root@host50 html]# ls
[root@host50 html]# ls phpadmin/index.php
3.创建配置,指定管理数据库服务器。
root@host50 html]# cd phpadmin
[root@host50 phpadmin]# cp  config.sample.inc.php  config.inc.php

root@host50 phpadmin]# vim config.inc.php   (修改17行和31行)可以乱加

4.客户端访问。

打开浏览器输入URL  http://192.168.4.50/phpadmin  (用户root,密码123456)

三,用户授权** (在数据库服务器上添加  连接时使用的用户名)
mysql> grant select,insert on db3.* to admin@"192.168.4.%" identified by "123qqq...A";

改密码:(加密恢复密码)

 

root@host50 ~]# systemctl stop mysqld
[root@host50 ~]# vim /etc/my.cnf       (加skip_grant_tables)不注释空密码登陆,一般注释掉
root@host50 ~]# systemctl  start  mysqld
[root@host50 ~]# mysql
ysql> select host,user,authentication_string from mysql.user;
mysql> update mysql.user set authentication_string=password("123456") where user="root" and host="localhost";

用户授权及权限撤销:

用户授权:在数据库服务器上添加新的连接用户名,默认只有数据库管理员root用户

with grant option 让添加的用户连接服务器后,也有授权权限。

identified by “密码"  新添加的用户连接数据库时,使用的密码

客户端地址 作用:网络中的那些主机使用新添加的用户连接数据库服务器。有如下表示方式:

所有主机  %

网段  192.168.4.%

指定主机 192.168.4.51

本机   localhost

主机名   pc1.tedu.cn

域名    %.tedu.cn

用户名  客户端主机连接数据库服务器时使用的名字,授权时自定义既可名字要有表示性。

数据库名:新添加的连接用户,访问后可以操作的库,表示方式如下:

* . *   所有库  所有表

库名.*   库下的所有表

库名.表名   某张表

权限列表:  新添加的连接用户,对可以操作的库访问权限,权限的表示方式如下:

all  所有权限

命令:命令某种权限 (例如 select,insert,delete)

授权库mysql库记录授权信息,使用不同的表记录不同的授权信息

user  已经添加的连接用户

db  记录已经添加的连接用户对库的访问权限

tables_priv 记录已添加的连接用户对表的访问权限

columns_priv  记录已添加的连接用户对表字段的访问权限

select * from user\G;(竖着显示)

show frants  for 用户@"客户端地址";     查看授权用户的访问权限

授权例子:

mysql> grant select,insert on db3.* to admin@"192.168.4%"  identified by "123qqq...A"; (本机授权给用户只能执行对本机执行指定的权限)

root@host51 ~]# mysql -h192.168.4.50 -uadmin -p123qqq...A  (客户端验证)

mysql> select @@hostname;(客户端验证)

mysql> select user();

mysql> show grants;

授权例子2:

在50服务器 授权主机52 可以使用root 连接自己,对所有库表有完全权限且有授权权限 登陆密码是123qqq...A

mysql> grant all on *.* to root@"192.168.4.52" identified by "123qqq...A"  with grant option;(可以对授权的客户机对本机执行增删改查等权限)

[root@host52 ~]# mysql -h192.168.4.50 -uroot -p123qqq...A

select @@hostname;

select user();

show grants;(查看授权)

grant select,update(name,uid) on db3.user to webuser@"%" identified by "123qqq...A";(可以修改查看)

mysql -h192.168.4.50   -uwebuser  -p123qqq...A

在50主机上查看授权信息

select user,host from mysql.user;

select * from mysql.db \G;

select * from mysql.tables_priv \G;

select * from mysql.colimns_priv \G;

权限撤销(删除新添加用户的访问权限)

MYSQL>revoke  权限 on  数据库名   from    用户名@"客户端地址"

select user,host from mysql.user;

show grants for root@"192.168.4.52";

revoke grant option on *.* from root@"192.168.4.52";

select * from mysql.user where user="root" and host="192.168.4.52"/G;

两种方法:(撤销单个权限)

update mysql.user set Delete_priv="N" where user="root" and host="192.168.4.52";

flush frivleges;

select * from mysql.user where user="root" and host="192.168.4.52"\G;

show grants for root@"192.168.4.52";

(撤销所有权限)

select * from  mysql.user where user="root" and host="192.168.4.52"\G;

revoke all on *.* from root@192.168.4.52";

show grants for root@"192.168.4.52";

删除授权用户(删除添加的连接用户)

mysql>drop user 用户名@"客户端地址:;

drop user root@"192.168.4.52";

授权信息的授权库mysql里  user  db  tables_priv  columns_priv

grant  revoke  drop  user  用户@"客户端地址";

    show  grants for 用户@"客户端地址";

show grants;

修改密码:

授权用户连接数据库服务器后修改连接密码

mysql>set password =password("新密码");

管理员重置授权用户的密码

mysql>set password for 用户名@"客户端地址"=password("新密码");(只能用字母数字符号组合)

 

 

数据库管理
NSD DBA 基础
DAY04内容
09:00 ~ 09:30
上午
09:30 ~ 10:20
10:30 ~ 11:20
11:30 ~ 12:00
作业讲解和回顾
多表查询
MySQL 管理工具
14:00 ~ 14:50
下午
15:00 ~ 15:50
用户授权及撤销
16:10 ~ 17:00
17:10 ~ 18:00
总结和答疑多表查询
多表查询
复制表 复制表
多表查询 多表查询概述
Where 嵌套嵌套查询
多表查询
左连接查询
右连接查询复制表复制表
• 将源表 xxx 复制为新表 yyy
– CREATE TABLE yyy SELECT * FROM xxx;




• 将指定的查询结果复制为新表 zzz
– CREATE TABLE zzz SQL 查询语句 ;复制表(续 1 )
• 复制源表 xxx 的结构到新表 vvv
– CREATE TABLE vvv SELECT * FROM xxx WHERE FALSE;




• 将源表 vvv 的名称改为 www
– ALTER TABLE vvv RENAME TO www;多表查询多表查询概述
• 多表查询(又称 连接查询)




– 将 2 个或 2 个以上的表 按某个条件连接起来,从中选
取需要的数据
– 当多个表中 存在相同意义的字段(字段名可以不同)
时,可以通过该字段连接多个表多表查询
• 格式 1
– select 字段名列表 from 表 a, 表 b ;




• 格式 2
– select 字段名列表 from 表 a, 表 b where 条件;
以上格式的查询结果叫笛卡尔集 显示查询结果的总条目数是 (表 a 的纪
录数 * 表 b 的纪录数)where 子查询
• 使用 where 子查询
– 把内层查询结果作为外层查询的查询条件
• 格式 1




– select 字段名列表 from 表 A where
lect 字段名列表 from 表 A ) ;
条件 ( se
– select 字段名列表 from 表 A where 条件 ( s
elect 字段名列表 from 表 A where 条件 ) ;
– 输出年龄小于平均年龄的学生的名字和年龄
select name,age from student where age < (select a
vg(age) from \ student);左连接查询
• 基本用法




– select 字段名列表 from
LEFT JOIN
表b
ON
条件表达式;
表a右连接查询
• 基本用法




– select 字段名列表 from
RIGHT JOIN
表b
ON
条件表达式;
表aMySQL 管理工

MySQL 管理方式
MySQL 管理方式
常见的 MySQL 管理工具
MySQL 管理工具
MySQL 管理工具
MySQL Workbench
MySQL Front
PhpMyAdminMySQL 管理方式MySQL 管理方式
• mysql 命令的局限性?
• 是否有图形化、更加直观的管理软件?




• 能通过 Web 界面访问吗?常见的 MySQL 管理工具
• 常见的管理工具
类 型




界 面
操作系统
说 明
mysql 命令行 跨平台 MySQL 官方 bundle 包自

MySQL-Workbench 图形 跨平台 MySQL 官方提供
MySQL-Front 图形 Windows 开源,轻量级客户端软件
phpMyAdmin 浏览器 跨平台 开源,需 LAMP 平台
Navicat 图形 Windows 专业、功能强大,商业版MySQL 管理工具MySQL Workbench



解MySQL Front



解PhpMyAdmin
• 基本思路
1. 安装 httpd 、 mysql 、 php-mysql 及相关包




2. 启动 httpd 服务程序
3. 解压 phpMyAdmin 包,部署到网站目录
4. 配置 config.inc.php ,指定 MySQL 主机地址
5. 创建授权用户
6. 浏览器访问、登录使用PhpMyAdmin (续 1 )
#yum -y install httpd php php-mysql
#tar -zxf phpMyAdmin-2.11.11-all-languages.tar.gz -C /var/www/html/
#cd /var/www/html/
#mv phpMyAdmin-2.11.11-all-languages/ phpmyadmin




#chown -R apache:apache phpmyadmin/
#cp phpmyadmin/config.sample.inc.php phpmyadmin/config.inc.php
# sed -n '17p;31p' /var/www/html/phpmyadmin/config.inc.php
$cfg['blowfish_secret'] = 'plj123';
$cfg['Servers'][$i]['host'] = 'localhost';
mysql>create database bbsdb;grant all on bbsdb.* to admin@”localhos
t” identified by “123456”;
#systemctl start httpd ; firefox http://localhost/phpmyadminPhpMyAdmin (续 2 )



解案例 1 : MySQL 管理工具
• 部署 LAMP+phpMyAdmin 平台



习用户授权及权限撤销
密码恢复及设置
恢复 MySQL 管理员密码
设置管理员密码
用户授权及权限撤

用户授权
MySQL 授权库和表信息
GRANT 配置授权
查看用户授权
重设用户密码
权限撤销
撤销用户权限密码恢复及设置恢复 MySQL 管理密码
• 密码忘了怎么办?
1. 停止 MySQL 服务程序




2. 跳过授权表启动 MySQL 服务程序
skip-grant-tables
写入
写入 /etc/my.cnf
/etc/my.cnf 配置文件
配置文件
3. 重设 root 密码(更新 user 表记录)
4. 以正常方式重启 MySQL 服务程序恢复 MySQL 管理密码(续 1 )
• 主要操作过程




[root@localhost ~]# vim /etc/my.cnf
[mysqld]
......
skip-grant-tables
::wq
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql
[mysql> update mysql.user set
authentication_string=password("888888")
-> where
-> user="root" and host="localhost";
mysql> flush privileges;
mysql> quit恢复 MySQL 管理密码(续 2 )
• 主要操作过程




[root@localhost ~]# vim /etc/my.cnf
[mysqld]
......
#skip-grant-tables
::wq
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -uroot -p888888
[mysql>设置管理员密码
• 查看模块、修改配置文件、重启服务




[root@localhost ~]# find / -name "validate_password.so"
/usr/lib64/mysql/plugin/debug/validate_password.so
/usr/lib64/mysql/plugin/validate_password.so
[root@localhost ~]#
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
plugin-load=validate_password.so // 加载模块
validate-password=FORCE_PLUS_PERMANENT // 永久启用模块
validate_password_policy=0 // 只验证密码长度
validate_password_length=6 // 指定密码长度
[root@localhost ~]# systemctl restart mysqld设置管理员密码(续 1 )
• 在 Shell 命令行修改登陆密码




– 需要验证旧密码
– 不适用于跳过授权表启动的情况
[root@localhost ~]# mysqladmin -hlocalhost -uroot -p password
" 新密码 "
Enter password: // 输入旧密码
mysqladmin: [Warning] Using a password on the command line
interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl
connection to ensure password safety.
[root@localhost ~]#案例 2 :密码恢复及设置
1. 恢复 MySQL 管理密码
2. 正常设置管理密码



习创建授权MySQL 授权库和表信息
• 授权库 mysql ,主要的几个表




– user 表,存储授权用户的访问权限
– db 表,存储授权用户对数据库的访问权限
– tables_priv 表,存储授权用户对表的访问权限
– columns_priv 表,存储授权用户对字段的访问权限GRANT 配置授权
• 基本用法




– GRANT 权限列表 .. .. ON 库名 . 表名
– TO 用户名 @' 客户端地址 '
设置密码
– IDENTIFIED BY ' 密码 '
– [ WITH GRANT OPTION ];
是否有授权权限
• 注意事项
– 当库名 . 表名 为 *.* 时,匹配所有库所有表
– 授权设置存放在 mysql 库的 user 表GRANT 配置授权(续 1 )
• 权限列表




– all :匹配所有权限
– SELECT,UPDATE,INSERT .. ..
– SELECT,UPDATE ( 字段 1, .. .. , 字段 N)GRANT 配置授权(续 2 )
• 客户端地址




– % :匹配所有主机
– 192.168.1.% :匹配指定的一个网段
– 192.168.1.1 :匹配指定 IP 地址的单个主机
– %.tarena.com :匹配一个 DNS 区域
– svr1.tarena.com :匹配指定域名的单个主机GRANT 配置授权(续 3 )
• 应用示例




– 新建用户 mydba ,对所有库、表有完全权限
– 允许从任何地址访问,密码设为 s1cr2t!
– 允许该用户为其他用户授权GRANT 配置授权(续 4 )
• 应用示例




– 授权 sqler01 用户,允许从 192.168.4.0/24 网段访问
,对 userdb 库的 user 表有查询权限,登陆密码 8888
88
– 授权 sqler02 用户,允许从本机访问,允许对 userdb
库的任何表有查询
更新 / 插入
mysql>
grant select on / userdb.user
to / 删除权限,密码为 1
sqler01@"192.168.4.0/24"
identified by "888888";
23456
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant select,insert,update,delete on userdb.* to
sqler02@"localhost" identified by "123456";
Query OK, 0 rows affected, 1 warning (0.00 sec)查看用户授权
• 用户查看自己的权限
– SHOW GRANTS;



解查看用户授权(续 1 )
• 管理员可查看其他用户的权限
– SHOW GRANTS FOR 用户名 @' 客户端地址 ';



解重设用户密码
• 授权用户修改自己的密码
– SET PASSWORD=PASSWORD(' 新密码 ');




• 管理员可重设其他用户的密码
– SET PASSWORD
FOR 用户名 @' 客户端地址 '=PASSWORD(' 新密码 ');撤销授权撤销用户权限
• 基本用法




– REVOKE 权限列表 ON 库名 . 表名
– FROM 用户名 @' 客户端地址 ';案例 3 :用户授权及撤销
1. 允许 root 从 192.168.4.0/24 网段 访问,对所有库
/ 表有完全权限,密码为 tarena




2. 添加一个管理账号 dba007 ,完全控制及授权
3. 撤销 root 从本机访问的权限,然后恢复
4. 允许 webuser 从任意客户机登录,只对 webdb 库
有完全权限,密码为 888888
5. 撤销 webuser 的完全权限,改为查询权限总结和答疑
撤销用户权限
问题现象
故障分析及排除
总结和答疑撤销用户权限问题现象
• 无法撤销用户的授权




– 报错 1 : ERROR 1147 (42000)
– 报错 2 : no such grant defined for user
mysql> revoke select on webdb.a from
'webadmin'@'172.40.51.106';
ERROR 1147 (42000): There is no such grant defined for user
'webadmin' on host '172.40.51.106' on table 'a'
mysql>故障分析及排除
• 原因分析




– 授权用户对目标没有权限
– 只有给用户对目标库做过授权才可以撤销权限
• 解决办法
– 查看用户的授权信息,看用户是否对库有权限
[root@dbsvr1 ~]# mysql -uroot -p123
mysql> show grants for 'webadmin'@'172.40.51.106';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值