![課件第七課mysql數(shù)據(jù)庫設(shè)計_第1頁](http://file4.renrendoc.com/view/ae6719ee05fb9ebe56f61e3d3e4cddae/ae6719ee05fb9ebe56f61e3d3e4cddae1.gif)
![課件第七課mysql數(shù)據(jù)庫設(shè)計_第2頁](http://file4.renrendoc.com/view/ae6719ee05fb9ebe56f61e3d3e4cddae/ae6719ee05fb9ebe56f61e3d3e4cddae2.gif)
![課件第七課mysql數(shù)據(jù)庫設(shè)計_第3頁](http://file4.renrendoc.com/view/ae6719ee05fb9ebe56f61e3d3e4cddae/ae6719ee05fb9ebe56f61e3d3e4cddae3.gif)
![課件第七課mysql數(shù)據(jù)庫設(shè)計_第4頁](http://file4.renrendoc.com/view/ae6719ee05fb9ebe56f61e3d3e4cddae/ae6719ee05fb9ebe56f61e3d3e4cddae4.gif)
![課件第七課mysql數(shù)據(jù)庫設(shè)計_第5頁](http://file4.renrendoc.com/view/ae6719ee05fb9ebe56f61e3d3e4cddae/ae6719ee05fb9ebe56f61e3d3e4cddae5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)庫設(shè)計數(shù)據(jù)類型之整數(shù)類型不僅支持標準SQL中的己的擴展的整數(shù)類型eger和small類型,還支持一些自下表中指明了具體的類型,圍,unsigned代表不允許負數(shù),消耗的字節(jié)數(shù),最小最大取值范整數(shù)的取值范圍擴大一倍01數(shù)據(jù)類型之整數(shù)類型可以為整數(shù)類型指定寬度,比如(11),這個限制對大多數(shù)應(yīng)用沒有意義,因為這不是限制值的合法范圍,對于和計算來說,(1)和(20)是相同的,只是對一些的交互工具規(guī)定了顯示字的個數(shù),比如命令行客戶端。create table temp1(id(1),id2(20);Query OK, 0 rows affected (0.01 sec)inserto temp1
2、values(1000000,1000000);Query OK, 1 row affected (0.00 sec)select * from temp1;+-+| id| id2|+-+| 1000000 | 1000000 |+-+011 row in set (0.00 sec)數(shù)據(jù)類型之整數(shù)類型alter table temp1 modify idQuery OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0(1) zerofill;alter table temp1 modify id2Query
3、OK, 1 row affected (0.03 sec) Records: 1 Duplicates: 0 Warnings: 0(20) zerofill;select * from temp1;+| id| id2|+|+10 | 00000000000000000010 |01+-+-+數(shù)據(jù)類型之固定浮點類型Decimal和numeric數(shù)據(jù)類型用來比如涉及財務(wù)數(shù)據(jù)的時候DECIMAL(M,D) UNSIGNED高精度數(shù)據(jù),一般只在對小數(shù)進行精確計算時才使用,在中,numeric和decimal的含義相同Decimal的使用方法舉例為decimal(5,2)其中的5代表為精度,表示了可
4、以使用多少位數(shù)字其中的2代表小數(shù)點后面的小數(shù)位數(shù)此例子的取值范圍為-999.99到999.99當不需要指定小數(shù)時,可以使用decimal(M),decimal(M,0)表示當直接使用decimal時,則默認的M為10M的最大取值為65,D的最大取值為30,當D為0時可以用來當指定unsigned,表示不允許負數(shù)比BIG更大范圍的整數(shù)值對decimal字段采用每4個字節(jié)9個數(shù)字的方式,例如decimal(18,9)小數(shù)點兩邊各存儲9個數(shù)字,一共使用9個字節(jié):小數(shù)點前的數(shù)字用4個字節(jié),小數(shù)點后的數(shù)字用4個字節(jié),小數(shù)點本身占1個字節(jié)01數(shù)據(jù)類型之浮點類型浮點類型中包含float和double兩種,與
5、decimal相比是不精確類型FLOAT(M,D) UNSIGNED中的M代表可以使用的數(shù)字位數(shù),D則代表小數(shù)點后的小數(shù)位數(shù)Unsigned(無)代表不允許使用負數(shù)Float的取值范圍為-3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38DOUBLE(M,D) UNSIGNED中的M代表可以使用的數(shù)字位數(shù),D則代表小數(shù)點后的小數(shù)位數(shù)Double的取值范圍對比float要大,-1.7976931348623157E+308 to - 2.2250738585072014E-308, 0, a
6、nd 2.2250738585072014E-308 to1.7976931348623157E+308在節(jié)同樣范圍的值時,通常比decimal使用更少的空間,float使用4個字,double使用8個字節(jié)。01數(shù)據(jù)類型之浮點類型create table temp2(id float(10,2),id2 double(10,2),id3 decimal(10,2);inserto temp2 values(1234567.21, 1234567.21,1234567.21),(9876543.21,9876543.12, 9876543.12);Query OK, 2 rows affecte
7、d (0.00 sec)Records: 2 Duplicates: 0 Warnings: 0 +select * from temp2;+| id| id2| id3| +| 1234567.25 | 1234567.21 | 1234567.21 | 9876543.00 | 9876543.12 | 9876543.12 | +012 rows in set (0.00 sec)數(shù)據(jù)類型之bit類型Bit數(shù)據(jù)類型用來BIT(M)代表可以bit值M個bit,M的取值范圍為1到64如果手工指定bit值,則可以使用bvalue格式,比如b111和b10000000分別代表7和128除非特殊情
8、況,否則盡量不要使用這個類型01數(shù)據(jù)類型之日期時間類型日期時間類型包括date,time,datetime,timestamp和year,用來指定不同范圍的日期或時間值Date類型用來表示僅日期,為1000-01-01到9999-12-31默認的日期格式為yyyy-mm-dd,取值范圍Datetime類型用來表示日期和時間,默認的格式為yyyy-mm-dd hh:mi:ss,取值范圍為1000-01-01 00:00:00到9999-12-31 23:59:59Timestamp類型也用來表示日期和時間,其取值范圍為1970-01-01 00:00:01到 2038-01-19 03:14:0
9、7Datetime和timestamp兩個類型都可以保存到微妙級別,即6位毫秒微妙精度,即1000-01-01 00:00:00.000000到9999-12-31 23:59:59.999999和1970-01-01 00:00:01.000000到2038-01-19 03:14:07.999999的date,datetime,timestamp值將被轉(zhuǎn)換成0值,0000-00-00或者0000-00-00 00:00:0001數(shù)據(jù)類型之日期時間類型Time類型用來僅表示時間,默認格式為HH:MM:SS,其取值范圍為-838:59:59到838:59:59,小時字段可以超過24是因為tim
10、e類型不光代表小時,也可以代表持續(xù)時長中的小時Time類型也可以包含6位的毫秒微秒精度,其取值范圍為- 838:59:59.000000到838:59:59.000000Year類型用來僅表示年份, 1901到2155,和0000默認格式為YYYY,其取值范圍為針對的year數(shù)據(jù),則直接轉(zhuǎn)化為000001數(shù)據(jù)類型之日期時間類型Timestamp和datetime日期時間類型可以被自動初始化和更新為當前的日期時間數(shù)據(jù),當你默認指定current timestamp為默認值,或者指定此數(shù)據(jù)列為自動更新時指定默認值是指當值新的數(shù)據(jù)而該列沒有顯視指定數(shù)值時,則當前日期時間指定自動更新是指當行中的其他列
11、被更新時,則此列被自動更新為當前日期時間值CREATE TABLE t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);CREATE TABLE t1 (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP);01數(shù)據(jù)類型之日期時間類型create table temp3
12、(idtamp);,tstamp datetime,tstamp2 datetime,tstamp3 timestamp,tstamp4Query OK, 0 rows affected (0.01 sec)inserto temp3(id) values(1);Query OK, 1 row affected (0.77 sec)inserto temp3(id) values(2);Query OK, 1 row affected (0.00 sec)select * from temp3;+| id+| tstamp | tstamp2 | tstamp3| tstamp4|+| NUL
13、L| NULL| NULL| NULL| 2017-05-12 23:48:47 | 0000-00-00 00:00:00 | 2017-05-12 23:48:51 | 0000-00-00 00:00:00 |01+-+-+-+-+-+數(shù)據(jù)類型之日期時間類型create table temp4(id,tstamp datetime default current_timestamp,tstamp2 datetimelt current_timestamp,tst mp3 timestamp,tstamp4 timestamp default current_timestamp)Query
14、 OK, 0 rows affected (0.01 sec)inserto temp4(id) values(1);Query OK, 1 row affected (0.00 sec)inserto temp4(id) values(2);Query OK, 1 row affected (0.00 sec)select * from temp4;+| id+| tstamp| tstamp2| tstamp3+| tstamp4|+|1 | 2017-05-12 23:51:42 | 2017-05-12 23:51:42 | 2017-05-12 23:51:42 | 2017-05-
15、12 23:51:42 |2 | 2017-05-12 23:51:44 | 2017-05-12 23:51:44 | 2017-05-12 23:51:44 | 2017-05-12 23:51:44 |01+數(shù)據(jù)類型之日期時間類型create table temp4(id,tstamp datetime default current_timestamp on update current_timestamp,tstamp2 datetime defaultnt_timestamp ,tstamp3 testamp,tstamp4 timestamp default current_ti
16、mestamp on update current_timestamp);inserto temp4(id) values(1);select * from temp4;+-+| id| tstamp| tstamp2| tstamp3| tstamp4|+|+-+1 | 2017-05-12 23:55:11 | 2017-05-12 23:55:11 | 2017-05-12 23:55:11 | 2017-05-12 23:55:11 |+-+update temp4 set id=2;select * from temp4;+-+| id| tstamp| tstamp2| tstam
17、p3| tstamp4|+|+-+2 | 2017-05-12 23:55:27 | 2017-05-12 23:55:11 | 2017-05-12 23:55:27 | 2017-05-12 23:55:27 |+-+update temp4 set id=3;select * from temp4;+-+| id| tstamp| tstamp2| tstamp3| tstamp4|+-+|3 | 2017-05-12 23:55:46 | 2017-05-12 23:55:11 | 2017-05-12 23:55:46 | 2017-05-12 23:55:46 |1 row in
18、set (0.00 sec)01數(shù)據(jù)類型之日期時間類型當在time,timestamp,datetime中指定含有毫秒微秒數(shù)值時,則用type_name(fsp)來表達,其中fsp可以取0到6之間的數(shù)值CREATE TABLE t1 (t TIME(3), dt DATETIME(6);CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );Query OK, 0 rows affected (0.33 sec)INSERTO fractest VALUES(17:51:04.777, 2014-09-08 17
19、:51:04.777, 2014-09-08 17:51:04.777);Query OK, 1 row affected (0.03 sec)SELECT * FROM fractest;+| c1| c2| c3|+| 17:51:04.78 | 2014-09-08 17:51:04.78 | 2014-09-08 17:51:04.78 |+011 row in set (0.00 sec)數(shù)據(jù)類型之字符類型字符類型包含char, varchar, binary, varbinary, blob, text, enum和setChar和varchar可以通過char(M)和varcha
20、r(M)指定可以的最大字符數(shù),比如char(30)表示可以最長30個字符Char類型的長度一旦指定就固定了,其范圍可以是0到255,當被時,未達到指定長度的則在值右邊填充空格,而獲取數(shù)據(jù)時則會把右側(cè)的空格去掉Varchar類型是變長的類型,其范圍可以是0到65535,當達到指定長度則不填充空格是未01數(shù)據(jù)類型之字符類型Varchar類型用來可變長字符串,是最常見的字符串數(shù)據(jù)類型,它比定長類型更節(jié)省空間,因為它僅使用必要的空間。另外varchar需要使用1或2個額外字節(jié)字符串的長度,如果列的最大長度小于等于255字節(jié)時,需要1個字節(jié),否則需要2個字節(jié)。比如采用Latin1字符集,varchar(
21、10)的列需要11個字節(jié)的空間,而varchar(1000)列需要1002個字節(jié)的空間。varchar節(jié)省了空間,所以對性能也有幫助。但由于行是變長的,在update時可能使行變得比原來更長,這就導(dǎo)致需要做額外的工作。如果一行占用的空間增長,并且物理數(shù)據(jù)頁內(nèi)沒有空間時,MyISAM會將行拆成不同的片段,InnoDB需要分列頁來講行放到數(shù)據(jù)頁里。01數(shù)據(jù)類型之字符類型char類型是定長,詢char值時,總是根據(jù)定義的字符串長度分配足夠的空間。當查會刪除所有的末尾空格char適合很短的字符串,或者所有值都接近同一個長度。對于經(jīng)常變更的數(shù)據(jù),char也比varchar更好,因為定長的char類型不容
22、易產(chǎn)生碎片。而且對非常短的字符串,char不需要一個額外的字節(jié)長度01數(shù)據(jù)類型之字符類型Char類型值右邊的空格會被自動剔除,而varchar類型則不會CREATE TABLE vc (v VARCHAR(4), c CHAR(4);Query OK, 0 rows affected (0.01 sec)INSERTO vc VALUES (ab , ab );Query OK, 1 row affected (0.00 sec)SELECT CONCAT(, v, ), CONCAT(, c, ) FROM vc;+| CONCAT(, v, ) | CONCAT(, c, ) |+| (a
23、b)| (ab)|+011 row in set (0.06 sec)數(shù)據(jù)類型之二進制類型Binary和varbinary類型和char/varchar類似,只不過是CREATE TABLE t (c BINARY(3);Query OK, 0 rows affected (0.01 sec)二進制字符INSERTO t SET c = a;Query OK, 1 row affected (0.01 sec)SELECT HEX(c), c = a, c = a00 from t;+| HEX(c) | c = a | c = a00 |+| 610000 |0 |1 |+011 row i
24、n set (0.09 sec)數(shù)據(jù)類型之大數(shù)據(jù)類型Blob和text類型被用來大量的數(shù)據(jù)Blob是用來二進制的大量數(shù)據(jù),其有四種類型,tinyblob、blob、mediumblob、longblob四種的區(qū)別是能的數(shù)據(jù)長度有所不同Text是用來字符型的大量數(shù)據(jù),其有四種類型, tinytext、text、mediumtext、longtext四種的區(qū)別是能的數(shù)據(jù)長度有所不同Blob和text的列字段不能含有默認值01TINYTEXT256 bytesTEXT65,535 bytes64kbMEDIUMTEXT16,777,215 bytes16MBLONGTEXT4,294,967,295
25、 bytes4GB數(shù)據(jù)類型之枚舉類型Enum枚舉類型是字符串類型,其值是從事先指定的一系列值中選出,適用在某列的取值范圍已經(jīng)固定主要好處為表的.frm文件在此類數(shù)據(jù)時,直接轉(zhuǎn)化成數(shù)字而不是字符串,可以節(jié)省空間,并且在“數(shù)字-字符串”之間的對應(yīng)關(guān)系CREATE TABLE shirts (name VARCHAR(40),size ENUM(x-small, small, medium, large, x-large);INSERTO shirts (name, size) VALUES (dress shirt,large), (t-shirt,medium),(polo shirt,smal
26、l);SELECT name, size FROM shirts WHERE size = medium;+| name+| size|+| t-shirt | medium |+UPDATE shirts SET size = small WHERE size = large;COMMIT;01數(shù)據(jù)類型之枚舉類型select size+0 from shirts;另外枚舉類型的排序規(guī)則是按照select size from shirts order by size;順序進行而不是按照值本身排序的select * from shirts order by size;+-+-+| name| s
27、ize|+| polo shirt | small | t-shirt| medium | dress shirt | large |如果想要按照一般的排序規(guī)則進行排序,需要使用field()函數(shù)顯示指定排序規(guī)則select size from shirts order by field(size,large,medium,small)枚舉類型字段的取值的增加必須通過alter table命令alter table shirts modify size ENUM(x-small, small, medium, large, x-large,xx-large);01數(shù)據(jù)類型之枚舉類型Enum枚舉
28、類型最多可以有65535個值當而數(shù)字到枚舉類型字段時,數(shù)字會被當做枚舉值的第幾個值numbers ENUM(0,1,2)INSERTO t (numbers) VALUES(2),(2),(3);SELECT * FROM t;+| numbers |+| 1| 2| 2|+-+01數(shù)據(jù)類型之枚舉類型枚舉類型中的空串和NULL值當一個的值到枚舉字段時,則會報錯如果枚舉字段允許NULL,則NULL值為此枚舉類型的默認值inserto shirts values(abc,smal);ERROR 1265 (01000): Daruncated for column size at row 101數(shù)
29、據(jù)類型之集合類型Set集合類型是字符類型,可以含有0個或多個值,其中的每個值都需要是在創(chuàng)建字段時指定的集合中比如一個字段被指定為SET(one, two) not null可以含有以下四種值onetwoone,twoSet集合最大可以有255個值在set集合時,同樣也是為數(shù)字類型01數(shù)據(jù)類型之集合類型當一個數(shù)字到set集合字段時,就會按照二進制計算值SET(a,b,c,d)當該列9這個數(shù)字時,則轉(zhuǎn)化為二進制的1001,即轉(zhuǎn)化為a,d值Set集合列中各值的順序無關(guān)緊要,且一個值如果出現(xiàn)多次也會被忽略CREATE TABLE myset (col SET(a, b, c, d);INSERTO m
30、yset (col) VALUES- (a,d), (d,a), (a,d,a), (a,d,d), (d,a,d);Query OK, 5 rows affected (0.01 sec)Records: 5 Duplicates: 0 Warnings: 0SELECT col FROM myset;+-+| col |+-+| a,d| a,d| a,d| a,d| a,d|01+-+5 rows in set (0.04 sec)數(shù)據(jù)類型之如何選擇支持的數(shù)據(jù)類型很多,選擇正確的數(shù)據(jù)類型對獲得高性能更小的通常更好盡量使用可以正確數(shù)據(jù)的最小數(shù)據(jù)類型。更小的數(shù)據(jù)類型通常更快,因為它們占用更小
31、的磁盤、內(nèi)存和CPU緩存,并且處理時需要的CPU時間也更少比如如果知道某個數(shù)字列的簡單就好值在0200之間,就應(yīng)該選取tiny類型簡單的數(shù)據(jù)類型操作通常需要更少的CPU周期。例如整型比字符操作代價更低,因為字符集和排序規(guī)則使得字符比較比整型比較更復(fù)雜盡量避免NULL通常情況下最好指定列為NOT NULL。因為如果查詢中包含可為NULL的列,對更難優(yōu)化,因為可為NULL的列使得索引、索引統(tǒng)計和值比較都更為復(fù)雜。當可來說ULL的列被索引時,每個索引需要一個額外的字節(jié),所以會使用的空間01數(shù)據(jù)類型之設(shè)置默認值Default默認值用來指定一個列的默認值,但不能指定函數(shù)或表達式作為默認值,比如now()
32、和current_date,但唯一的例外是可以指定current_timestamp作為timestamp和datetime列的默認值Blob,text列不能指定默認值如果一個列沒有顯視指定default默認值,則依照以下規(guī)則如果該列允許null值,則默認值為null01自增長類型字段整型和浮點型字段可以被指定為自增長類型字段,意味著當行數(shù)據(jù)時這列為NULL時,則按照此列最大值+1的方式數(shù)據(jù)獲取后的自增長列的值,可以用LAST_INSERT_ID()函數(shù)獲取一個表中只能有一個自增長字段,且不能含有默認值自增長字段的數(shù)值從1開始遞增,且不能CREATE TABLE animals (負值id M
33、EDIUMNOT NULL AUTO_INCREMENT,name CHAR(30) NOT NULL,PRIMARY KEY (id);INSERTO animals (name) VALUES(dog),(cat),(penguin),(lax),(whale),(ostrich);01SELECT * FROM animals;自增長類型字段 +| id | name| +|+| dog| cat|3 | penguin |4 | lax|5 | whale|6 | ostrich | +01自增長類型字段當你顯視的一個數(shù)值到自增長字段時,則下一個是表中所有值的最大值+1設(shè)置字段的aut
34、o_increment屬性,可以有兩種方法Create table的時候指定Alter table的時候指定:ALTER TABLE tbl AUTO_INCREMENT = 100;針對Myisam引擎,auto_increment屬性可以添加到多列鍵值的第二列上,則自增列的值計算是根據(jù)第一個列分組計算得出CREATE TABLE animals (grp ENUM(fish,mammal,bird) NOT NULL,id MEDIUMNOT NULL AUTO_INCREMENT,name CHAR(30) NOT NULL,PRIMARY KEY (gr) ENGINE=MyISAM;
35、)INSERTO animals (grp,name) VALUES(mammal,dog),(mammal,cat),(bird,penguin),(fish,lax),(mammal,whale),(bird,ostrich);01SELECT * FROM animals ORDER BY gr;自增長類型字段+| grp| id | name|+| fish| 1 | lax| mammal | mammal | mammal | dog| cat|3 | whale| bird| bird| penguin | ostrich |+01引擎通過執(zhí)行show engines命令查看中支
36、持哪些引擎SHOW ENGINESG* 1. row * Engine: PERFORMANCE_SCHEMASupport: YESComment: PerformanchemaTranions: NOXA: NOSavepos: NO* 2. row *Engine: InnoDB Support: DEFAULTComment: Supports tranions, row-level locking, and foreign keysTranions: YESXA: YESSavepo.s: YES* 5. row *Engine: MyISAM Support: YESComment
37、: MyISAM storage engineTranions: NOXA: NO01Savepo.s: NO引擎引擎屬性對比01引擎設(shè)置表的引擎的方法在擎在f配置文件中設(shè)置default-storage-engine參數(shù)表示設(shè)置默認引的連接上設(shè)置當前連接的默認SET default_storage_engine=NDBCLUSTER;引擎在創(chuàng)建表的時候通過engine=語句指定該表的引擎CREATE TABLE t1 (i) ENGINE = INNODB;- Simple table definitions can be switched from one to another.CREAT
38、E TABLE t2 (iCREATE TABLE t3 (i) ENGINE = CSV;) ENGINE = MEMORY;在表創(chuàng)建之后通過alter語句修改表的ALTER TABLE t ENGINE = InnoDB;引擎01引擎之InnoDB引擎InnoDB是目前版本默認的引擎,也是使用的引擎,是集高可靠性和高性能于一身的引擎。在5.7版本中,除非在配置文件中顯視指定default storage engine或者創(chuàng)建表時顯視使用engine=語句指定其它的InnoDB引擎,否則默認都是使用InnoDB引擎的優(yōu)勢在于DML語句支持事務(wù)功能,保證ACID特性行級鎖的使用保證了高并發(fā)的屬
39、性InnoDB對有主鍵的表會依據(jù)主鍵優(yōu)化查詢性能,也稱聚簇索引,將所有數(shù)據(jù)在聚簇索引上以減少對主鍵查詢的IO消耗為保證數(shù)據(jù)的一致性,InnoDB還支持外鍵屬性,確保有外鍵約束的表之間不會有不一致的數(shù)據(jù)當服務(wù)器硬件或者軟件故障導(dǎo)致重啟后,InnoDB會自動識別已經(jīng)在故障之前提交的數(shù)據(jù),并回退所有故障時未提交的數(shù)據(jù),最大限度的保護數(shù)據(jù)不會丟失(crash recovery)01引擎之InnoDBInnoDB引擎的屬性01引擎之MyISAMMyISAM引擎是老版本的默認引擎,由于其表級鎖的特性,所以限制了其在讀寫操作時的性能,常用在只讀表上或者讀操作占絕大多數(shù)的表上,比如一些web應(yīng)用和數(shù)據(jù)倉庫相關(guān)
40、表每個MyISAM表都會在磁盤上生成三個文件,表名和文件名相同但后綴不同,.frm文件信息,.MYI文件表的結(jié)構(gòu)信息,.MYD文件表的索引信息表的數(shù)據(jù)01引擎之Memory引擎將所有數(shù)據(jù)在內(nèi)存中以便加快對某些不重要數(shù)據(jù)的訪Memory問速度此引擎的使用范圍已經(jīng)變小,因為InnoDB已經(jīng)提供了數(shù)據(jù)緩存區(qū)以便對將經(jīng)常的數(shù)據(jù)緩存在內(nèi)存中當重啟時,Memory表中的數(shù)據(jù)會丟失,但表結(jié)構(gòu)還在Memory只適用在只讀表或者讀操作占絕大多數(shù)的情況,因為對表的寫操作也會導(dǎo)致表鎖,大大限制了并發(fā)性Memory表創(chuàng)建之后,在磁盤文件會生成一個相同表名的文件,后綴為.frm,僅表結(jié)構(gòu)而不表數(shù)據(jù)CREATE TABL
41、E test ENGINE=MEMORYSELECT ip,SUM(downloads) AS down FROM log_table GROUP BY ip;SELECT COUNT(ip),AVG(down) FROM test;DROP TABLE test;-01引擎之CSV引擎下的表對應(yīng)了文本文件,其中的數(shù)據(jù)用逗號隔開,csv表可用來以csv格式導(dǎo)入和導(dǎo)出表Csv當創(chuàng)建一個csv表時,磁盤會生成三個以表名為名字的文件,.frm表的結(jié)構(gòu)信息,而.CSV文件用來以逗號隔開的數(shù)據(jù)信息,.CSM文件用來CREATE TABLE test (i- ENGINE = CSV;表的元數(shù)據(jù),包括表的
42、狀態(tài)和有多少行數(shù)據(jù)信息NOT NULL, c CHAR(10) NOT NULL)Query OK, 0 rows affected (0.12 sec)INSERTO test VALUES(1,record one),(2,record two);Query OK, 2 rows affected (0.00 sec)Records: 2 Duplicates: 0 Warnings: 0SELECT * FROM test;+| i+| c|+|+| record one | record two |+012 rows in set (0.00 sec)引擎之ARCHIVEArchive
43、引擎表用來大量未加索引的歷史歸檔數(shù)據(jù)archive表會在磁盤創(chuàng)建兩個文件,.frm文件用來表結(jié)構(gòu)信息,.ARZ文件用來歷史歸檔數(shù)據(jù)Archive表支持insert, replace和select語句,但不支持delete和update語句Archive表支持行級鎖Archive支持auto_inent列,且其列上可以包含一個索引,但在其他字段上不能創(chuàng)建索引Archive不支持對auto_inent列一個小于當前最大值的數(shù)據(jù)Archive引擎會用zlib來壓縮數(shù)據(jù)01引擎之ARCHIVE01引擎之BlackholeBlackhole引擎用來接收表請求,但不數(shù)據(jù),所以查詢表數(shù)據(jù)總是返回空,通常用在
44、主從的情況下當主庫不想保留數(shù)據(jù)而從庫通過語句執(zhí)行而保留數(shù)據(jù)的情況Blackhole表在磁盤會創(chuàng)建一個文件,.frm文件用來表結(jié)構(gòu)CREATE TABLE test(i, c CHAR(10) ENGINE = BLACKHOLE;Query OK, 0 rows affected (0.03 sec)O test VALUES(1,record one),(2,record two);Query OK, 2 rows affected (0.00 sec)Records: 2 Duplicates: 0 Warnings: 0SELECT * FROM test;Empty set (0.00
45、 sec)01INSERT引擎之Merge引擎可以將一批字段相同,索引相同且順序相同的MyISAM表在邏輯上看Merge做是同一個Merge表在磁盤上創(chuàng)建兩個文件,.frm文件保存表的結(jié)構(gòu)信息,.MRG文件包含所有被視作同一個表的MyISAM表Merge表支持select,delete,update,insert語句執(zhí)行創(chuàng)建merge表時需要執(zhí)行union子句,用來將指定的MyISAM結(jié)合起來,insert_method選項用來指定語句是將數(shù)據(jù)到第一個表還是最后一個表LAST中,或者不指定或NO代表不允許CREATE TABLE t1 (-aNOT NULL AUTO_INCREMENT PR
46、IMARY KEY,message CHAR(20) ENGINE=MyISAM;CREATE TABLE t2 (-aNOT NULL AUTO_INCREMENT PRIMARY KEY,message CHAR(20) ENGINE=MyISAM;INSERTINSERTO t1 (message) VALUES (Testing),(table),(t1);O t2 (message) VALUES (Testing),(table),(t2);CREATE TABLE total (-aNOT NULL AUTO_INCREMENT,message CHAR(20), INDEX(a
47、)ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;01引擎之MergeSELECT * FROM total;+| a | message |+| 1 | Testing | 2 | table| 3 | t1| 1 | Testing | 2 | table| 3 | t2|+01引擎之Federated引擎提供了從一個實例連接其它實例上數(shù)據(jù)的能力Federated引擎默認是disable狀態(tài),如果要開啟,則需要在啟動時使Federated用federated選項CREATE TABLE federated_table (idname other(
48、20) NOT NULL AUTO_INCREMENT,VARCHAR(32) NOT NULL DEFAULT ,(20) NOT NULL DEFAULT 0,PRIMARY KEY (id),INDEX name (name), INDEX other_key (other)ENGINE=FEDERATEDDEFAULT CHARSET=latin101CONNECTION=:/fed_userremote_host:9306/federated/test_table;引擎之FederatedCREATE SERVER fedlinkFOREIGN DATA WRAPPEROPTIONS
49、 (USER fed_user, HOST remote_host, PORT 9306, DATABASE federated);CREATE TABLE test_table (idname other(20) NOT NULL AUTO_INCREMENT,VARCHAR(32) NOT NULL DEFAULT ,(20) NOT NULL DEFAULT 0,PRIMARY KEY (id),INDEX name (name),INDEX other_key (other)ENGINE=FEDERATED DEFAULT CHARSET=latin1CONNECTION=fedlin
50、k/test_table;01引擎之ExampleExample引擎只存在于源碼中,只針對開發(fā)者,對實際的數(shù)據(jù)庫使用者沒有太大的意義Example表只保留表結(jié)構(gòu),本身不保存數(shù)據(jù)CREATE TABLE test (i) ENGINE = EXAMPLE;Query OK, 0 rows affected (0.78 sec)INSERTO test VALUES(1),(2),(3);ERROR 1031 (HY000): Table storage engine for test doesnt ?e this optionSELECT * FROM test;Empty set (0.31
51、sec)01引擎之NDBNDB引擎在Cluster軟件中,是自己推出的提高可用性和可靠性的集群軟件01數(shù)據(jù)庫設(shè)計方法之E-R模型E-R模型在數(shù)據(jù)庫概念設(shè)計階段廣泛采用E-R模型的成分是實體集,屬性和聯(lián)系集實體是把具有屬性、性質(zhì)和特征相同的實體,用所有實體名和他的屬性名稱的來用抽象的形式描述同種類的實體;一般實體用矩形符號表示,矩形框內(nèi)標注實體的名稱屬性是實體特有的一些特性,一個實體有包含有許多個屬性來進行描述。用橢圓形的符號來表示,用無向直線將屬性的橢圓和其相對應(yīng)的實體圖形串聯(lián)起來聯(lián)系是ER模型中的聯(lián)系是用來反映實體內(nèi)部和實體之間的屬性關(guān)系。用菱形符號表示,在菱形框內(nèi)標注聯(lián)系的名稱,然后使用無
52、向直線將有關(guān)系的實體屬性串聯(lián)起來,還需要在無向直線上標出實體和聯(lián)系的類型(1 : 1,1 : n或m : n)01數(shù)據(jù)庫設(shè)計方法之E-R模型例如系、學(xué)生和課程的聯(lián)系的E-R模型系、學(xué)生和課程作為實體集;一個系有多個學(xué)生,而一個學(xué)生僅屬于一個系,所以系和學(xué)生之間是一對多的聯(lián)系;一個學(xué)生可以選修多門課程,而一門課程有多個學(xué)生選修,所以學(xué)生和課程之間是多對多的聯(lián)系E-R模型的設(shè)計也要遵循三范式的要求01數(shù)據(jù)庫設(shè)計方法之第三范式第三范式是數(shù)據(jù)庫邏輯設(shè)計階段的有效方法第一范式(1NF):表示每個屬性都不可分,是數(shù)據(jù)庫設(shè)計的基本要求僅符合第一范式存在數(shù)據(jù)冗余過大,刪除和修改異常的問題01數(shù)據(jù)庫設(shè)計方法之第
53、三范式假如學(xué)校新建了一個系,但是暫時還沒有招收任何學(xué)生(比如3月份就新建了,但要等到8月份才招生),那么是無法將系名與系 的數(shù)據(jù)單獨地添加到數(shù)據(jù)表中去的(注) 異常假如將某個系中所有學(xué)生相關(guān)的 都刪除,那么所有系與系 的數(shù)據(jù)也就隨之 了(一個系所有學(xué)生都沒有了,并不表示這個系就沒有了)。刪除異常假如 轉(zhuǎn)系到法律系,那么為了保證數(shù)據(jù)庫中數(shù)據(jù)的一致性,需要修改三條 中系與系 的數(shù)據(jù)。修改異常第二范式(2NF):在第一范式的基礎(chǔ)上限制一個表只能表達一個實體第三范式(3NF):在第二范式的基礎(chǔ)上,表中的每列都和主鍵有直接關(guān)系,而不存在傳遞性依賴01數(shù)據(jù)庫設(shè)計方法之第三范式01數(shù)據(jù)庫設(shè)計方法之第三范式符
54、合3NF要求的數(shù)據(jù)庫設(shè)計,基本上解決了數(shù)據(jù)冗余過大,異常,修改異常,刪除異常的問題。當然,在實際中,往往為了性能上或者應(yīng)對擴展的需要,經(jīng)常做到2NF或者1NF,但是作為數(shù)據(jù)庫設(shè)計,至少應(yīng)該知道,3NF的要求是怎樣的范式的優(yōu)勢在于:當數(shù)據(jù)較好的范式化時,就只有很少或者沒有重復(fù)數(shù)據(jù),所以只需要修改更少的數(shù)據(jù),也就意味著更新操作更快范式化的表通常更小,可以更好地放在內(nèi)存里,所以執(zhí)行操作會更快很少有多余的數(shù)據(jù)意味著檢索列表數(shù)據(jù)時更少需要distinct或者group by語句范式化的缺點在于通常需要表關(guān)聯(lián),有的時候會顯得代價昂貴01數(shù)據(jù)庫設(shè)計方法之第三范式事實上在是否對每個應(yīng)用場景使用第三范式設(shè)計表結(jié)
55、構(gòu)不是固定的,要具體問題具體分析,實際情況中經(jīng)?;旌鲜褂帽热绨凑盏谌妒街粫趖eacher表中常會碰到查詢課程信息和對應(yīng)老師老師的字段,但如果經(jīng)的語句時,就可以考慮將老師也 詢。在course表中一份,以便在查詢時不再需要兩個表關(guān)聯(lián)查當然還要評估老師是否會經(jīng)常變化,如果經(jīng)常變化那更新兩個表的代價也比較大,所以要綜合評估另外也有排序的需要,當子表中的字段要依賴父表的信息排序時,關(guān)聯(lián)排序往往代價很大,可以考慮冗余排序字段到子表并建立索引。當比如要經(jīng)常計算老師的課程數(shù)時,可以考慮將課程數(shù)冗余到老師表里,并在課程表更新時同時更新老師表里的該字段01數(shù)據(jù)庫常用設(shè)計工具之er Designer 是Sybase公司的CASE工具集,使用它可以方便地對管理信息系統(tǒng)進行分析設(shè)計,他幾乎包括了數(shù)據(jù)庫模型設(shè)計的全過程。利用er Designer可以制作數(shù)據(jù)流程圖、概念數(shù)據(jù)模型、物理數(shù)據(jù)模型,還可以為數(shù)據(jù)倉庫制作結(jié)構(gòu)模型,也能對團隊設(shè)計模型進行控制。er designer是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit3 It's Too Expensive(說課稿)-2024-2025學(xué)年北師大版(一起)英語四年級上冊001
- 2025【各行各業(yè)合同協(xié)議模板】【各行各業(yè)合同協(xié)議模板】商鋪轉(zhuǎn)讓協(xié)議
- 2025常用版工程工程合同樣式
- 2023八年級英語下冊 Module 9 Friendship Unit 1 Could I ask if you've mentioned this to her第二課時說課稿 (新版)外研版
- 2025墻體廣告制作發(fā)布合同
- 2025國際貿(mào)易合同樣本參考
- Unit 3 My weekend plan Part A Let's talk Let's learn大單元整體說課稿表格式-2024-2025學(xué)年人教PEP版英語六年級上冊
- 9 生活離不開規(guī)則說課稿-2023-2024學(xué)年道德與法治三年級下冊統(tǒng)編版
- 3 《百合花》 (說課稿)-2024-2025學(xué)年高一語文同步說課稿與知識梳理(統(tǒng)編版必修上冊)
- Unit 4 My home PB Let's learn (說課稿)-2024-2025學(xué)年人教PEP版英語四年級上冊
- 銀行內(nèi)部舉報管理規(guī)定
- 平面幾何強化訓(xùn)練題集:初中分冊數(shù)學(xué)練習(xí)題
- 項目獎金分配獎勵制度和方案完整版
- 支氣管鏡試題
- 北京理工大學(xué)應(yīng)用光學(xué)課件第四章
- 陰道鏡幻燈課件
- 現(xiàn)代漢語詞匯學(xué)精選課件
- PCB行業(yè)安全生產(chǎn)常見隱患及防范措施課件
- 上海音樂學(xué)院 樂理試題
- SAP中國客戶名單
- WZCK-20系列微機直流監(jiān)控裝置使用說明書(v1.02)
評論
0/150
提交評論