MYSQL---DBA---叁(SQL基礎及元數據獲取)

一. SQL簡單介紹

(1)類似linux中的shell,統一標準,能夠應用于各種數據庫
(2)SQL標準:SQL-92或SQL-99
(3)SQL驗證:SQL_MODE約束

二. SQL常用分類

(1)DDL:數據定義語言
(2)DCL: 數據控制語言
(3)DML: 數據操作語言
(4)DQL: 數據查詢語言

三. 數據類型(表的核心屬性,字符集)

作用:保證數據的準確性和標準性

3.1 種類

3.1.1 數值類型

image.png

image.png

3.1.2 字符類型

image.png

image.png
char(10)與varchar(10)的區別(括號內的數字是自己規定限制的字符長度):
char(10)類型:是定長類型,不管存儲什么長度的數據,都立即分配你所指定的固定字符串長度的存儲空間,若數據小于你所指定的,無法沾滿則用空來填充
varchar(10)類型:可變長度類型,按需分配存儲空間,在你指定的長度的字符串存儲空間中只要不超過你所指定的長度,需要多少就分配多少(但每次都要計算所需要字符串長度的存儲空間)在varchar類型中,除了存儲字符串本身外,還會存儲字符長度,對于<=255個字符的會額外占用1個字節存儲長度;>255個字符的會額外占用2個字節長度存儲字符長度

注意:對于char(10)與varchar(10)的數據類型,括號中表示的是最多的字符個數
基礎字符:a(字母)----1字節 1(數字)----1字節 {(符號)----1字節
中文:張---gbk字符集---2字節 張---utf8---3字節 張---utf8mb4---4字節

3.1.3 時間類型

image.png

image.png

3.1.4 二進制類型

一般不使用,neo4j:圖片,視頻的存儲應用

image.png

3.1.5 枚舉類型

enum(‘bj’,‘sh’,‘tj’,...)
對應著編號1,2,3,...

四. 表與列的屬性

4.1 列屬性

約束作用(一般建表時添加)
(1)not null:非空約束
- 列值不能為空,也是表設計的規范,盡可能將所有的列設置為非空。若無法保證,可以設置默認值,可以設置默認值為0。
(2)unique key:唯一鍵
- 列值不能重復,手機號,身份證號,銀行卡號種類的列設定為UK
(3)primary key:主鍵約束
- 設置為主鍵的列,此列的值必須非空且唯一,主鍵在一個表中只能有一個,但是可以有多個列一起構成,一般會在表中設置自增長的id列。
(4)unsigned:無符號
- 針對數字列,非負數。一般是在int或tinyint后添加的附加屬性

其他屬性
(1)key:屬性
- 可以在某列上建立索引,來優化查詢,一般是根據需要后添加
(2)default:默認值
- 列中,沒有錄入值時,會自動使用default的值填充
(3)auto_increment:自增長
- 針對數字列,順序的自動填充數據(默認是從1開始,將來可以設定起始點和偏移量)
(4)comment:注釋信息

4.2 表屬性

存儲引擎:
InnoDB(默認的)
字符集和排序規則:
utf8
utf8mb4

五. 字符集及校對規則

5.1 字符集(charset)

  • show charset;(mysql中的查看方式)

gbk:中文字符占2個字節
utf8(mb3):中文字符占3個字節
utf8mb4:中文字符占4個字節

  • create database xs charset utf8mb4;
  • create table t1 ()charset utf8mb4;

5.2 校對/排序規則(collation)

5.2.1 舉例

- 舉例數據:Asd, ads, ass, bca, cda, Cdd
- 不區分大小寫:ads, Asd, ass, bca, cda, Cdd
- 區分大小寫:Asd, Cdd, ads, ass, bca, cda 

5.2.2 utf8mb4字符集

  • show collaction(在mysql中查看方式)

(1)utf8mb4_general_ci: 通過校對默認值,不區分大小寫
(2)utf8mb4_bin:區分大小寫

六. DDL數據定義語言

6.1 庫的定義

6.1.1 標準建庫語句

  • mysql> create database db charset utf8mb4;(創建)
  • mysql> show create database xuexiao;(查看)

6.1.2 創建數據庫方式

  • create database school;
  • create schema sch;
  • show charset;
  • show collation;
  • CREATE DATABASE test CHARSET utf8;
  • create database xyz charset utf8mb4 collate utf8mb4_bin;

6.1.3 建庫規范

1.庫名不能有大寫字母
2.建庫要加字符集
3.庫名不能有數字開頭

  1. 庫名要和業務相關

6.1.4 刪除庫

  • drop database oldboy;(生產中禁用)

6.1.5 修改庫(一般就是修改字符集)

  • SHOW CREATE DATABASE school;
  • ALTER DATABASE school CHARSET utf8;

6.1.6 查詢庫

  • show databases;
  • show create database oldboy;

6.2 表的定義

6.2.1 創建表

模板

create table stu(
列1  屬性(數據類型、約束、其他屬性) ,
列2  屬性,
列3  屬性
)

實例

USE school;
CREATE TABLE stu(
id      INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '學號',
sname   VARCHAR(255) NOT NULL COMMENT '姓名',
sage    TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年齡',
sgender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性別' ,
sfz     CHAR(18) NOT NULL UNIQUE  COMMENT '身份證',
intime  TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入學時間'
) ENGINE=INNODB CHARSET=utf8 COMMENT '學生表';

建表規范

  1. 表名小寫
  2. 不能是數字開頭
  3. 注意字符集和存儲引擎
  4. 表名和業務有關
  5. 選擇合適的數據類型
  6. 每個列都要有注釋
  7. 每個列設置為非空,無法保證非空,用0來填充。
  8. 必須有主鍵,一般是一個自增長的無關列。

6.2.2 刪除表

  • drop table xuesheng;(直接把整個表刪除包括表定義(表中的列)和數據)
  • truncate table xuesheng;(保留表結構(表定義),清空表的區和數據)

6.2.3 修改表(添加刪除列)

添加列

(1)在xs表中添加手機號列“shouji”
- ALTER TABLE xs ADD shouji CHAR(11)  NOT NULL UNIQUE KEY COMMENT '手機號';
(2)在xs表中,sex列后添加列“微信”
- ALTER TABLE xs ADD 微信 VARCHAR(64) NOT NULL UNIQUE KEY COMMENT '微信號'  AFTER sex;
(3)在xs表中的第一列位置添加列“qq號”
- ALTER TABLE xs ADD qq VARCHAR(64)  NOT NULL UNIQUE KEY COMMENT  'qq號'  first;

刪除列

ALTER TABLE stu DROP num;
ALTER TABLE stu DROP qq;
ALTER TABLE stu DROP wechat;

修改列屬性

(1)只改屬性不改列名
- ALTER TABLE xs MODIFY ssname  VARCHAR(64)  NOT NULL  COMMENT  '姓名';
(2)列名與屬性都改
- ALTER TABLE xs CHANGE sname  ssname  VARCHAR(32)  NOT NULL COMMENT '姓名';

6.2.4 查詢列(屬性)

use school
show tables;
desc stu;
show create table stu;
CREATE TABLE ceshi LIKE stu;

七. 數據控制語言

7.1 賦予權限

  • grant all on wordpress.* to wordpress@'10.0.0.%' identified by '123';
    (grant+權限+on+對象范圍+to +用戶@網段 +identified by '密碼';)

7.2 收回權限

  • revoke delete on wordpress.* from dev@'10.0.0.%';
    (revoke +權限+on+對象范圍+from+用戶@網段)

7.3 權限查詢

  • show grants for dev@'10.0.0.%';
    (show+grants+for+用戶@網段)

八. DML數據操作語言

DML語句用作表中數據行的增刪改查

8.1 insert(錄入數據)

--- 最標準的insert語句
INSERT INTO stu(id,sname,sage,sg,sfz,intime) 
VALUES
(1,'zs',18,'m','123456',NOW());
SELECT * FROM stu;
--- 省事的寫法
INSERT INTO stu 
VALUES
(2,'ls',18,'m','1234567',NOW());
--- 針對性的錄入數據
INSERT INTO stu(sname,sfz)
VALUES ('w5','34445788');
--- 同時錄入多行數據
INSERT INTO stu(sname,sfz)
VALUES 
('w55','3444578d8'),
('m6','1212313'),
('aa','123213123123');
SELECT * FROM stu;

8.2 update(修改數據)

DESC stu;
SELECT * FROM stu;
UPDATE stu SET sname='zhao4' WHERE id=2;
(修改stu表中的sname數據行為zhao4)
注意:update語句必須要加where,不然整個數據列都會被改動。

8.3 delete(刪除數據)

  • DELETE FROM stu WHERE id=3;
    (也必須由where指定具體修改什么,危險操作)

8.4 全表刪除(delete與truncate的區別)

全表刪除命令

  • DELETE FROM stu
  • truncate table stu;
    區別
  • delete: DML操作, 清空整表的所有數據,是邏輯性質刪除,逐行進行刪除,速度慢.并且表所占用的空間不會立即釋放。
  • truncate: DDL操作,清空整表的所有數據,按區刪除,屬于物理刪除,對與表段中的數據頁進行清空,速度快.并且表所占用空間會被立即釋放。

8.5 使用update代替delete實現偽刪除

(1)在xs表中添加一個狀態列state

  • ALTER TABLE xs ADD state TINYINT NOT NULL DEFAULT 1 ;
  • SELECT * FROM stu;(查看)
    (2)用UPDATE 替代 DELETE
  • 原語句:delete from xs where id=6;
  • 改寫后:update xs set state=0 where id=6;
    (3)業務語句查詢調整
  • 原語句:select * from xs;
  • 改寫后:SELECT * FROM xs WHERE state=1;

九. DQL數據查詢語言

9.1 select 子句應用(單表)

9.1.1 select 子句執行邏輯

  • select 列1 from 表 where 條件 group by 條件 having 條件 order by 條件 limit 條件(順序不可亂)

9.1.2 select單獨使用(mysql獨家)

-- select @@xxx 查看系統參數
1. SELECT @@port;   #顯示連接端口   
2. SELECT @@basedir;   #顯示軟件安裝目錄
3. SELECT @@datadir;   #顯示數據存放目錄
4. SELECT @@socket;   #顯示socket文件
5. SELECT @@server_id;   #顯示服務id
6. SELECT @@innodb_flush_log_at_trx_commit;   #顯示innodb_log_buffer向innodb_log_file的刷寫策略
7. SHOW VARIABLES LIKE '%trx%'   #模糊查詢參數方式

9.1.3 select +函數()

1. select  now();   #顯示當前時間
2. select  database();   #顯示當前處于哪個庫
3. select  user();   #顯示哪個用戶登錄數據庫
4. select 16*16;   #用于計算(顯示計算結果)
5. select concat("hello world")   #顯示出括號內容
6. select concat(user,"@",host)  from mysql.user;   #顯示出mysql.user中調出的用戶與主機名(用@連接起來,語句拼接)
7. select group_concat(user,"@",host) from mysql.user;   #與上訴顯示結果一樣,只不過是一行顯示(列轉行) 

9.2 from子句應用(單表)

use world;   #進入world庫中
show tables;   #顯示庫中的所有表
desc city;   #以表結構形式顯示city表的所有數據
select *  from city;   #查看city中所有數據(相當于cat文件)
select name,countrycode   from city;   #從city表中調取國家代碼與名稱信息(相當于awk文件)

9.3 where子句應用

9.3.1 等值查詢

  • select * from city where countrycode='CHN';(查詢中國城市信息)

9.3.2 不等值查詢

  • select * from city where population<100;(查詢人口是小于100人的城市)
  • select * from city where id<10;(查詢id小于10的城市信息)
  • select * from city where countrycode !='CHN';(查詢不是中國城市的信息)

9.3.3 模糊查詢

  • select * from city where countrycode like 'CH%';(查詢國家代號是CH打頭的城市信息,盡量避免like前帶%的模糊查詢)

9.3.4 邏輯連接符(and)

  • select * from city where countrycode='CHN' and population>5000000;(查詢中國人口超過500萬的城市)
  • select * from city where population>5000000 and population<6000000;
    (查詢人口數在500萬到600萬之間的城市)

9.3.5 邏輯連接符(or)

  • select * from city where district='shandong' or district='hebei';(查詢山東省或河北省的信息)

9.3.6 where配合between and使用

  • select * from city where population between 5000000 and 6000000;(查詢人口數在500萬到600萬之間的城市)

9.3.7 where配合in的使用

  • select * from city where district in('shandong','hebei');(查詢山東省或河北省的信息)

9.4 group by分組幾句+聚合函數的應用

image.png

9.4.1 什么是分組

以查詢的某個項進行合理分組,以便更直觀的顯示

9.4.2 常用的聚合函數

COUNT()---用于計數
MAX()---最大值
MIN()---最小值
AVG()---平均數
SUM()---求和
GROUP_CONCAT()---列轉行

9.4.3 應用舉例

  • select countrycode,COUNT(id) from city GROUP BY countrycode;(統計每個國家的城市個數)
  • select countrycode,SUM(population) from city GROUP BY countrycode;(統計每個國家的總人口數)
  • select district,COUNT(NAME),SUM(population) from city where countrycode='CHN' GROUP BY district;(統計中國各個城市的個數及人口數)
  • select countrycode,GROUP_CONCAT(NAME) from city GROUP BY countrycode;(統計各個國家的城市名列表)

9.5 having子句應用(一般在group by篩選過后再篩選一遍)打印

  • select district,COUNT(NAME),SUM(population) from city where countrycode='CHN' GROUP BY district HAVING SUM(population)>8000000;(統計中國每個省的城市個數,省總人口數,只顯示人口數大于800萬的省)

9.6 order by子句應用(默認增序輸出)

  • select district,COUNT(NAME),SUM(population) from city where countrycode='CHN' GROUP BY district HAVING SUM(population)>8000000 ORDER BY SUM(population) DESC;(統計中國各個省的城市個數,省總人口數,只顯示人口數大于800萬的省,降序輸出)
  • select * from city where countrycode='CHN' order by population DESC;(查詢中國所有城市信息,并以人口降序輸出)

9.7 limit子句應用(顯示前幾行或跳過前幾行再顯示后幾行,應用于order by之后)

9.7.1 格式顯示

LIMIT 10 OFFSET 0=LIMIT 10(顯示前10行)
LIMIT 5 OFFSET 5=LIMIT 5,5(跳過前5行,再顯示后5行)

9.7.2 例子

  • select * from city where countrycode='CHN' order by population DESC limit 10 offset 0;(查詢中國所有城市信息,并以人口降序輸出,只顯示前10行)

9.8 distinct子句應用(去重復)

  • select DISTINCT countrycode from city;(查詢所有國家的代號信息,有的代號一樣,這里就去重復了)

9.9 union與union all子句應用(聯合查詢)

9.9.1 舉例

---查看山東省或河北省信息
(原語句):
- select *  from city where district='shandong'  or  district='hebei';
(union all優化):
- select * from city where  district='shandong' union all select *  from city  where district='hebei';
---查看中國或美國的所有信息
(原語句):
- select * from city  where countrycode  in('CHN','USA');
(union all優化):
- select * from city where countrycode='CHN'  union all  select *  from city  where countrycode='USA';

9.9.2 說明

一般情況下,我們會將in或or的語句改寫為union all語句來提高性能(并不是所有語句越復雜性能越差,這就是個實例)

9.9.3 union與union all的區別

union帶有去重復的功能(隱含了排序功能,更耗費資源);而union all則沒有去重復功能

十. 多表連接查詢

10.1 多表連接作用

業務需要的數據來自多張表,則需要各張表的關聯項來進行選取所需

10.2 多表連接類型

  1. 內連接(重要)
  2. 外連接(一般)
  3. 全連接(普通)
  4. 笛卡爾(普通)

10.3 多表連接基本語法(內連接類型)

  1. 傳統連接(普通)
  2. 自連接(普通)
  3. join uing(普通)
  4. join on (重要)

10.4 join on語法過程(內連接)

兩表

select ---(顯示內容,看題意)
from 第一表
join  第二表
on  第一表的內容=第二表的內容(兩表的關聯列)
where 條件
group by 條件
having  條件
order by  條件
limit 條件

多表

select  (顯示內容看要求)
from  第一表
join  第二表
on  第一表內容=第二表內容(第一第二表的關聯列)
join  第三表
on  第二表的內容=第三表的內容(第二第三表的關聯列)
join ----
on ----
where  條件
group  by  條件
having  條件
order  by  條件
limit 條件

10.5 多表連接查詢套路

  1. 根據要求找到關聯列
  2. 找到表與表的關聯列
  3. 列名調用時,需要添加關聯列,例如:a.id b.name

10.6 給與如下關聯,進行后續多表連接案例

1. course(課程表)與sc(成績表)關聯列為cno(課程編號)
2. course(課程表)與teacher(教師表)關聯列為tno(教師編號)
3. sc(成績表)與student(學生表)關聯列為sno(學生編號)

10.7 多表連接查詢案例

(1)查詢張三學習了幾門課程
---分析:
1. 由題意看出需要的是學生表與課程表
2. 但學生表與課程表并沒有關聯列,而成績表與課程表有關聯列,所以需要成績表進行過渡(三標連接)
3. 再分析題意,需要的是學生學習了幾門課程,而課程同樣在成績表中也能顯示,同時成績表與學生表是有關聯列的,所以直接應用學生表與成績表兩表關聯即可
---答題:
select student.sname,COUNT(sc.cno)   from student  join  sc on student.sno=sc.sno  where  student.sname='zhang3';
(2)統計oldguo老師教的學生個數
select teacher.tname,COUNT(student.sno)
from teacher
join course
on teacher.tno=course.tno
join sc
on course.cno=sc.cno
join student
on sc.sno=student.sno
where teacher.tname='oldguo';
(3)統計每位老師所教的課程的平均分,并按平均分排序
select teacher.tname,AVG(sc.score)
from teacher
join course
on teacher.tno=course.tno
join sc
on course.cno=sc.cno
group by teacher.tno,teacher.tname
order by AVG(sc.score);
(4)統計zhang3學習的課程名稱
select  student.sname,GROUP_CONCAT(course.cname)
from student
join sc
on student.sno=sc.sno
join course
on sc.cno=course.cno
where student.sname='zhang3';
(5)查詢oldguo所教不及格的學生
select teacher.tname,GROUP_CONCAT(student.sname)
from teacher 
join  course
on teacher.tno=course.tno
join  sc
on course.cno=sc.cno
join student
on sc.sno=student.sno
where teacher.tname='oldguo'  and  sc.score<60;
(6)查詢所有老師所教的學生不及格的信息
select teacher.tname,GROUP_CONCAT(student.sname)
from teacher
join course
on teacher.tno=course.tno
join sc
on course.cno=sc.cno
join student
on sc.sno=student.sno
where sc.scroe<60
GROUP BY  teacher.tname;

10.8 別名(表別名,列別名)

表別名

(1)表別名舉例(查詢所有老師所教學生不及格的信息)
select a.tname,GROUP_CONCAT(d.sname)
from teacher AS a
join course  AS b
on a.tno=b.tno
join sc  AS c
on b.cno=c.cno
join student  AS  d
on c.sno=d.sno
where c.score<60
GROUP BY a.tname;

(2)表別名說明
1. AS可以省略,直接加別名即可,但是為了區分最好加上
2. 表別名一般是在from后的表或join后的表定義的別名
3. 表別名定義后在select,where,group by,having以及order by后都可以應用

列別名

(1)列別名舉例(統計每位老師所教課程的平均分,并按平均分排序)
select a.tname AS 講師,AVG(c.score) AS  平均分
from teacher  as a
join course as b
on a.tno=b.tno
join sc as c
on b.cno=c.cno
GROUP BY a.tno
ORDER BY 平均分;

(2)列別名說明
1. 列別名一般是在select后定義的別名
2. 結果集顯示會以別名的形式展示
3. 在having與order by字句中應用

十一. 外連接簡介

11.1 A left join B(左外連接)

應用方式:
...
A left join B
on  A表中的所有條件列=B表中符合兩表的關聯條件的列(A.xx=B.yy)
and 條件(進行過濾所需,外連接沒有where等字句賽選條件,只有and來代替)

11.2 A right join B(右外連接)

應用方式:
...
A right  join B
on A表中符合兩表的關聯條件的列=B表中所有條件列(A.xx=B.yy)
and  條件

11.3 結論

  • 多表連接中,小表驅動大表
  • 通過left/right join強制選定驅動表

十二. 元數據獲取

12.1 元數據包含內容

基表---數據字典信息(列結構frm),系統狀態信息,對象狀態信息,不能直接操作,只能用專門的管理命令進行修改(DDL語句,DCL語句等),視圖information_schema與show語句查詢。基表就相當于linux中的inode,存放各種屬性信息。

12.2 獲取方式

1. show database;   #查看數據庫中所有庫的信息
2. show tables;   #查看庫下所有表
3. show tables from ...;   #查詢某個指定庫下的所有表
4. show create database world;   #查看world庫的建庫語句
5. show create table world.city;   #查看world庫下city表的建表語句
6. show grants  for root@'localhost';   #查看用戶權限信息
7. show charset;   #查看字符集
8. show collation;   #查看校對規則
9. show processlist;   #查看數據庫連接情況
10. show  index  from ...   #查看某個表的索引情況
11. show  status;   #查看數據庫狀態信息
12. show status like '%lock%'   #模糊查看數據庫某些狀態信息
13. show  variables;   #查看數據庫所有配置信息
14. show variables  like  '%lock%'   #模糊查找數據庫默寫配置信息
15. show engines;   #查看數據庫支持的所有的存儲引擎
16. show engines  innodb  status  \G;    #查看關于innodb引擎所有狀態信息
17. show  binary  logs;   #列舉出所有二進制日志
18. show  master status;   #查看數據路的日志位置信息
19. show  binlog  events  in ... ;    #查看二進制日志事件
20. show slave status  \G;   #查看數據庫從庫狀態
21. show relaylog  events;   #查看從庫relaylog事件信息
22. desc  (show colums  from city)   #查看表的列定義信息

12.3 視圖views:information_schema(虛擬庫)查詢

12.3.1 創建視圖test

create view  test  as select
country.name  as co_name,country.Surface Area,city.name as ci_name,city.Population
from city  join country
on city.xountrycode=country.code
where city.population<100;

12.3.2 查看視圖test

  • select * from test;

12.3.3 tables視圖的作用和結構

(1)tables視圖作用

  • 存儲整個數據庫的所有表的元數據查詢方式
    (2)tables下重要列
1. table_schema:表所在的庫名
2. table_name:表名
3. engine:表的引擎
4. table_rows:表的行數
5. avg_row_length:表中行的平均行(字節)
6. index_length:索引的占用空間大小(字節)

12.3.4 tables視圖查詢舉例

(1)查詢world庫下所有表名
- show tables  from world;
(2)查詢整個數據庫中的所有庫和對應表的信息
select table_schema,GROUP_CONCAT(table_name)
from  information_schema.tables
GROUP BY table_schema;
(3)統計所有庫下表的個數
select table_schema,COUNT(table_name)
from information_schema.tables 
GROUP BY table_schema;
(4) 查詢所有innodb引擎的表所在的庫
select table_schema,table_name.ENGINE
from information_schema.tables
where ENGINE='innodb';
(5)統計每張表的實際占用空間大小情況
(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)統計大小默認為字節,其中AVG_ROW_LENGTH與TABLE_ROWS可以互換位置

select table_name,AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH
from information_schema.tables;
(6)統計world庫下每張表的磁盤空間
select table_name,CONCAT((AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024,"  KB")  as size_KB
from  information_schema.tables
where table_schema='world';
(7)統計每個庫(所有庫)的總的磁盤空間占用(數據庫查詢,如下命令是最準確的數據量級查詢,與
linux中的“du  -sh”的區別很大,linux中的查詢結果還包含了很多日志之類的文件,并不是真正的數據量級)

select table_schema
CONCAT(SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)1024,"  KB")  AS Total_KB
from information_schema.tables
GROUP BY table_schema;

linux命令行:
mysql -uroot -p123 -e  "select table_schema CONCAT(SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)1024,"  KB")  AS Total_KB   from information_schema.tables  GROUP BY table_schema;"
(8)對整個數據庫下的所有表進行分庫分表備份(生成單獨備份語句)
模板語句:
mysqldump  -uroot -p123 world city  >/tmp/world_city.sql
分析:
實際上就是進行上述的一個批量的語句拼接過程(CONCAT)
答題:
select CONCAT("mysqldump  -uroot -p123 ",table_schema," ",table_name,"  >/tmp",table_schema,"_",table_name,".sql")
from information_schema.tables
where table_schema  NOT IN('information_schema','performance_schema','sys')
INTO OUTFILE  '/tmp/bak.sh';
(9)進行模仿一下模板語句的批量操作
模板語句: 
alter table world.city  discard  tablespace;
操作:
select CONCAT("alter table  ",table_schema,".",table_name,"  discard  tablespace")
from information_schema.tables
where  table_schema='world'
INTO OUTFILE  '/tmp/dis.sql';
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容