Mysql是一個輕量型數據庫,開源免費。Oracle是收費的並且價格很是高。mysql
Mysql一個實例能夠操做多個庫,而Oracle一個實例只能對應一個庫。正則表達式
Mysql安裝完後300M而Oracle有3G左右。sql
主鍵:Mysql通常使用自動增加類型,而Oracle則須要使用序列對象。數據庫
單引號的處理:mysql裏能夠用雙引號包起字符串,oracle裏只能夠用單引號包起字符串。api
分頁的sql語句:mysql用limit,而oracle使用內建視圖和rownum僞列。緩存
事務處理:mysql默認是自動提交,而oracle默認不自動提交,須要用戶CTL語言進行事務提交。服務器
oracle裝好後會有一個oracle實例還有一個庫,庫當中有數據文件,這數據文件在oracle中稱爲表空間。oracle
因此在Oracle裝好之後,咱們首先要去建立一個永久表空間,再去建立用戶。隨後把這個永久表空間分配給這個用戶。函數
接着再去建立一個用戶,再給他分配一個表空間。經過表空間來實現物理隔離。性能
因此說在oracle中庫有一個就夠了,而後咱們再給他建立表空間。
mysql是一個實例能夠對應多個庫,mysql當中呢沒有表空間這個概念,因此說咱們能夠去建立不一樣的庫,而後用戶直接去操做不一樣的庫。每一個庫中放着不一樣的數據文件。
create database 數據庫名 default character set字符編碼;
建立一個test的數據庫,並查看該數據庫,以及該數據庫的編碼。
create database test default character set utf-8;
建立數據庫:
create database 庫名;
查看數據庫
show databases;
查看數據庫編碼:
select schema_name ,default_character_set_name from information_schema.schemata where schema_name='test';
drop database 數據庫名;
1.2.1.1示例
drop database test;
須要在哪一個庫中建立表須要先選擇該數據庫。
use 須要選擇的庫名;
建立一個名稱爲test的數據庫,編碼爲utf-8;
create database test default character set utf8;
選擇該數據庫;
use test;
Mysql支持全部準備sql數值數據類型。
做爲sql標準的擴展,Mysql也支持整數類型tinyint、mediumint和bigint。
Mysql數據類型 含義
tinyint(m) 一個字符 範圍(-128- 127)
smallint(m) 2個字節 範圍(-32768- 32767)
mediumint(m) 3個字節 範圍(-8388608- 8388687)
int(m) 4個字節 範圍(-2147483648- 2147483647)
bigint(m) 8個字節 範圍(+-9.22*10的18次方)
數值類型中的長度m是指顯示長度,並不顯示存儲長度,只有字段指定指定zerofill時有用
例如: int(3),若是實際值是2,若是列指定了zerofill,查詢結果就是002,左邊用0來填充。
float(m,d) 單精度浮點型 8位精度(4個字節) m總個數,d小數位
double(m,d) 雙精度浮點型 16位精度(8位) m總個數,d個小數位
、
char(n) 固定長度,最多255個字符
varchar(n) 可變長度,最多65535個字符
tinytext 可變長度,最多255個字符
text 可變長度,最多65535個字符
mediumtext 可變長度,最多2的24次方-1個字符
longtext 可變長度,最多2的32次方-1個字符
1.char(n)若存入字符數小於n,則以空格補於其後,查詢之時再將空格去掉。因此char類型存儲的字符串末尾不能有空格,varchar不限制於此。
2.char類型的字符串檢索要比varchar類型快。
1.varchar能夠指定n,text不能指定,內部存儲varchar是存入的實際字符數+1個字節(n<=255),text是實際字符數+2個字節。
2.text類型不能有默認值。
3.varchar可直接建立索引,text建立索引要指定前多個字符。varchar查詢速度快於text,在都建立索引的狀況下,text的索引彷佛不起做用。
mysql數據類型 含義
date 日期2008-12-2
time 時間‘12:25:36’
datetime 日期時間‘2008-12-2 22:06:44’
timestamp 自動存儲記錄修改時間
1.BLOB和TEXT存儲方式不一樣,text以文本方式存儲,英文存儲區分大小寫,而Blob是以二進制方式存儲,不分大小寫。
2.BLOB存儲的數據只能總體讀出。
3.text能夠指定字符集,BLOB不一樣指定字符集。
4.1建立表
create table employees(employee_id int,last_name varchar(30),salary float(8,3))
4.2查看錶
show tables;
4.3刪除表
drop table employees;
alter table 舊錶名 rename 新表名
將employees表名修改成emp。
alter table employees rename emp;
alter 表名 change column 舊列名 新列名 類型
將emp表中的last_name 修改成name
alter table employees change column last_name name varchar(30)
alter table 表名 modifity 列名 新類型
將emp當中的name長度指定爲49;
alter table employees MODIFY name varchar(40);
alter table 表名 add column 新列名 類型
5.4.1示例
在emp表中添加一個新的lie爲commission_pct
alter table employees add column commission_pct float(4,2)
5.5使用ddl來刪除列
alter table 表名 drop column 列名
5.5.1示例
刪除emp表中的commission_pct
alter table emp drop column commsission_pct;
查詢表的約束信息
show keys from table;
查詢表中的約束信息
show keys from 表名
建立employees表包含employees _id該列爲主鍵且自動增加,last_name列不容許含有空值,email列不容許有重複不容許有空值,dept_id爲外鍵參照departments表的主鍵。
create table employees(
employees_id int primary key auto_increment,
last_name varchar(30) not null,
email varhcar(40) not null unique,
dept_id int,
constraint emp_fk foreign key(dept_id)referenes departments(department_id);
)
6.3.1主鍵約束
6.3.1.1添加主鍵約束
alter table 表名 add primarykey(列名)
6.3.1.1.1示例
將emp表中的employee_id修改成主鍵自動增加
添加主鍵:alter table emp add primary key(employee_id);
添加自動增加:alter table emp modify_id auto_increment;
alter table 表名 drop primary key
注意:刪除主鍵時,若是主鍵列具有自動增加能力,須要先去掉自動增加,而後在刪除主鍵。
例子:
刪除employee_Id的主鍵約束。
去掉自動增加:alter table emp modify employee_id int;
刪除主鍵:alter table emp drop primary key;
6.3.2.1添加非空約束
alter table 表名 modify 列名 類型 not null;
向emp表中的salary添加非空約束
alter table emp modify salary float(8,2) not null,
alter table 表名 modify 列名 類型 null
向emp表中的name添加惟一約束
alter table add constraint emp_uk unique(name);
alter table 表名 drop key 表名。
alter table emp drop key emp_uk;
alter table 表名 add constraint 約束名 foreign key(列名)
refrences 參照的表名(操做的列名)
alter table add constraint e_fk foreign key(dept_id) refrences departments(department_Id);
刪除外鍵:
alter table 表名 drop foreign key 約束名
刪除外鍵索引(索引名與約束名同名)
alter table表名 drop index 索引名。
6.3.4.2.1示例
刪除dept_id的外鍵約束
刪除外鍵: alter table emp drop foreign key e_fk;
刪除索引: alter table emp drop index e_fk;
7.1.1.1選擇插入
insert into 表名(列名1,列名2....)values(值1,值2,值3...);
insert into 表名 values(值1,值2,值3.....)
insert into 表名 (...)values
(值1,值2,值3.....),
(值1,值2,值3.....),
(值1,值2,值3.....);
一個表中只能有一個列爲自動增加。
自動增加的列的類型必須是整數類型。
自動增加只能添加到具有主鍵約束與惟一性約束的列上。
刪除主鍵約束或者惟一約束,若是該列擁有自動增加能力,則須要去掉自動增加而後刪除約束。
Create table emp2(id int primary key ,name varchar(30),seq_num int unique auto_increment);
在MySQL中可使用default爲字段設定一個默認值。若是在插入數據時並未指定該列的值,那麼MySQL會將默認值添加到該列中。
create table emp3(emp_id int primary key auto_increment ,name varhcar(30),address varchar(50) default 'unknown');
update 表名 set 列名=值,列名=值 where 條件
跟新的表不能在set和where中用於子查詢;
update後面能夠作任意的查詢。
跟新emp3中id爲2的數據,將地址修改成id爲1用戶相同
Oracle: update emp3 e set e.address=(select address from emp3 where emp_id=1)where e.emp_id=2;
mysql: update emp3 e,(select address from emp3 where emp_id=1)t set e.address=t where e.emp_id=2;
方式二:
update emp3 e set e.address=(select t1.address from(select * from emp3) t1 where t1.emp_id=1)
delete from 表名 where 條件
刪除emp3表中emp_id爲1的僱員信息。
truncate table 表名
刪除emp3表中的全部數據
truncate table emp3;
在mysql中默認狀況下,事務是自動提交的,也就是說,只要執行一條DML語句就開啓了事務,而且提交了事務。
start transaction (此後的數據須要本身手動提交)
DML.....
commit|rollback
8.1.1示例
向emp3表中添加一條數據,要求手動提交事務。
select *|投影列from 表名
查詢全部
select * from departments;
select *|投影列 from 表名 where 選擇條件。
select department_name,location_Id from departments where department_id=4;
+:加法運算
-:減法運算
*:乘法運算
/:除法運算,返回商
%:求餘運算,返回餘數。
示例一
修改employees表添加salary。
alter table employees add column salary float(9,2);
示例二
select employees_id,last_name,email,12*salary from employees;
3.1大小寫控制函數
LOWER(str) 轉換大小寫混合的字符串爲小寫
UPPER(str) 轉換大小寫混合的字符串爲大寫
CONCAT(str1,str2) 將str一、str2等字符串鏈接起來
SUBSTR(str,pos,len) 從str的第pos位(範圍:1-str.length)開始,截取長度爲len的字符串
length(str) 獲取str的長度
instr(str,substr)
Lpad(str,len,padstr) 獲取substr在str中的位置
trim(str) 從str中刪除開頭和結尾的空格(不會處理字符串中間含有的空格)
Ltrim(str) 從str中刪除左側開頭的空格
Rtrim(str) 從str中刪除右側結尾的空格
REPLACE(str,from_str,to_str) 將str中的from_str替換爲to_str(會替換掉全部符合from_str的字符串)
ROUND(arg1,arg2):四捨五入指定小數的值
ROUND(arg1):四捨五入保留整數
TRUNC(arg1,arg2):截斷指定小數的值,不作四捨五入。
MOD(arg1,arg2):取餘
3.4日期函數
SYSDATE()或者NOW() 返回當前系統時間,格式爲YYYY-MM-DD-hh-mm-ss
CURDATE() 返回系統當前日期,不返回時間
CURTIME() 返回當前系統中的時間,不返回日期
DAYOFMONTH(date) 計算日期 d是本月的第幾天。
DAYOFWEEK(date) 日期d今天是星期幾 1星期日
dayofyear(date)
dayname(date)
LAST_DAY(date) 返回date日期當月的最後一天。
3.5轉換函數
date_format(date,format) 將日期轉換成字符串(相似oracle中的to_char())
str_to_date(str,format) 將字符串轉換成日期(相似oralce中的to_date())
format的格式都列出來:
%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 數字, 4 位
%y 年, 數字, 2 位
%a 縮寫的星期名字(Sun……Sat)
%d 月份中的天數, 數字(00……31)
%e 月份中的天數, 數字(0……31)
%m 月, 數字(01……12)
%c 月, 數字(1……12)
%b 縮寫的月份名字(Jan……Dec)
%j 一年中的天數(001……366)
%H 小時(00……23)
%k 小時(0……23)
%h 小時(01……12)
%I 小時(01……12)
%l 小時(1……12)
%i 分鐘, 數字(00……59)
%r 時間,12 小時(hh:mm:ss [AP]M)
%T 時間,24 小時(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一個星期中的天數(0=Sunday ……6=Saturday )
%U 星期(0……52), 這裏星期天是星期的第一天
%u 星期(0……52), 這裏星期一是星期的第一天
%% 字符% )
https://www.jb51.net/article/135803.htm
select date_format(sysdate,'%Y年%月%d日')
select str_to_date('2019年03月23日','%Y年%m月%d日');
3.6示例一
insert into empoyess values(default,'King','King@sxt.cn',190000,0.6,str_to_date('2018年5月1日','%Y年%m月%d日'))
ifnull(expr1,expr2)
if(expr1,expr2,expr3)
coalesce(value...)判斷value的值是否爲null,若是不爲null,則返回value;若是爲空,則判斷下一個value是否爲空..直到出現不爲空的value並返回或者返回最後一個爲null的value。
示例
查看僱員king所在部門名稱
select department_name from employees e,departments d where e.dept=d.department_id and e.last_name='king'
4.2.1示例一
建立sal_level表,包含lowest_sal,highest_sal ,level.
create table sal_level(lowest_sal int ,highest_sal int ,level VARCHAR(30));
插入多條數據
insert into sal_level values(1000,2999,'A')
select e.last_name from employee e,sal_level s where e.salary between s.lowest_sal and highest_sal;
select emp.last_name from employees emp ,employees man where emp.manager_id=man.employees_id;
Mysql5.7支持SQL99標準。
使用交叉鏈接查詢employees表與department表
select * from employees cross join departments
使用天然鏈接查詢全部部門的僱員的名字以及部門名稱。
select e.last_name,d.department_name from employees natural join departments d where e.last_name='oldlu';
若兩個表有多個列相同,則都作鏈接條件。
6.3.1示例
查詢僱員名字爲oldlu的僱員id,薪水與部門名稱。
select e.employees_id,e.salary,d.department_name from employees e inner join departments d on e.department_id=d.department_id where e.last_name='Oldlu';
對分組數據作平均值運算
arg:參數類型只能是數字類型
select avg(e.salary) from employees e;
對分組數據求和
arg:參數類型只能是數字類型
select sum(salary) from employees;
求分組中最小數據。
arg:參數類型能夠是字符、數字、日期
select imn(salary) from employees;
求分組中最大的數據。
arg:參數類型能夠是字符、數字、日期。
返回一個表中的行數
COUNT 函數有三種格式:
count(*)
count(expr)
count(distinct expr)
計算每一個部門的平均薪水
select avg(e.salary) from employees e group by e.department_id;
顯示那些最高薪水大於5000的部門的部門號和最高薪水。
select e.department_id,max(e.salary) from employees e group by e.department_id having max(e.salary)>5000;
能夠將子查詢放在許多的sql子句中,包括:
誰的薪水比oldru高
select em.last_name ,em.salary from empoyees em where em.salary>(select e .salary from employees e where e.last_name='Oldlu');
= 等於
> 大於
>= 大於或等於
< 小於
<= 小於或者等於
<> 不等於
查詢oldlu的同事,可是不包含他本身。
select empl.last_name from employees empl
where empl.department_id=
(select e.department_id from employees e where e.last_name='oldru')
and empl.last_name<>'Oldlu';
操做 含義
in 等於列表中的任何成員
any 比較子查詢返回的每一個值
all 比較子查詢返回的所有值
示例:
查找各個部門收入最低的那些僱員。顯示他們的名字,薪水以及部門id。
select em.last_name ,em.salary,em.department_Id from employees em where em.salary in(select min(e.salary) from employees group by e.department_id);
mysql中容許使用正則表達式定義字符串搜索條件,性能高於like。
mysql中的正則表達式能夠對整數類型或者字符類型檢索。
使用REGEXP關鍵字表示正則匹配。
默認忽略大小寫,若是要區分大小寫,使用BINARY關鍵字
模式 | 什麼模式匹配 |
^ | 字符串的開始 |
$ | 字符串的結尾 |
. | 任何單個字符 |
[...] | 在方括號內的任何字符列表 |
[^...] | 非列在方括號內的任何字符 |
p1|p2|p3 | 交替匹配任何模式p1,p2或者p3 |
* | 零個或者多個前面的元素 |
+ | 前面的元素的一個或多個實例 |
{n} | 前面的元素的n個實例 |
{m,n} | m到n個實例前面的元素 |
^在正則表達式中表示開始
查詢以x開頭的數據(忽略大小寫)
select 列名 from 表名 where 列名 REGEXP '^X';
查詢僱員表中名字以k開頭的僱員名字與薪水
10.3.1語法
查詢以x結尾的數據(忽略大小寫)
select 列名 from 表名 where 列名 REGEXP 'x$';
10.3.2示例
查詢僱員表中名字以n結尾的僱員名字與薪水。
select last_name ,salary from employees where last_name REGEXP binary 'n$';
英文的點,它匹配任何一個字符,包括回車、換行等。
select 列名 from 表名 where 列名REGEXP 'x';
查詢僱員表中名字含有o的 僱員的姓名與薪水。
select last_name,salary from employees where last_name REGEXP'O.';
「*」:星號匹配0個或者多個字符,在它以前必須有內容。
「+」:加號匹配1個或者多個字符,在它以前也必須有內容。
select 列名 from 表名 where 列名 REGEXP 'x+'; 匹配大於1個的任意字符。
「?」:問號匹配0次或者1次
select 列名 from 表名 where 列名 REGEXP 'x?'; 匹配0個或者1個字符
"|":表示或者含義
select 列名 from 表名 where 列名 REGEXP ‘abc|bcd’ ; 匹配包含abc或者bcd
查詢僱員表中名字含有ke或者lu的僱員的名字與薪水。
select last_name,salary form employees where last_name REGEXP'ke|lu';
「[a-z]」:字符範圍
「^[...]」:以什麼字符開頭的
"[^...]":匹配不包括在[]的字符
select 列名 from 表名 where 列名 REGEXP '[a-z]'; 匹配內容包含a-z範圍的數據。
查詢僱員表中名字包含x、y、z字符的僱員的名字和薪水。
select last_name ,salary from employees where last_name regexp '[x-z]';
select last_name ,salary from employees where last_name regexp 'x|y|z';
查詢僱員名字是t、f開頭的僱員名字與薪水。
select last_name ,salary from employees where last_name regexp '^[t|f]';
查詢僱員的名字與薪水,不包括oldlu.
select last_name ,salary from employees where last_name regexp '[^oldlu]';
「{n}」:固定次數
select * from student where name REGEXP's{2}';----匹配以s連續出現2次的全部的數據
10.10.2示例一
查詢僱員名字含有連續兩個e的僱員的姓名與薪水
select last_name,salary from employees where last_name REGEXP'e{2}';
10.10.3示例二
查詢名字含有兩個o的僱員的名字與薪水。
select last_name,salary from employees where last_name REGEXP'o.{2}';
「{n,m}":範圍次數
select * from student where name REGEXP '^s{2,5}';---匹配以s開頭且重複2到5次的全部數據
10.11.2示例
查詢僱員名字中包含1個或者兩個o的僱員姓名與薪水。
select last_name ,salary from employees where last_name REGEXP 'o.{1,2}';
是最基本的索引,它沒有任何限制。
在建立索引時,能夠指定索引長度。length爲可選參數,表示索引的長度,只有字符串類型的字段才能指定索引長度,若是是BLOB和TEXT類型,必須指定length。
建立索引時須要注意:
若是指定單列索引長度,length必須小於這個字段所容許的最大字符個數。
查詢索引: show index from table_name;
create index index_name on table(column(length))
爲emp3表中的name建立一個索引,索引名爲emp3_name_index;
create index emp3_index on emp3(name);
alter table table_name add index index_name (column(length))
修改emp3表,爲address列添加索引,索引名爲emp3_address_index
alter table emp3 add index emp3_address_index(address)
create table 'table'(
column type,
primary key(id);
index index_name(column(length))
)
建立emp4表,包含emp_id,name,address列,同時爲name列建立索引。索引名爲emp4_name_index
create table emp4(
emp_id int primary key auto_increment,
name varchar(30),
address varchar(50),
index emp4_name(name)
)
drop index inde_name on table
刪除mep3表中索引名爲emp3_address_index的索引。
drop index emp3_address_index on table;
create unique index indexname on table(column(length))
爲emp表中的name建立一個惟一索引,索引名爲emp_name_index
create unique index emp_name_index on emp(name);
alter table table_name add unique indexName(column(length))
修改emp表,爲address列添加惟一索引,索引名爲emp_address_index
alter table emp add unique emp_salary(salary);
create table table(
column type,
primary key(id),
unique index_name(column(length))
)
主鍵索引是一種特殊的惟一索引,一個表只能有一個主鍵,不容許有空值。通常是在建表的時候同時建立主鍵索引。
1.4.1修改表添加主鍵索引
alter table 表名 add primary key(列名)
1.4.1.1示例
修改emp表爲employee_id添加主鍵索引
alter table emp add primary key(employee_id)
1.4.2建立表時指定主鍵索引
組合索引是指使用多個字段建立的索引,只有在查詢條件中使用了建立索引時的第一個字段,索引纔會被使用(最左前綴原則)
就是最左優先。
如:咱們使用表中的name,address,salary建立組合索引,那麼想要組合索引生效,咱們只能使用以下組合:
name/address/salary
name/address
name/
若是使用address/salary或者是salary則索引不會生效。
alter table table_name add index index_name(column(length),column(length))
修改emp6表,爲name,address列建立組合索引
alter table emp6 add index emp6_index_n_a (name,address);
create table table(
column type,
index index_name(column(length),column(length))
)
1.5.3.1示例
建立emp7表,包含emp_id,name,address列,同時爲name,address列建立組合索引。
create table emp7(emp_id int primary key auto_increment ,name varchar(20),address varchar(30),index emp_index7_n_a(name,address))
全文索引(FULLTEXT INDEX)主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其餘索引不大相同,它更像是一個搜索引擎,而不是簡單的where語句的參數匹配。fulltext索引配合match against 操做使用,而不是通常的where語句加like。
全文索引能夠從char、varchar或者text列中做爲create table語句的一部分被建立,或是隨後使用alter table 添加。不過切記對於大容量的數據表,生成全文索引是一個很是消耗時間很是消耗硬盤空間的作法。
alter table table_name add fulltext index_content(content)
修改emp7表添加content列類型爲text
alter table emp7 add column contemt text;
修改emp7,爲content列建立全文索引
alter table emp7 add fulltext emp_content_fullindex(content)
create table(
column type,
fulltext index_name(column)
)
建立emp8包含emp_id列,content列該列類型爲text,併爲該列添加名爲emp8_content_fulltext的全文索引。
create table emp8(emp_Id int primary key auto_increment,
content text ,
fulltext emp8_content_fullindex(content))
drop index index_name on table
alter table table_name drop index index_name;
1.6.3示例
刪除emp8表中名爲emp8_content_full的索引
drop index emp8_cotent_fullindex on emp8
全文索引的使用與其餘索引不一樣。在查詢語句中須要使用match(column)against('content')來檢索數據。
1.7.1全文解析器
全文索引中基本單位是「詞」。分詞,全文索引是以詞爲基礎的,mysql默認的分詞是全部非字母和數字的特殊符號都是分詞符。在檢索數據咱們給定的檢索條件也是詞。
mysql中默認的全文解析器不支持中文分詞。若是數據含有中文須要更換全文解析器NGRAM。
1.7.2使用全文索引
select 投影列 from表名 where match(全文列名) against('搜索內容')
示例二
向emp8表中插入一條數據content的值爲"hello,bjsxt";
insert into emp8 values(default,"hello bjsxt");
示例三
查詢emp8表中內容包含bjsxt的數據
select * from emp8 where match(content)AGAINST("bjsxt");
在建立全文索引時能夠指定ngram解析器
alter table table_name add fulltext index_content(content) with parser ngram
1.7.3.1示例一
刪除emp8表中的emp8_content_full全文索引
drop index emp8_content_Full on emp8
1.7.3.2示例二
修改emp8表,爲content列添加名稱emp8_content_full的全文索引,並指定ngram全文解析器。
alter table emp8 add fulltext emp8_content_full(content) with parser ngram
1.7.3.3示例三
向emp8表中添加一條數據content 值爲「 你好,詩聖杜甫」
insert into emp8 values(default,'你好,詩聖杜甫');
1.7.3.4示例四
查詢emp8表中內容包含「詩聖杜甫」
select * from emp8 where match(content) against('詩聖杜甫');
mysql分頁查詢原則
1.1語法格式
select 投影列from 表名 where 條件 order by limit 開始位置,查詢數量。
1.1.1示例
查詢僱員表中全部數據按id排序,實現分頁查詢,每次返回兩條結果。
select * from employees order by employees_id limit 0,2;
select 投影列 from 表名 where 條件 ordfer by limit 查詢數量 offset 開始位置。
2.1.1示例
查詢僱員
select * from employees order by employee_id limit 2 offset 0;
在mysql中能夠經過explain關鍵字模擬優化器執行sql語句,從而知道mysql是如何處理sql語句的。
explain select * from employees;
3.啓動執行計劃