MySQL用戶管理及SQL入門
阿新 • • 發佈:2018-04-03
mysql第1章 Mysql用戶管理:
1.1 用戶的定義: 用戶名+主機域
mysql> select user,host,password from mysql.user;
+------+-----------+----------+
| user | host | password |
+------+-----------+----------+
| root | localhost | |
| root | db01 | |
| root | 127.0.0.1 | |
1.2 用戶的作用:
1. 用來登錄數據庫
2. 管理數據的對象(表和庫)
說明:類比:Linux中創建用戶,更改某個目錄或者文件的權限來對數據進行管理
1.2.1 創建一個用戶
權限設定: grant 權限 on 權限範圍 to 用戶 identified by ‘密碼’;
1.2.2 權限管理:
對數據庫的讀寫操作等,權限可用來管理某個用戶可以對數據庫做什麽
(insert update、select、delete、drop、create等)
1.2.3 角色:
對數據庫讀,寫等操作(insert;update;select)
1.2.4 權限範圍:
1. 全庫級別: *.*
2. 單庫級別: test.*
3. 單表級別: test.table_name
1.2.5 用戶:
'clsn'@'localhost' 本地
'clsn'@'192.168.66.149'
'clsn'@'192.168.66.%'
'clsn'@'192.168.66.14%'
1.3 練習:按照要求創建一個用戶
用戶只能通過10.0.0.0/24網段訪問,用戶名為jiang,密碼為123
jiang用戶只能對jiang數據庫下的對象進行增insert;create;改update;查select
1.3.1 創建用戶並授權
grant insert,select,create,update on jiang.* to ‘[email protected].%’ identified by ‘123’;
1.3.2 查看用戶的權限:
mysql> show grants for root@'10.0.0.%'\G
*************************** 1. row ***************************
Grants for [email protected].%: GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.%' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257'
1 row in set (0.01 sec)
1.3.3 標準創建用戶的方法:
create user 'web'@'172.16.1.%' identified by 'web123'; 這樣創建的用戶只有連接的權限
1.3.4 刪除用戶:
mysql> drop user root@'10.0.0.%';
1.3.5 回收權限
revoke insert on *.* from root@’localhos’;
1.4 Mysql忘記密碼的修改辦法:
1. 停掉數據庫
/etc/init.d/mysqld stop
2. 停掉連接層的授權功能和遠程登錄動能,並啟動
cd /application/mysql/bin/
mysqld_safe --skip-grant-table --user=mysql --skip-networking &
說明:這種啟動模式下,無密碼登錄,網絡用戶無法登錄,只能本地登錄,和授權有關的命令都無法執行
3. 直接修改密碼
mysql> update mysql.user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
MySQL5.7版本修改密碼的修改字段為: authentication_string
4. 退出,重啟服務,正常restart就可以,我這裏失敗了,所以先停止在啟動
/etc/init.d/mysqld stop
/etc/init.d/mysqld start
5. 登錄數據庫進行驗證
mysql -uroot -p123
第2章 Mysql客戶端工具及SQL入門
2.1 MySQL客戶端命令有哪些?
1. mysql ---用來連接數據庫
---將用戶的SQL語句發送到服務端
2. mysqladmin---命令行管理工具
3. mysqldump---備份數據庫和表的內容
2.2 mysql命令功能詳解:
1. 用戶連接數據庫
2. 用於管理數據庫
2.2.1 mysql命令接口自帶功能:
命令 命令說明
\h 或 help 或 ? 獲取幫助
\G 格式化輸出(行轉列)
\T 或 tee 記錄操作日誌 tee /tmp/mysql.log
\c 或 CTRL+c 退出mysql
\s 或 status 查看數據庫狀態信息
\. 或 source mysql> source /tmp/world.sql
\! 使用shell中的命令 mysql> \! cat /etc/redhat-releaseCentOS release 6.9 (Final)
\u 或use use worldshow databases 看當前所有數據庫的名字show tables 查看當前use到的數據庫所有的表show tables from world 查看目標數據庫下的表
快捷鍵 上下翻頁、TAB鍵、ctrl +C 、ctrl +L
2.2.2 mysql命令中help幫助說明:
contents查看完整的sql類別列表幫助
mysql> help contents
查看特定sql類別或語句的幫助
mysql> help Account Management;
查看grant幫助
mysql> help grant
與狀態相關的sql語句幫助
mysql> help status
mysqladmin命令說明:
功能選項 說明
mysqladmin -u用戶 -p密碼 ping “強制回應 (Ping)”服務器。
mysqladmin -u用戶 -p密碼 shutdown 關閉服務器。
mysqladmin -u用戶 -p密碼 create databasename 創建數據庫。
mysqladmin -u用戶 -p密碼drop databasename 刪除數據庫
mysqladmin -u用戶 -p密碼 version 顯示服務器和版本信息
mysqladmin -u用戶 -p密碼 status 顯示或重置服務器狀態變量
mysqladmin -u用戶 -p密碼 password 設置口令
mysqladmin -u用戶 -p密碼 flush-privileges 重新刷新授權表。
mysqladmin -u用戶 -p密碼 flush-logs 刷新日誌文件和高速緩存。
2.3 SQL語句入門:
2.3.1 DDL: 數據定義語言
定義範圍:對庫名和庫的特性 對表名和表中的列
查看數據庫
查看所有數據庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| world |
| zabbix |
+--------------------+
查看當前所在數據庫
mysql> select database();
+------------+
| database() |
+------------+
| zabbix |
+------------+
1 row in set (0.00 sec)
對數據庫的操作
創建一個庫
mysql> create database zabbix character set utf8;
Query OK, 1 row affected (0.01 sec)
查看庫中的表
mysql> show tables;
+------------------+
| Tables_in_zabbix |
+------------------+
| stu |
+------------------+
1 row in set (0.00 sec)
查看庫的創建語句
mysql> show create database zabbix;
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| zabbix | CREATE DATABASE `zabbix` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)
修改庫的屬性:只能修改字符集和校對規則
mysql> alter database zabbix charset utf8mb4;
刪除一個庫:
mysql> drop database zabbix;
切庫
mysql> use zabbix;
對表的操作
創建一個表
mysql> create table stu (id int,name varchar(20),age int ,gender int);
查看表的創建語句
mysql> show create table stu;
在表最後一列添加:
mysql> alter table stu add addr varchar(20);
在表的頭部添加:
mysql> alter table stu add stu_id int first;
在某一列後面添加:
mysql> alter table stu add qq int after name;
在age後添加tel_num,在最後一行添加email
mysql> alter table stu add tel_num int after age,add email varchar(20);
刪除某一列:
mysql> alter table stu drop email;
修改列名字:
mysql> alter table stu change qq QQ int;
修改列的數據類型:
mysql> alter table stu modify gender varchar(20);
創建一個表結構相同的空表
mysql> create table stu_0 like stu;
mysql> show tables;
+------------------+
| Tables_in_zabbix |
+------------------+
| stu |
| stu_0 |
+------------------+
2 rows in set (0.00 sec)
創建一個表結構相同的備份表
mysql> create table stu_0 as select * from stu;
2.3.2 DCL 數據庫控制語言
用戶授權
GRANT ALL ON *.* TO 'jiang'@'localhost';
SHOW GRANTS FOR 'jiang'@'localhost'\G
創建用戶的同時進行授權
grant insert,select,create,update on jiang.* to jiang@'10.0.0.%' identified by '123';
回收權限
REVOKE INSERT ON *.* FROM jiang@localhost;
2.3.3 DML 數據行操作語言(增刪改)
insert語句
指定列插入
mysql> insert into stu (stu_id,QQ) values(1,777);
所有列插入
mysql> insert into stu values(2,777,'j',56,'hao',2,'r','q',1);
insert復制表結構及內容---表已經存在的情況下,在可以復制
mysql> create table stu_1 like stu;
mysql> insert into stu_1 select * from stu;
修改和刪除操作
刪除數據:
mysql> delete from stu where stu_id=1 邏輯刪除
mysql> truncate table stu_3; 物理刪除
修改數據,要加上where條件
mysql> update stu_3 set QQ=5656 where age='hao';
delete 刪除之後可以用二進制日誌反解insert命令把數據找回來
truncate 物理刪除,數據找不回來
一般刪除大表的時候,先truncate然後在drop整個表,效率會比較高
使用update替代delete,偽刪除
mysql> alter table stu add state int default 1;
Query OK, 0 rows affected (0.54 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from stu;
+--------+------+-------+-----------+------+---------+--------+------+-------+
| stu_id | id | name | QQ | age | tel_num | gender | addr | state |
+--------+------+-------+-----------+------+---------+--------+------+-------+
| 1 | 123 | jiang | 222 | ni | 15555 | boy | hao | 1 |
| 1 | 123 | jiang | 222 | ni | 15555 | boy | hao | 1 |
| 1 | 123 | jiang | 222 | ni | 15555 | boy | hao | 1 |
| 7 | NULL | da ya | 850144102 | NULL | NULL | NULL | NULL | 1 |
+--------+------+-------+-----------+------+---------+--------+------+-------+
4 rows in set (0.00 sec)
修改state值,等於0即為刪除,
mysql> update stu set state=0 where name='jiang';
mysql> select * from stu where state=1;
+--------+------+-------+-----------+------+---------+--------+------+-------+
| stu_id | id | name | QQ | age | tel_num | gender | addr | state |
+--------+------+-------+-----------+------+---------+--------+------+-------+
| 7 | NULL | da ya | 850144102 | NULL | NULL | NULL | NULL | 1 |
+--------+------+-------+-----------+------+---------+--------+------+-------+
1 row in set (0.01 sec)
防止誤刪除:
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
mysql命令加上-U後 在執行update和delete語句時,不加where條件不會執行
2.3.4 DQL:數據行查詢語言
select查詢語句
查看stu表中所有信息
mysql> select * from stu;
查看某一列的信息
mysql> select name from stu; 多個列用逗號分隔
查看id號碼為777的qq號碼
mysql> select QQ from stu where id=777;
where子句使用: 將數據按照指定條件,進行過濾處理
等值過濾:
mysql> select stu_id from stu where QQ=777;
比較過濾:
mysql> select stu_id from stu where QQ<777;
SQL過濾練習:
排序:按照人口從少到多的順序排列顯示:
SELECT NAME,Population FROM city
WHERE CountryCode='chn' ORDER BY Population;
按照從多到少進行排序顯示:
SELECT NAME,Population FROM city
WHERE CountryCode='chn' ORDER BY Population DESC;
顯示人口排名最多的前10名:
SELECT NAME,Population FROM city
WHERE CountryCode='chn'
ORDER BY Population DESC LIMIT 10;
顯示人口排名 第50行到第60行
SELECT NAME,Population FROM city
WHERE CountryCode='chn'
ORDER BY Population DESC LIMIT 50,10;
顯示世界上人口小於100的城市:
SELECT NAME,Population
FROM city WHERE Population<1000;
顯示PCN是那個國家:
SELECT NAME FROM city WHERE country='PCN';
顯示世界上人口小於100的城市所在國家的國家名字
SELECT country.name FROM country,city
WHERE city.Population<100 AND country.Code=city.countrycode;
以上命令可以簡寫成:
SELECT co.name FROM city AS ci ,country AS co
WHERE
ci.population<100
AND co.code=ci.CountryCode;
MySQL用戶管理及SQL入門