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