Mysql的多表查詢,MySQL管理工具,用戶授權及撤銷

1.1 複製表

   作用1 : 備份表

    作用2 :   快速建表

        命令格式: create table  庫名.表名   sql查詢命令

        mysql>  create table udb4.userbak select * from db3.user;
        mysql>    select * from   userbak;
       mysql> create  table db4.user2 select * from db3.user where uid <= 10;
       mysql>   select * from  user2;                                 

mysql>   create table db4.user3 select * from db3.user where 1=2;   #  將db3.user的表結構賦與db4.user3,,,,,,,where 1=2  指的是事件是假的;
mysql> desc db3.user;     #db3.user的表結構和db4.user3的表結構一樣,但是db3.user的表結構的鍵值不會賦與db4.user3,需要自己額外添加鍵值,

1.2 多表查詢:

    格式1:多表查詢

             select 字段名列表  from 表名列表;    笛卡爾集: 表記錄相乘的積是查詢結果;

               select   字段名列表   from 表名列表  where  條件;

mysql> create table db4.t1 select name,uid,shell,password from db3.user limit 3;  # 通過複製表格的方法創建db4.t1 表格
mysql>   create table db4.t2 select name,uid,homedir from  db3.user limit 5;   # 通過複製表格的方法創建db4.t2 表格
mysql>   select * from  t1,t2  where t1.name="root" t2.name="root";  # 從t1,t2表中查詢t1.name="root" t2.name="root"  所有列
mysql> select t1.name,t1.uid,t2.homedir from  t1,t2 where t1.name="root" and t2.name="root"; # 字段名列表:                 name,t1.uid,t2.homedir   這些列   ,表明列表:t1,t2
mysql> select * from   t1,t2 where t1.uid=t2.uid;    # 

+--------+------+---------------+----------+--------+------+---------+
| name   | uid  | shell         | password | name   | uid  | homedir |
+--------+------+---------------+----------+--------+------+---------+
| root   |    2 | /bin/bash     | x        | root   |    2 | /root   |
| bin    |    2 | /sbin/nologin | f        | root   |    2 | /root   |
| root   |    2 | /bin/bash     | x        | bin    |    2 | /bin    |
| bin    |    2 | /sbin/nologin | f        | bin    |    2 | /bin    |
| daemon |    3 | /sbin/nologin | f        | daemon |    3 | /sbin   |
+--------+------+---------------+----------+--------+------+---------+
 

 

   格式2: where 嵌套查詢(子查詢):把內層查詢結果作爲外層查詢的查詢條件;

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

mysql> select name,uid from  db3.user where uid < (select avg(uid) from db3.user);  #db3.user表裏輸出uid值小於uid字段平均值                                                                                                                                  的用戶名和uid;

 mysql> select name from db4.t1

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

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

 兩個表裏面存儲的數據信息相同,但是有重複的: (比較兩個表裏面相同的數據)

格式3: 左連接查詢 (以左邊的表爲主顯示查詢結果)

             select 字段名列表  from 表名  lest  join 表名  on 條件;

格式4 : 右連接查詢(以右邊的表爲主顯示查詢結果)

              select 字段名列表  from 表名  right join 表名  on 條件;

mysql> create table db4.t3 select name,uid,shell from db3.user limit 5;
mysql> create table db4.t4 select name,uid,shell from db3.user limit 9;
mysql> select * from db4.t3 left join db4.t4 on t3.uid = t4.uid;

| name   | uid  | shell         | name   | uid  | shell         |
+--------+------+---------------+--------+------+---------------+
| root   |    2 | /bin/bash     | root   |    2 | /bin/bash     |
| bin    |    2 | /sbin/nologin | root   |    2 | /bin/bash     |
| root   |    2 | /bin/bash     | bin    |    2 | /sbin/nologin |
| bin    |    2 | /sbin/nologin | bin    |    2 | /sbin/nologin |
| daemon |    3 | /sbin/nologin | daemon |    3 | /sbin/nologin |
| adm    |    4 | /sbin/nologin | adm    |    4 | /sbin/nologin |
| lp     |    5 | /sbin/nologin | lp     |    5 | /sbin/nologin |
+--------+------+---------------+--------+------+---------------+

mysql> select * from db4.t3 right join db4.t4 on t3.uid = t4.uid;

+--------+------+---------------+----------+------+----------------+
| name   | uid  | shell         | name     | uid  | shell          |
+--------+------+---------------+----------+------+----------------+
| root   |    2 | /bin/bash     | root     |    2 | /bin/bash      |
| root   |    2 | /bin/bash     | bin      |    2 | /sbin/nologin  |
| bin    |    2 | /sbin/nologin | root     |    2 | /bin/bash      |
| bin    |    2 | /sbin/nologin | bin      |    2 | /sbin/nologin  |
| daemon |    3 | /sbin/nologin | daemon   |    3 | /sbin/nologin  |
| adm    |    4 | /sbin/nologin | adm      |    4 | /sbin/nologin  |
| lp     |    5 | /sbin/nologin | lp       |    5 | /sbin/nologin  |
| NULL   | NULL | NULL          | sync     |    6 | /bin/sync      |
| NULL   | NULL | NULL          | shutdown |    7 | /sbin/shutdown |
| NULL   | NULL | NULL          | halt     |    8 | /sbin/halt     |
| NULL   | NULL | NULL          | mail     |    9 | /sbin/nologin  |
+--------+------+---------------+----------+------+----------------+
 

二,mysql 管理工具 (訪問mysql數據庫服務的方式)

命令行

安裝圖形軟件

web頁面

1部署運行環境

[root@host50 ~]# yum  -y install httpd php php-mysql.x86_64 
[root@host50 ~]# systemctl start  httpd.service

[root@host50 ~]# systemctl enable  httpd.service 

2.安裝軟件 :(在官網下載軟件包)

cd /root

[root@host50 ~]#  tar  -zxvf phpMyAdmin-2.11.11-all-languages.tar.gz 
[root@host50 ~]#  mv phpMyAdmin-2.11.11-all-languages /var/www/html/admin  # 移動目錄並且重命名
 

3.修改軟件配置文件

[root@host50 ~]# cd  /var/www/html/admin/

[root@host50 ~]#  cp config.sample.inc.php  config.inc.php   #將配置文件進行復制

[root@host50 admin]#  vim  config.inc.php    #  修改配置文件

    $cfg['blowfish_secret'] = '123';       # 填寫密碼

    $cfg['Servers'][$i]['host'] = 'localhost';     # 如果phpMyAdmin-2.11.11-all-languages.tar.gz是安裝在另外一個服務機器裏面,

則這邊應該在 $cfg['Servers'][$i]['host'] =後面應該填寫數據庫服務器的地址,在該實驗中由於軟件包是安裝在數據庫這個服務器裏面,所以直接填寫localhost

4.在客戶端訪問軟件

http://192.168.4.50/admin

5.使用數據庫管理登陸

   用戶 root

   密碼 123456

相當於 mysql -uroot -p123456

四。用戶授權及撤銷

   4.1   恢復root 密碼

           1.)停止 Mysql的服務程序:[root@host50 ]# systemctl stop mysqld.service      

            2) 跳過授權表啓動mysql 服務,配置主配置文件:

                          [root@host50 admin]#   vim   /etc/my.cnf

                             [mysql]                  # 在 [mysql]下面添加skip-grant-tables

                             skip-grant-tables               # 添加這條

                            #validate_password_length=6              # 需要把密碼策略註釋掉
                           #validate_password_policy =0
                        
               3) 重設root密碼:   

                     [root@host50 ]# mysql
                        mysq  l> desc mysql.user;     查看user表結構

                                                            其中  user: 登陸的用戶名      host : 客戶端地址   authentication_string 表示加密處理

                   mysql> select user,host,authentication_string from mysql.user;

                 +-----------+-----------+-------------------------------------------+
| user      | host      | authentication_string                     |
+-----------+-----------+-------------------------------------------+
| root      | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+-----------+-------------------------------------------+
      mysql> update mysql.user         # 更新表格
    -> set authentication_string=password("123456")   #  重新設置登陸密碼
    -> where
    -> user="root" and host="localhost";           # 查詢條件

mysql> flush privileges;                #刷新
 [root@host50 admin]# vim /etc/my.cnf                 # 重新配置文件
        [mysqld]
validate_password_length=6        // 將密碼策略註釋去掉
validate_password_policy =0         //將密碼策略註釋去掉
 #skip-grant-tables                   //將這條註釋掉
  [root@host50 admin]#  systemctl  restart mysqld             #重新重起mysqld
[root@host50 admin]#  mysql -uroot -p123456                   # 用自己重新設置的密碼登陸mysql
               

    在shell命令行修改root登陸密碼

  [root@host50 admin]# mysqladmin -hlocalhost -p password "abc123";    #  password表示密文傳輸

 Enter password:                     # 此時輸入的之前用root用戶登陸數據庫的密碼

[root@host50 admin]# mysql -uroot -p123456    # 使用修改後的密碼登陸數據庫
host50  是數據庫的操作系統

4.2 用戶授權:  在數據庫服務器上添加新的連接用戶名並設置訪問權限

           ——授權命令

格式: mysql>  grant    權限列表  on  庫名.表名  to  用戶名@“客戶端地址”   identified by "密碼"  with grant option;  #

          #(加上with grant option  表示新添加的用戶的權限 擁有 grant 權限:指的是能添加其他的用戶權限)   

      注意事項:

                ---當 庫名.表名  爲  *.*  時 ,匹配所有庫和所有表

           權限列表 :

                    all: 匹配所有權限

                      select,update,insert 

                      select   ,  update(字段1,,,,)

                       usage       無權限         

          %:匹配所有的主機

          192.168.1.%   :匹配指定的一個網段

          192.168.1.1     :匹配指定的ip地址

例子:

mysql> grant all on *.* to mydba@"%" identified by "123456" with grant option;

mysql> grant all on db3.* to admin@"localhost" identified by "plj123";
mysql> grant select,update(name) on db3.user to yaya@"192.168.4.51" identified by "123456";

mysql> grant  select on *.* to mydba2@"%" identified by "123456";

查看mysql數據庫表格 :mysql.user,mysql.db,mysql.columns_priv

mysql> select use,host from mysql.user;   #  查看擁有新添加的用戶

mysql> select *  from mysql.user\G;

mysql> select user,host from mysql.db;
mysql> select user,host from mysql.tables;

mysql> select user,host from mysql.columns_priv;
 

[root@host50 admin]#  mysql -uadmin -pplj123    #  在主機裏面用uadmin用戶登陸

mysql> show databases;   # 只是顯示db3的庫

mysql>use db3;

mysql>show tables;     # 只是顯示db3庫的所有表格;

mysql> show grants;    #查看當前用戶擁有的權限

[root@host51 ~]# mysql -h192.168.4.50 -uyaya -p123456;     #  在主機host51用yaya 用戶登陸192.168.4.50的數據庫
mysql> select user();    # 查看當前登陸的用戶
   測試權限,執行管理庫的命令,管理表的命令  記錄管理命令

mysql> show databases;   #  只是顯示db3庫

mysql>use db3;

mysql>show tables;     # 只是顯示user表格
mysql> update user set name="haha" where name="root";   # 可以修改成功
mysql> insert into user(name) values("sss");  #不能修改,權限不足

  mysql> update user set password="haha" where password="f"; #不能修改,權限不足

 

4.3 權限撤銷 :  把添加用戶的訪問權限刪除

mysql>  revoke  權限列表 on  數據庫名 from  用戶名@“客戶端地址”;

 

mysql> show grants for mydba@"%";    #管理員可查看其他用戶的權限
 

mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+

mysql> revoke grant option on *.* from  mydba@"%";
mysql> show grants for mydba@"%";
mysql> revoke delete,insert,update on *.* from  mydba@"%";
mysql> revoke  all on *.* from  mydba@"%";

 


| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
 GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION       賦予權限的能力

 4.4   刪除添加的用戶:  drop user 用戶名@“客戶端的地址”;

                 mysql>  drop user mydba2@"%";

 

4.5授權庫 mysql: 存儲授權信息的庫,使用不同的表記錄授權信息

mysql> use mysql;

mysql> show tables;

user表   :存儲已有的授權用戶      mysql> desc mysql.user;   mysql> select user,host from mysql.user;

db表 : 存儲授權用戶對庫的訪問權限

tables_priv 表:  存儲授權用戶對錶的訪問權限

columns_priv表 :  存儲授權用戶對錶裏面字段的訪問權限

管理員root 修改 授權用戶的密碼

set password for 用戶名@“客戶端"=password("abc123");

mysql> set password for yaya@"192.168.4.51"=password("abc123");

授權用戶登陸後修改密碼

 mysql> set password=password("123456");

用戶授權--知識點總結

授權庫mysql

授權命令 grant

權限撤銷 revoke

刪除授權用戶 drop user

管理源root 修改授權用戶密碼

授權用戶登陸後修改登陸密碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章