日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL运维进阶必备

發布時間:2023/12/15 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 mysql

3.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個時區。

規范: 1)sql語法不區分大小寫,但建議關鍵字大寫,表名、列名小寫 2)每條命令最好用分號結尾 3)根據需要,進行縮進或換行 4)單行注釋 #或者 --,多行注釋 /* 注釋內容 */

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; //可以省略AS

4)使用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; //獎金有空時返回0

4.2.2 條件查詢

1)條件查詢定義

使用 MySQL SELECT語句時,在指定查詢條件,從 FROM 子句的中間結果中選取適當的數據行,達到數據過濾的效果,被稱為條件查詢語句

2)條件查詢語法

SELECT 查詢列表 FROM 表名 WHERE 篩選條件; 先表名,再篩選,最后查詢

案例一、查詢工資大于12000的員工信息

SELECT * FROM employees WHERE salary>12000; 工資大于12000

3)條件查詢分類

條件運算符:
><
=
!=
<>
>=
<=
案例一、查詢部門編號不等于90的員工信息

SELECT last_name,department_id FROM employees WHERE department_id<>90; 部門編號不等于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的員工信息

SELECT * FROM employees WHERE department_id>=90 AND department_id<=110 OR salary>15000;

5)模糊查詢

like:一般和通配符搭配使用,%代表多個字符,包括0個,_代表一個字符between and: xx和xx之間in:is null:

案例一、查詢員工表中包含字符a的員工信息

SELECT * FROM employees WHERE last_name LIKE '%a%';


案例二、查詢員工表中第三個字符為n,第五個字符為l的員工信息

SELECT* FROMemployees WHERElast_name LIKE '___n_l%';


案例三、查詢員工表中第二個字符為_ 的員工名(用 \ 對 _轉義)

SELECTlast_name FROMemployees WHERElast_name LIKE '_\_%';


案例四、查詢員工編號再100到120之間的員工信息

SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;

等同于employee_id>=100 AND employee_id<=120,不能調換順序


案例五、查詢員工工種編號是IT_PROG、AD_VP

SELECTlast_name,job_id FROMemployees WHEREjob_id IN ( 'IT_PROT' OR job_id = 'AD_VP');

等同于job_id = ‘IT_PROT’ OR job_id = ‘AD_VP’;

案例六、查詢沒有獎金的員工名和獎金率

SELECTlast_name,commission_pct FROMemployees WHEREcommission_pct IS NULL;


相反值 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;



案例四、按姓名的長度顯示員工姓名和工資【按函數排序】

SELECT LENGTH(last_name) 字節長度, last_name,salary FROM employees ORDER BY 字節長度 DESC;


案例五、查詢員工信息,先按照工資升序,再按照員工編號降序【多字段排序】

SELECT * FROM employees ORDER BY salary ASC,employee_id 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运维进阶必备的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。