MySQL运维进阶必备
一、安裝和啟動MySQL
1.1 Linux 版
#yum install mysql-server(Linux版)
1.2 Windows 版
#省略
1.3 啟動mysql
/etc/init.d/mysqld restart systemctl status mysqld
 
三、登錄mysql
#ps -ef | grep mysql3.1 登錄數據庫
1)密碼可以安裝日志中查找
mysql -h{數據庫連接地址} -u{用戶名} -p{密碼} -P{端口} {數據庫名字}3.2 創建賬號和密碼
create user 'xiyu'@'%' identified by 'Admin123!'; select user,host from mysql.user; //查看是否創建成功
 
 注意:
 Host:%代表所有
 User:root 用戶名
 
3.3 查看單個用戶權限
1)查看用戶權限詳情
select * from mysql.user where user='root'\G select * from mysql.user where user='xiyu'\G
 
3.4 給用戶賦權限
1)給予用戶全部的權限
GRANTALL PRIVILEGES ON *.* TO xiyu@'%';或者
GRANTALL PRIVILEGES ON *.* TO xiyu@'%' WITH GRANT OPTION; 注意:如果不加WITH GRANT OPTION,授權后用戶無Grant權限2)單個數據庫授權
只給175.155.59.133這個 IP 賦給 mysql數據庫查詢的權限,用戶:qingchen,密碼:Admin123!
GRANTselect ON mysql.* TO xiyu@'192.168.1.1'; flush privileges; 注意:用ipconfig查詢出來的IP,那是局域網的,這么設置只能局域網內使用3)單個表授權
單個數據庫單個表授權,只給qingchen賬號mysql庫中的user表權限
GRANTselect ON mysql.user TO xiyu@'%'; IDENTIFIED BY 'Admin123!';flush privileges;4)撤銷權限
撤銷某個用戶的權限,格式 : revoke 權限 on 數據庫名 from 用戶名@“客戶端地址”;
revoke all on *.* from xiyu@'%'; 說明: 如果刪除權限的時候提示"ERROR 1227 (42000): Access denied; you need (at least one of) the :SYSTEM_USER privilege(s) for this operation",由于root用戶沒有SYSTEM_USER權限,導致錯誤出現,需要新增權限,請執行下面語句解決 grant system_user on *.* to 'root'; GRANT命令說明: (1)ALL PRIVILEGES 表示所有權限,你也可以使用select、update等權限。 (2)ON 用來指定權限針對哪些庫和表。 (3)*.* 中前面的號用來指定數據庫名,后面的號用來指定表名。 (4)TO 表示將權限賦予某個用戶。 (5)@ 前面表示用戶,@后面接限制的主機,可以是IP、IP段、域名以及%,%表示任何地方。 (6)IDENTIFIED BY 指定用戶的登錄密碼,新版本已經將創建用戶和授權進行了分離,默認授權時不再指定密碼 (7)WITH GRANT OPTION 這個選項表示該用戶可以將自己擁有的權限授權給別人。 注意:經常有人在創建操作用戶的時候不指定WITH GRANT OPTION選項導致后來該用戶不能使用GRANT命令創建用戶或者給其它用戶授權。 備注:可以使用GRANT重復給用戶添加權限,權限疊加,比如你先給用戶添加一個select權限,然后又給用戶添加一個insert權限,那么該用戶就同時擁有了select和insert權限。 https://blog.csdn.net/weixin_42109012/article/details/102684153四、常見命令
4.1 常用命令
1)查看版本和用戶名
select version(); //查看數據庫版本 select user(); //查看當前用戶 select database(); //查看當前所在數據庫 select user,host from mysql.user; //查看所有用戶 select * from mysql.user where user='root'\G //查看單個用戶的情況 show databases; //查看數據庫列表 use database名字; //進入(切換)到某個數據庫2)查看數據庫和表
show tables from database名字; 不進入(切換)查看某個數據庫中表 desc table名字; 查看表結構3)創建、更新和刪除表信息
create table 表名(列名 列類型,列名 列類型,...) //創建表 select * from table名字; //查看表 update 表名 set 字段='新結果' where 條件1 {and} {條件2}; //更新表字段 delete from 表名 where 條件1 {and} {條件2}; //刪除表字段 注意: information_schema:系統自帶數據庫,保存元數據信息,不可刪除 mysql:系統自帶數據庫,保存用戶信息,不可刪除 performance_schema:系統自帶數據庫,保存性能參數庫,不可刪除 test:系統自帶數據庫,空庫4)時區查詢和配置
檢查mysql系統時區
show variables like '%time_zone%';修改時區
set time_zone='+8:00'; //將時區設置為東八區驗證時間
select now();
 時區特別說明:
 格林威治標準時間GMT
 世界協調時間UTC
 夏日節約時間DST
 中央標準時間CST
 CST可以同時表示美國,澳大利亞,中國,古巴四個國家的標準時間
 Central Standard Time (USA) UT-6:00(美國cst時間:零區時減6個小時)
 Central Standard Time (Australia) UT+9:30(澳大利亞cst:加9個半小時)
 China Standard Time UT+8:00(中國cst:加8個小時)
 Cuba Standard Time UT-4:00 (古巴cst:減4個小時)
 如:當UTC時間為0點時,中國CST時間為8點,因為零時區和中國北京時區相差8個時區。
4.2 DQL語言學習(data query languge)
環境搭建:
- 創建數據庫 myemployees(員工部門信息庫)
- 創建數據表 departments(部門表)、employees(員工表)、jobs(崗位表)、locations(位置表)
- 以上表均以插入數據,后續所以實驗均在以上庫和表中完成
 
4.2.1 基礎查詢
1)查詢字段
select 查詢條件 from 表名; select last_name from employees; //查詢姓名一個字段 SELECT last_name,salary FROM employees; //查詢多個字段 SELECT * FROM employees; //查詢全部字段2)常量查詢
SELECT 100; //查詢常量值 SELECT 100%98; //查詢表達式 SELECT 1+2; //兩個均為數值型,作加法運算 SELECT '123'+2; //一方為字符,試圖將字符轉算數值型 SELECT 'tom'+2; //一方為字符,試圖將字符轉算數值型,轉換失敗,作為0運行 SELECT VERSION(); //查詢函數3)設置別名查詢
SELECT last_name AS 姓,first_name AS 名 FROM employees; //用AS起別名,用于有重名的適合區分SELECT last_name 姓,first_name 名 FROM employees; //可以省略AS4)使用DISTINCT去重查詢
SELECT DISTINCT department_id FROM employees ; //查看員工表中所有部門編號5)使用CONCAT字段拼接
SELECT CONCAT (last_name,first_name) AS 姓名 FROM employees;6)使用IFNULL,為NULL時返回0
SELECT IFNULL(commission_pct,0) AS 獎金率, commission_pct FROM employees; //獎金有空時返回04.2.2 條件查詢
1)條件查詢定義
使用 MySQL SELECT語句時,在指定查詢條件,從 FROM 子句的中間結果中選取適當的數據行,達到數據過濾的效果,被稱為條件查詢語句
2)條件查詢語法
SELECT 查詢列表 FROM 表名 WHERE 篩選條件; 先表名,再篩選,最后查詢案例一、查詢工資大于12000的員工信息
SELECT * FROM employees WHERE salary>12000; 工資大于120003)條件查詢分類
條件運算符:
 ><
 =
 !=
 <>
 >=
 <=
 案例一、查詢部門編號不等于90的員工信息
4)邏輯運算符
&& 與 :兩個條件均true 結果true,反之false|| 或:一個條件為true 結果為ture,反之false! 非:連接條件本身為false,結果為true,反之false案例一、查詢工資大于等于10000小于等于20000的員工姓名
SELECT last_name,salary,commission_pct FROM employees WHERE salary>=10000 AND salary <=20000;
 案例二、 查詢部門ID大于等于90 小于等于110 并且工資大于15000的員工信息
5)模糊查詢
like:一般和通配符搭配使用,%代表多個字符,包括0個,_代表一個字符between and: xx和xx之間in:is null:案例一、查詢員工表中包含字符a的員工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';
 案例二、查詢員工表中第三個字符為n,第五個字符為l的員工信息
 案例三、查詢員工表中第二個字符為_ 的員工名(用 \ 對 _轉義)
 案例四、查詢員工編號再100到120之間的員工信息
等同于employee_id>=100 AND employee_id<=120,不能調換順序
 案例五、查詢員工工種編號是IT_PROG、AD_VP
等同于job_id = ‘IT_PROT’ OR job_id = ‘AD_VP’;
 
 案例六、查詢沒有獎金的員工名和獎金率
 相反值 IS NOT NULL
案例六、查詢沒有獎金的員工名和獎金率,使用安全等于 <=>
SELECTlast_name,commission_pct FROMemployees WHEREcommission_pct <=> NULL;結果等價于 IS NULL,是安全等于可讀性比較差,用的不多
 說明:
 IS NULL:僅僅可以判斷NULL值,可讀性較高,建議使用
 <=>:既可以判斷NULL值,又可以判斷普通的數值,可讀性較差
4.2.3 排序查詢
1)排序查詢定義
在MySQL SELECT 語句中,將結果中的數據按照一定的順序進行排序
2)排序查詢語法
SELECT 查詢列表
 FROM 表
 【WHERE 篩選條件】
 ORDER BY 排序列表 ASC|DESC //升序或降序
3)排序查詢案例
案例一、工資升序排名
SELECT * FROM employees ORDER BY salary DESC;降序 SELECT * FROM employees ORDER BY salary ACS; 升序(默認就是升序)案例二、查詢部門編號>=90的員工信息,按入職時間的先后進行排序
SELECT * FROM employees WHERE department_id >=90 ORDER BY hiredate ASC;案例三、按年薪的高低顯示員工的信息和年薪【按表達式排序】
SELECT * ,salary*12*(1+IFNULL(commission_pct,0)) FROM employees ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;或者
SELECT * ,salary*12*(1+IFNULL(commission_pct,0)) 年薪 FROM employees ORDER BY 年薪 DESC;
 
 案例四、按姓名的長度顯示員工姓名和工資【按函數排序】
 案例五、查詢員工信息,先按照工資升序,再按照員工編號降序【多字段排序】
 注意:
 1、ACS代表升序,DESC代表降序,默認升序
 2、order by子句中支持單個字段、多個字段、表達式、函數、別名
 3、order by子句放在查詢語句的最后面,limit子句除外
4.2.4 常見函數
1) 常見函數定義
將一組邏輯語句封裝在方法體中,對外暴漏方法名,隱藏實現細節,提高代碼的重用性
2) 常見函數語法
select 函數名(實參列表)【from 表】;
3) 常見函數分類
- 單行函數,如concat、length、ifnull等
- 分組函數,做統計使用,又稱為統計函數、聚合函數、組函數
4.2.5 單行函數
4.2.5.1、字符函數 - length
1) length
 獲取參數值的字節個數
SELECT LENGTH(‘xiyu’);
 SELECT LENGTH(‘張無忌’); //一個數字三個字節
 SHOW VARIABLES LIKE ‘%char%’;
4.2.5.2、字符函數 - concat
concat 拼接函數 ,用來拼接字符串
SELECT CONCAT(last_name,’_’,‘first_name’) 姓名 FROM employees;
4.2.5.3、字符函數 - upper lower
upper lower 大小寫轉化
SELECT UPPER(‘xiyu’); //轉為大寫
 SELECT LOWER(‘xiYU’);//轉為小寫
案例:姓名大小寫并進行拼接
SELECT CONCAT(UPPER(last_name), LOWER(first_name)) 姓名 FROM employees;
4.2.5.4、字符函數 - substr
substr 截取字符
 索引從1開始,第二位代表長度,只有一個參數的話,從第N個開始到最后
SELECT SUBSTR(‘趙敏愛上了張無忌’,6) ;
 SELECT SUBSTR(‘趙敏愛上了張無忌’,1,2) ;
 SELECT SUBSTR(‘趙敏愛上了張無忌’,1,2) ;
 
4.2.5.5、字符函數 - instr
instr 返回字串第一次出現的索引位置,如果找不到返回0
SELECT INSTR(‘趙敏愛上了張無忌’,‘沒結果’) AS out_put;
4.2.5.6、字符函數 - trim
trim 去前后空字符
SELECT LENGTH(TRIM(‘趙敏愛上了張無忌’) ) AS out_put;
4.2.5.7、字符函數 - lpad
lpad 左填充
SELECT LPAD(‘白眉鷹王’,5,‘abcd’) AS out_put; 大于目前長度填充后邊指定的字符
 
4.2.5.8、字符函數 - rpad
rpad 右填充
 
4.2.5.9、字符函數 - replace
replace 替換
SELECT REPLACE (‘張無忌愛上周芷若’,‘周芷若’,‘趙敏’);
 
4.2.5.10、數學函數 - round
round四舍五入
select round(1.1);
 select round(9.5);
 select round(-1.6);
 
4.2.5.11、數學函數 - ceil
ceil 向上取整,返回參數的最小整數
 
4.2.5.12、數學函數 - floor
floor向下取整,返回參數的最大整數
 
4.2.5.13、數學函數 - truncate
truncate 截斷
select truncate(1.234,1);
 
4.2.5.14、數學函數 - mod
mod 取余數
 select mod(6,3);
 select mod(5,3);
 select mod(10,-3);
 
4.2.5.15、日期函數 - now
select NOW(); //返回當前日期和時間
 select curdata(); //返回當前日期
 select curtime(); //返回當前時間
 
 select MONTH(NOW()) 月; //顯示月份
 select MONTHNAME(NOW()) 月; //英文顯示月份
 select YEAR(hiredate) 年 from employees; //顯示員工入職年份
4.2.5.16、日期函數 - 格式轉換
select str_to_date(‘10-11-2021’,’%m-%d-%Y’);
 select date_format(‘2021-11-22’,’%Y年%m月%d日’);
 
| %Y | 代表四位年份 | 
| %y | 代表2位的年份 | 
| %m | 代表月份(01,02,11,12) | 
| %c | 代表月份(1,2…11,12) | 
| %d | 代表日(01,02) | 
| %H | 代表小時(24小時) | 
| %h | 代表小時(12小時) | 
| %i | 代表分鐘(00,01) | 
| %s | 代表秒(00,01.59) | 
4.2.5.17、流程控制函數 - if
select if(9>8 “對”,“錯”);
 select if(9<8 “對”,“錯”);
mysql >select first_name,last_name ,commission_pct,if(commission_pct is null, “哎,沒獎金”,“哈哈,有獎金”) as 備注 from employees ;
 
4.2.5.18、流程控制函數 - case
case 判斷的字段或者表達式
 when 常量1 then 要顯示的值1或者語句1;
 when 常量2 then 要顯示的值2或者語句2;
 …
 else 要顯示的值n或者語句n;
 end
 */
案例:
 部門號=30,顯示的工資為1.1倍
 部門號=40,顯示的工資為1.2倍
 部門號=50,顯示的工資為1.3倍
 其他部門,顯示原工資
 */
方法一:
mysql>select salary 原始工資, department_id 部門,
 CASE department_id
 WHEN 30 THEN salary1.1
 WHEN 40 THEN salary1.2
 WHEN 50 THEN salary*1.3
 ELSE salary
 END 新工資
 from employees order by department_id;
 方法二:
mysql>select salary 原始工資, department_id 部門,
 CASE
 WHEN department_id=30 THEN salary1.1
 WHEN department_id=40 THEN salary1.2
 WHEN department_id=50 THEN salary*1.3
 ELSE salary
 END 新工資
 from employees order by department_id;
4.2.6、分組函數
4.2.6.1 分組函數 - 作用
用于統計,又稱聚合函數、統計函數或者組函數
4.2.6.2 分組函數 - 分類(SUM AVG MAX MIN COUNT)
1)sum 求和(支持數值型)
 2)avg 平均(支持數值型)
 3)max 最大值(支持數值型)
 4)min 最小值(支持數值型)
 5)count 計算個數(支持任何類型)
select SUM(salary) FROM employees;
 select AVG(salary) FROM employees
 select MAX(salary) FROM employees
 select MIN(salary) FROM employees
 select COUNT(salary) FROM employees
mysql> select SUM(salary) 和,AVG(salary) 平均,MAX(salary) 最大值,MIN(salary) 最小值,COUNT(salary) 個數 FROM employees;
4.2.6.3 分組函數 - 支持的類型
1)sum 求和(支持數值型)
 2)avg 平均(支持數值型)
 3)max 最大值(支持任何類型)
 4)min 最小值(支持任何類型)
 5)count 計算個數(支持任何類型)
注意:以上null值都忽略,只計算非空數值
4.2.6.4 分組函數 - distinct搭配
distinct :去重功能
mysql>select sum(distinct salary) ,sum(salary) from employees;
mysql>select count(distinct salary) ,count(salary) from employees;
 去重之后只有57個,未去重有107個
4.2.6.5 分組函數 - count函數
mysql>select count(department_id) from employees;
 mysql>select count(*) from employees;
 注意:
 
 count統計某一個字段(若是非空,忽略)一般用count()或者count(1)來統計行數
 count() 代表所有行數,準確統計
 count(1)代表在表的前面加一列名為“1”的字段,然后統計“1”的個數,當然,“1”可以換成任何數值或者常量,都可以統計
- 5.5之前默認引擎 MYISAM COUNT(*) 效率高
- 5.5之后默認引擎INNODB COUNT(*)與1的效率產不多
4.2.6.6 分組函數 - 注意事項
1)與分組函數一同查詢的字段有限制
 比如統計平均值與部門的對應關系
2)與分組函數一同查詢的字段要求是group by后的字段
4.2.7、分組查詢
4.2.8、連接查詢
4.2.9、子查詢
4.2.10、分頁查詢
4.2.11、union聯合查詢
4.3 DML
4.4 DDL
4.5 TCL
4.6 視圖
4.7 存儲過程和函數
4.4 流程控制結構
部分內容摘自《blibli博主-黎曼的猜想》
總結
以上是生活随笔為你收集整理的MySQL运维进阶必备的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 中国InGaAs APD模块市场深度研究
- 下一篇: hexo博客添加本地搜索功能
