六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

mysql基礎知識

[摘要]本篇文章主要介紹MySQL基礎知識,數據庫它是一個以某種有組織的方式存儲的數據集合,保存有組織的數據的容器(通常是一個文件或一組文件),感興趣的朋友了解一下。SQL分類SQL 主要語句可以劃分為一下...
本篇文章主要介紹MySQL基礎知識,數據庫它是一個以某種有組織的方式存儲的數據集合,保存有組織的數據的容器(通常是一個文件或一組文件),感興趣的朋友了解一下。

SQL分類

SQL 主要語句可以劃分為一下3類

  • DDL:數據定義語言,這些語句定義不同的數據段、數據庫、表、列、索引等數據庫對象。常用語句關鍵字主要包括create,drop,alter等

  • DML:數據操作語句,用于添加、刪除、更新和查詢數據庫記錄,并檢查數據完整性。常用語句關鍵字主要包括 insert,delete,update和select等。

  • DCL數據控制語句,用于控制不同數據段直接的許可和訪問級別的語句。這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要 的語句包括關鍵字grant、revoke等

DDL語句

是對數據庫內部的對象進行創建 、刪除、修改等操作語言,它和DML語句最大的區別是DML只是對表內部數據操作,而不涉及表的定義、結構的修改,更不會涉及其他對象。DDL更多地由數據庫管理員(DBA)使用。

連接mysql服務器 
mysql -uroot -p 

創建數據庫test1
create database test1;

顯示有哪些數據庫
show databases;

<!-- mysql  自動創建的表有
information_schema:主要存儲了系統中的一些數據庫信息,比如用戶表信息、列信息、權限信息、字符集信息、分區信息等等
cluster:存儲了系統的集群信息
mysql:存儲了系統的用戶權限信息。
test:系統自動創建的測試數據庫,任何用戶都可以訪問 -->

選擇數據庫
use test1

顯示test1數據庫中創建的所有表
show tables

刪除數據庫
drop database test1;

創建表
create table emp(ename varchar(10),hiredata date,sal decimal(10,2),deptno int(2));

查看表定義
desc emp;

查看創建表的定義
show create table emp;

刪除表
drop table emp;

修改表
alter table emp modify ename varchar(20);

增加表字段
alter table emp add column age int(3);

刪除表字段
alter table emp drop column age;

字段改名
alter table emp change age age1 int(4);

<!-- change 和modify都可以修改表的定義,不同的是change后面需要寫兩次列名,不方便,但是change的優點是可以修改列名稱,則modify則不能 -->

修改字段排序
alter table emp add birth date after ename;
alter table emp modify age int(3) first;

更改表名
alter table emp rename emp1;

DML語句
是指對數據庫中表記錄的操作,主要包括表記錄的插入(insert)、更新(update)、刪除(delete)和查詢(select)。

插入記錄
insert into emp(ename,hiredate,sal,deptno)values('zzx1','2000-01-01','2000',1);
也可以不用指定字段名稱,但是values后面的順序要和字段的排列順序一致
inset into emp('zzx1','2000-01-01','2000',1);
含可空字段、非空但是含有默認值的字段、自增字段、可以不用再insert后的字段列表里面出現,values后面只寫對應字段名稱的value,沒寫的字段可以自動設置為
null、默認值、自增的下一個數字

批量增加用逗號隔開
insert into dept values(5,'xxx'),(8,'xxx');

更新記錄
update emp set sal=4000 where ename='xxx';

刪除記錄
delete from emp where ename='doney';

查詢記錄select * from emp;
*表示所有記錄,也可以用逗號隔開的字段來選擇查詢

查詢不重復的記錄select distinct deptno from emp;

條件查詢
用where關鍵字來實現,可以使用<>!=等多條件可以使用or、and等

排序和限制desc和asc是排序關鍵字,desc是降序、asc是升序排列 ORDER BY 排序,默認是升序select * from emp order by sal;
如果排序字段的值一樣,則值相同的字段按照第二個排序字段進行排序,如果只有一個排序字段,則相同字段將會無序排序select * from emp order by deptno,sal desc;
限制select * from emp order by sal limit 3;//前者是起始偏移量,后者是顯示行數select * from emp order by sal limit 1,3;

limit 和order by 一起使用來做分頁

聚合
用戶做一下些匯總操作

sum(求和),count(*)(記錄數),max(最大值),min(最小值)
with rollup 是可選語法,表示是否對分類聚合后的結果進行再匯總
having 表示對分類后的結果在進行條件的過濾。

select deptno,count(1) from emp group by deptno having count(1)>=1;

表連接

大類上分為外連接和內連接
外鏈接 又分為左連接和右連接

左連接:包含所以的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄。
右連接:同上

select ename,detname from emp left join dept on emp.deptno=dept.deptno;
左連接和右連接可以相互轉換

子查詢

select * from emp where deptno in(select deptno from dept);
如果子查詢記錄唯一,可以使用=替代in
select * from emp where deptno =(select deptno from dept limit 1);

記錄查詢
將兩個表的數據按照一定的查詢出來后,將結果合在一起顯示

union all 是將結果集合并在一起,而union是將union all后的結果在進行一次distinct,去除重復

select deptno from emp union all select deptno from dept;
select demtno from emp union select deptno from dept;

? xxx 來查看

如果要查看類別 ? data types 具體的 ? int 
查看語法 如 ? create table

數據類型

對于整形數據,MySql還支持在類型名稱后面的小括號設置寬度,默認設置為int(11),配合zerofill,
當數字位數不夠的時候,用字符‘0’填充

alter table t1 modify id1 int zerofill

對于小數,MySql 分為兩種,浮點數和定點數。浮點數包括float和double,而定點數只有decimal,定點數在Mysql內部是以字符串形式存放,比浮點數更精確,適合用于貨幣等精度高的數據

浮點數和定點數可以用類型名稱加(M,D) M是幾位,D是位于小數點后面幾位。

日期類型

  • DATE來表示年月日

  • DATETIME來表示年月日時分秒

  • TIME來表示時分秒

  • 當前系統時間,通常用TIMESTAMP來表示

TIMESTAMP
創建一個字段為TIMESTAMP類型,系統自動創建了默認值為CURRENT_TIMESTAMP(系統日期)。同時MySql規定TIMESTAMP類型字段一列只能有一個默認值current_timestamp。如果修改會報錯.

TIMESTAMP 另一個重要特點是與時區有關。當插入時間時,先轉換為本地時區后存放,而從數據庫取出時,同樣會將日期轉換為本地時區后顯示,這樣兩個時區的用戶看到同一個時區可能就不一樣

查看當前時區
show variables like 'time_zone';
修改時區
set time_zone='+9.00';

DATETIME插入的格式

YYYY-MM-DD HH:MM:SS 或YY-MM-DD HH:MM:SS 的字符串允許任何標點符號用來做時間部分的間隔符
如92@12@31 11^30^45

YYYYMMDDHHMMSS 或YYMMDDHHMMSS的格式沒有間隔符的字符串

字符串類型

CHAR和VARCHAR類型
兩者的主要區別是存儲方式不同:CHAR列的長度固定為創建表時聲明的長度,長度可以為0-255;二VARCHAR列中的值是可變長度。同時在檢索的時候,CHAR列刪除尾部的空格 ,而VARCHAR保留空格,由于CHAR是固定長度,所以它的處理速度別VARCHAR快很多,但是其缺點是浪費內存,在使用中VARCHAR被更多的使用

create table vc (v varchar(4),c char(4))
insert into vc values('ab  ','ab  ');
selelct length(v),length(c) from vc
//4,2

枚舉

create table t(gender enum('m','f'));
insert into t values('m'),('2'),('f'),('null')
//m,f,f,null

set類型
set類型可以一次選取多個成員

create table t2 (col set('a','b','c','d'));
INSERT into t2 VALUE ('a,b'),('a,d,a'),('a,b'),('a,c'),('a');

對于(a,d,a)這個包含重復成員的集合只取一次 結果為’a,d'

運算符

DIV==/==除法獲取商
MOD==%==除法獲取余數

=和<=>區別

不能用于null比較,后者可以

between 使用格式 a between min and max 等價于 a>=min and a<=max

in的使用格式 a in(value1,value2...);

like 使用格式如 a like %123%,當字符串含有123則返回1 否則返回0

REGEXP 使用格式 str REGEXP str_pat 當str字符串中含有str_pat 相匹配的字符串,則返回1

位運算

運算符作用
&and

or
^xor
~位異或
>位右移
<<位左移

常用函數

字符串函數

函數作用
CONCAT(s1,s2,s3…)
連接s1到sn的字符串(任何字符串和null拼接都是null)
insert(str,x,y,instr)
將字符串str從x位置開始,y字符長的子串替換為字符串instr
lower(str)
將字符串str中所有字符變為小寫
UPPER(str)
大寫
LEFT(str,x)
返回字符串str最左邊x個字符
RIGHT(str,x)
返回字符串str最右邊的x個字符
LPAD(str,n,pad)
用字符串pad對str最左邊進行填充,直到長度為n個字符串長度
PRPAD(str,n,pad)
用字符串pad對str最右邊進行填充,直到長度為n個字符串長度
LTRIM(str)
去掉字符串str左側的空格
RIGHT(str)
去掉字符串str行尾的空格
REPEAT(str,x)
返回str重復x次的結果
REPLACE(Str,a,b)
用字符串b替換字符串str中所有出現的字符串a
(STRCMPs1,s2)
比較字符串s1和s2
TRIM(str)
去掉行尾和行頭的空格
SUBSTRING(str,x,y)
返回字符串str x位置起y字符串長度的字串

數字函數

函數
功能
ABS(X)
返回x的絕對值
CEIL(X)
返回大于x的最小整數值
FLOOR(X)
返回小于x的最大整數值
MOD(x,y)
返回x/y的模
RAND()
返回0-1內的隨機值
ROUND(x,y)
返回參數x的四舍五入的有y位小數的值
TRUNCATE(x,y)返回數值x截斷為y位小樹的結果
日期和時間函數
函數
功能
CURDATE()
返回當前日期
CURTIME()
返回當前時間
NOW()
返回當前的日期和時間
UNIX_TIMESTAMP(date)
返回date的unix時間戳
FROM_UNIXTIME
返回UNIX時間戳的日期值
WEEK(date)
返回日期date為一年中的第幾周
YEAR(date)
返回日期date的年份
HOUR(time)
返回time的小時值
MINUTE(time)
返回time的分鐘值
MONTHNAME(date)
返回date的月份名
DATE_FROMATE(date,fmt)
返回按字符串fmt格式化日期date值
DATE_ADD(date,interval expr type)
返回一個日期或時間值加上一個時間間隔的時間值
DATEDIFF(expr,expr2)
返回起始時間expr和結束時間expr2之間的天數

流程函數

函數
功能
IF(value,t f)
如果value是真 返回 t;否則返回f
IFNULL(value1,value2)
如果value1不為空,返回value1,負責返回value2
CASE WHEN[value1] THEN[value2]…ELSE[default] END
如果value1是真,返回result1否則返回defalut
case [expr] WHEN[value1] THEN[value2]…ELSE[default] END
如果expr等于value1,返回result1否則返回defalut

實例

create table salary(userid int ,salary decimal(9,2));
insert into salary values(1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(1,null);
select * from salary
select if(salary>2000,'high','low') from salary;
select ifnull(salary,0) from salary;
select case when salary <=2000 then 'low' else 'high' end from salary;
select case salary when 1000 then 'low' when 2000 then 'mid' else 'high' end from salary;

其他函數


函數
功能
DATABASE()
返回的確數據庫庫名
VERSION()
返回當前數據庫版本
USER()
返回當前登錄用戶名
INET_ATON(IP)
返回ip地址的數字表示
INET_NTOA(num)
返回數字代表的ip地址
PASSWORD(str)
返回字符串str加密版本
MD5()
返回字符串的md5值

MySql引擎
MySql支持的存儲引擎包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事務安全表,用戶可以選擇不同的數據存儲引擎來提高應用的效率

創建表如果不指定存儲引擎,系統默認使用默認存儲引擎,MySql5.5之前的默認引擎是MyISAM,5.5之后改為InnoDB。如果要修改默認的存儲引擎,可以在參數文件中設置default-table-type.

show ENGINES //查看的確支持的存儲引擎

//通過增加engine關鍵字設置新建表的儲存引擎z
create table ai(i bigint(20)not null auto_increment,primary key(i))engine=innodb default charset=gbk;

通過alter 來修改一個表的存儲引擎
ALTER TABLE ai ENGINE =MyISAM;

MyISAM
MyISAM 不支持事務、也不 不支持外鍵,其優點是速度快,對事務完整性沒有要求。以SELECT和INSERT為主的應用基本上都就可以使用這個表

InnoDB
InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些,并且會占用更多的磁盤空間以保留數據和索引。

create table autoincre_demo (i smallint not null auto_increment,name varchar(10),primary key(i))engine=innodb;

insert into autoincre_demo values(1,'1'),(0,'2'),(null,'3') 
如果插入空或者0,則實際插入的將是自動增長后的值。
可以通過以下語句強制設置自動增加列的初始值,默認從1開始,但是該強制的默認值是保留到內存中,如果數據庫從起,這個強制的默認值會丟失,就需要數據庫啟動后重新設置
ALTER TABLE *** auto_increment =n

MEMORY
memory 存儲引擎使用存在于內存中的內容來創建表,每個MEMORY表實際對應一個磁盤文件,格式是.fm,MEMORY表的訪問非常快,因為它的數據是放在內存中,并且默認使用HASH索引,但是一旦服務關閉,表中的數據就會

alter table t2 engine=memory;
show TABLE status like 't2'
給memory表創建索引�?梢灾付╤ash索引還是btree索引
create index mem_hash using hash on tab_memory(city_id);

存儲過程和函數的相關操作.

在對儲存過程和函數操作時,需要首先確認用戶是否具有相應的權限。例如,創建存儲過程或者函數需要CREATE ROUTINE權限,修改或者刪除存儲過程或者函數需要ALTER ROUT

INE權限,執行過程或者函數需要EXECUTE權限

創建一個新的過程 film_in_stock,該過程用來檢查 film_id和store_id對應的inventory是否滿足要求,并且返回滿足的inventory_id 以及滿足要求的記錄數
CREATE PROCEDURE film_in_stock(in p_fim_id int,in p_store_id int,out p_film_count int)
READS sql data
begin
  select inventory_id
  from inventory
  where film_id =p_film_id
  and store_id=p_store_id
  and inventory_in_stock(inventory_id);

  SELECT found_rows() into p_film_count;
end $$

通常在創建過程和函數之前,都會通過DELIMITE $$命令將語句的結束符從';'修改成其他符號,這里使用‘$$’,這樣在過程和函數中的
';'就不會被MySql,解釋成語句的結束而錯誤。在存儲過程或者函數創建完成 通過‘DELIMITER;'命令在將結束符改回成';'
調用過程
CALL film_in_stock(2,2,@a);
存儲過程的好處在于處理邏輯都封裝在數據庫端,調用者不需要了解中間的處理邏輯,一旦邏輯改變,只需要修改存儲過程,對調用者的程序沒有影響

刪除存儲過程或者函數
一次只能刪除一個存儲過程或者函數,刪除需要ALTER ROUTINE權限

drop procedure film_in_stock;

查看存儲過程或者函數狀態

show procedure status like 'film_in_stock';

查看存儲過程的函數定義
show create procedure film_in_stock

變量使用
存儲過程和函數中可以使用變量,在MySql 5.1版本中,變量不區分大小寫

變量的定義
通過DECLARE可以定義一個局部變量,該變量的作用范圍只能在BEGIN...END中,可以用在嵌套塊中
定義一個DATE類型的變量
DECLARE last_month_start date;
變量賦值 可以直接賦值,或者通過查詢賦值。直接賦值使用set,可以賦常量或者賦表達式
set var_name=expr [,var_name=expr]...
set last_month_start=date_sub(current_date(),interval month);
select col_name[,...] into var_name[,...] table_expr;

定義條件和處理

delimiter $$create procedure actor_insert()begin
 declare continue handler for sqlstate '23000' set @x2=1;
 set @x=1;
 insert into actor(actor_id,first_name,last_name) values(201,'test','201');
 set @x=2;
 insert into actor(actor_id,first_name,last_name) values(1,'test','1');
 set @x=3;end ;$$

調用處理函數時遇到主鍵重的錯誤會按照定義的處理方式去處理,由于定義的是CONTINUE 會繼續執行下面的語句
還支持EXIT表示終止

光標使用

聲明光標
declare cursor_name cursor for select_statement
open光標
open cursor_name
fetch光標
fetch cursor_name into var_name[,var_name]...
close光標
close cursor_name

delimiter $$
create procedure payment_stat()
begin
 declare i_staff_id int;
 declare d_amount decimal(5,2);
 declare cur_payment cursor for select staff_id,amount from payment;
 declare exit handler for not found close cur_payment;
  set @x1=0;
  set @x2=0;
  open cur_payment;
 REPEAT
   FETCH cur_payment into i_staff_id,d_amount;
    if i_staff_id =2 then
    set @x1=@x1+d_amount;
    else
    set @x2=@x2+d_amount;
    end if;
 until 0 end repeat;
 close cur_payment;
 end;
 $$
變量,條件,處理程序,光標都是通過DECLARE定義的,她們之間是有先后順序要求的。
變量和條件必須在最前面聲明,然后才能是光標的聲明,最后才可以是處理程序的聲明

控制語句

case 
 when i_staff_id =2 then
 set @x1=@x1+d_amount; else
 set @x2=@x2+d_amount;loop 和leave結合create procedure actor_insert()begin
 set @x=0;
 ins:loop
  set @x=@x+1;  if @x=100 then
  leave ins;  end if;
  insert into actor(first_name,last_name) values('Test','201');  end loop ins;end;
$$

inerate 語句作用是跳過當前循環的剩下語句,直接進入下一輪循環create procedure actor_insert()begin
 set @x=0;
 ins:loop
 set @x=@x+1; if @x=10 then
 leave ins;
 elseif mod(@x,2)=0 then
 iterate ins; end if;
 insert into actor(actor_id,first_name,last_name) values(@x+200,'test',@x); end loop ins;end;
$$repeat 語句 有條件的循環控制語句,當滿足條件的時候退出循環repeat
  fetch cur_payment into i_staff_id,d_amount;  if i_staff_id =2 then
   set @x1=@x1+d_amount;  else
   set @x2=@x2+d_amount;  end if; until 0 end repeat;whiledelimiter $$create procedure loop_demo()begin
 set @x=1,@x1=1;
 repeat
   set @x=@x+1;  until @x>0 end repeat;  while @x<1 do
   set @x=@x+1;  end while; end;
 $$//創建事件調度器CREATE EVEN test_event_1 ON SCHEDULE
EVERY 5 SECONDDOINSERT INTO dept(deptno,deptname)
VALUES(3,'3');//查看本地調度器狀態
 show variables like '%scheduler%'; //打開調度器
 set global event_scheduler=1; //查看后臺進程
 show processlist; //創建一個新的定時器 定時清空表,防止表變大,這類觸發器非常適合去定期清空臨時表或者日志表
 create event trunc_test on schedule every 1 minute do truncate table test;

 禁用調度器或者刪除
 alter event test_event_1 disable;
 drop event test_event_1;

SQL Mode

在MySql中,SQLMode常用來解決下面幾類問題

  • 通過設置SQL Mode,可以完成不同嚴格程度的數據校驗,有效的保障數據準確性。

  • 通過設置SQL Mode,為ANSI模式,來保證大多數SQL符合標準的Sql語法,這樣應用在不同數據庫之間進行遷移時,則不需要對業務SQL進行較大的修改

  • 在不同數據庫之間進行數據遷移之前,通過設置SQL Mode可以使MySQL上的數據更方便地遷移到目標數據庫中

查看 SQL Mode命令select @@sql_mode

插入一個出國實際定義值的大小varchar(10)insert into value('123400000000000000000000000000000');//查看warning內容show warningsselect * from t 這里對插入的數據
進行截取前10位

設置SQL Mode為 嚴格模式set session sql_mode='STRICT_TRANS_TABLES'再次插入insert into value('123400000000000000000000000000000'); 直接給出ERROR,而不是
warning

SQL Mode常見功能
校驗日期是合法性set seesion sql_mode='ANSI'insert into t values('2007-04-31')
結果是 插入值變成'0000-00-00 00:00:00' 并且系統給出warning 而在TRADITIONAL模式下,直接提示日期非法,拒絕插入,同時Mode(x,0)也會報錯

qidon NO_BACKSLASH_ESCAPES模式,使反斜杠成為普通字符,在導入數據時,如果數據含有反斜杠字符,你們啟動NO_BACKSLASH_ESCAPES模式,保證數據的正確性

啟動PIPES_AS_CONCAT。將  視為字符串連接符,在Oracle等數據庫中,  被視為字符串的連接操作符,所以在其他數據庫中含有  操作符的sql在MySql將無法執行,為了解決這個
問題mysql提供了PIPES_AS_CONCAT模式、

MySql分區

MySql從5.1版本開始支持分區,分區是指按照一定的規則,數據庫把一個表分解成多個更小的,更容易管理的部分。就訪問數據庫的應用而言,邏輯上只有一個表或一個索引,但是實際上

這個表可能由數10個物理分區對象組成,每個分區都是一個獨立的對象,可以獨自處理,可以作為表的一部分進行處理。分區對應用而言是完全透明的,不影響應用的業務邏輯優點

  • 和單個磁盤或者文件系統分區相比,可以存儲更多數據

  • 優化查詢。在where子句中包含分區條件,可以只掃描必要的一個或多個分區來提高查詢效率;同時在涉及SUM()和COUNT()這類聚合函數的查詢時,可以容易的在每個分區上并行

    處理,最終只需要匯總所有分區的結果

  • 對于已經過期或者不需要保存的數據,可以通過刪除與這些數據有關的分區來快速刪除數據

  • 跨多個磁盤來分散數據查詢,以獲得更大的查詢吞吐量

分區有利于管理非常大的表,它采用 分而治之的邏輯,分區引入分區鍵的概念,分區鍵用于根據某個區間鍵,特定值列表或者HASH函數執行數據的聚集,讓數據根據規則分布在不同的分區

中,讓一個大對象變成一些小對象

show VARIABLES like '%partition%' 查看是否支持分區

Mysql支持大部分存儲引起如MyISAM,INNODb,Memory等存儲引擎,創建分區,在5.1版本中,同一個分區表的所以分區必須使用同一個存儲引擎;
在同要給表上,不能對一個分區使用MyISAM引擎和Innodb引擎,但是在同一個MySQL服務器服務器上,甚至同一個數據庫中,對于不同的分區表使用不同的存儲引擎

分區類型

  • range分區:基于一個給定連續區間范圍,把數據分配到不同的分區。

  • LIST分區:類似RANGE分區,區別在LIST分區是基于枚舉出的值列表分區,RANGE是基于給定的連續區間范圍分區

  • HASH分區:基于給定的分區個數,把數據分配到不同的分區

  • KEY分區:類似HASH分區

range分區

CREATE TABLE emp(
    id int not null,
    ename varchar(30),
    hired date not null DEFAULT '1970-01-01',
    separated date NOT null DEFAULT '9999-12-21',
    job varchar(30) not null,
    store_id int not null
)
partition by range(store_id)(
    PARTITION p0 VALUES less than (10),
    PARTITION p1 VALUES less than (20),
    PARTITION p2 VALUES less than (30)
);
//上述的分區方案將storid,1-9分到p0區,10-19分到p1區,等如果插入大于30,會出現錯誤,因為沒有規則保護大于30的

INSERT into emp VALUES('2322','milk','1993-12-23','1993-12-23','click',19);//可以

//Table has no partition for value 40
INSERT into emp VALUES('2322','milk','1993-12-23','1993-12-23','click',40);

添加分區
alter  table emp add partition(partition p3 values less than maxvalue);
maxvalue表示最大的可能的整數值

mysql 支持在values less than 語句中加入表達式
比如以日期作為分區
CREATE TABLE emp(
    id int not null,
    ename varchar(30),
    hired date not null DEFAULT '1970-01-01',
    separated date NOT null DEFAULT '9999-12-21',
    job varchar(30) not null,
    store_id int not null
)
partition by range(year(separated ))(
    PARTITION p0 VALUES less than (1995),
    PARTITION p1 VALUES less than (2000),
    PARTITION p2 VALUES less than (2005)
);
MySQl 5.5改進了range分區給你,通過支持非整數分區,創建日期分區就不需要通過函數進行轉換
partition by range(separated )(
    PARTITION p0 VALUES less than ('1996-01-01'),
    PARTITION p1 VALUES less than ('2001-01-01'),
    PARTITION p2 VALUES less than ('2006-01-01')
);

List分區

create table expenses(
  expense_date date not null,
  category int,
  amount decimal(10,3)
)partition by list (category)(
   partition p0 values in(3,5),
   partition p1 values in(1,10),
   partition p2 values in(4,9),
   partition p3 values in(2),
   partition p4 values in(6)
)

LIST分區不存在類似于VALUES LESS THAN MAXVALUE這樣的值 在MYSQL5.5支持非整數分區

Columns分區

create table rc3(a int,b int)
parition by range columns(a,b)(
 parition p01 values less than(0,10),
 parition p01 values less than(10,10),
 parition p01 values less than(10,20),
 parition p01 values less than(maxvalue,maxvalue)
)

Hash分區

create table emp(id int not null.ename varchar(30),hired date not null default '1907-01-01',sparated date null null default '8888-12-31',job varchar(30) not null,
store_id int not null) partition by hash(store_id)partitions 4;

這里創建了一個常規的hash 使用 partition by hash(expr)其中expr是某列值或一個整數值的表達式返回值。 partition num 對分區類型,分區鍵,分區個數進行定義,上述基于
store_id列hash分區,表被分為4個分區

我們可以計算出它被保存在哪個分區中假設,假設記錄的分區編號為N,那么N=MOD(expr,num),例如emp表中有4個分區,插入一個store_id為234的 mod(234,4)=2,倍保存在第二個
分區

相關推薦:

關于mysql 基礎知識的總結

PHP 和 MySQL 基礎教程(一)

PHP 和 MySQL 基礎教程(二)

PHP 和 MySQL 基礎教程(三)

PHP 和 MySQL 基礎教程(四)


以上就是mysql基礎知識 的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 色天使在线视频 | 色一欲一性一乱一区二区三区 | 视频免费在线观看 | 一二三四影视手机在线观看视频 | 日日干干 | 日韩中文字幕视频在线观看 | 日韩高清成人毛片不卡 | 网站国产 | 热e国产 | 日韩精品在线观看视频 | 天天干夜夜想 | 天天舔天天色 | 欧美性色欧美a在线播放 | 亚洲第成色999久久网站 | 亚洲 欧美 国产 日韩 制服 bt | 日本国产在线观看 | 鸥美一级黄色片 | 色婷婷.com| 日日天天夜夜 | 欧美亚洲另类色国产综合 | 亚洲最大免费视频网 | 亚洲v日韩v欧美在线观看 | 四虎国产精品永久地址49 | 在线看av网址 | 四虎国产精品永久在线网址 | 日本欧美不卡一区二区三区在线 | 欧美天天性影院 | 色综合天天综合 | 色综合久久综合欧美综合网 | 四虎精品影院在线观看视频 | 午夜精品一区 | 鸥美性生交xxxxx久久久 | 一级毛片一级毛片一级毛片一级毛片 | 日韩专区亚洲国产精品 | 日韩禁片 | 人妖欧美一区二区三区四区 | 日韩高清在线不卡 | 日本性网址 | 天天操狠狠干 | 四虎国产成人免费观看 | 日韩国产中文字幕 |