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.在客戶端訪問軟件
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 修改授權用戶密碼
授權用戶登陸後修改登陸密碼