1. 程式人生 > >MySQL用戶管理及SQL入門

MySQL用戶管理及SQL入門

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入門