MySQL數據表的設計

數據表:數據表由表結構和表內容兩部分組成,先建立表結構,然後才能輸入數據。

數據表結構設計主要包括字段名稱字段類型、和字段屬性的設置。

在關係數據庫中,爲了確保數據的完整性和一致性,在創建表時除了必須指定字段名稱、字段類型、字段屬性外,還需要使用約束(constraint)、索引(index)、主鍵(primary key)和外鍵(foreign key)等功能屬性。

數據值和列類型(字段的類型):

對MySQL中數據值的分類:有數值型、字符型、日期型空值等。

MySQL中的列類型有三種:數值類、字符串類日期/時間類

數值類的數據列類型

數值分整型和浮點型兩種。

整型中又分爲5種整型數據列類型

數據列類型存儲空間說明取值範圍
TINYINT
男或女
1字節非常小的整數

帶符號值:-127~127

無符號值:0~255

INT
最常用的
4字節標準整數
BIGINT8字節大整數
SMALLINT
學校人數



MEDIUMINT


整型注意事項:

  • INT(3)、SMALLINT(3)等整型後面的數字不會影響數值的存儲範圍,只會影響顯示

  • 整型後面的數字只有配合零填充的時候纔有實際意義。

  • 整型後面的數字可以省略

浮點型數據列類型:

數據列類型存儲空間說明取值範圍
FLOAT4或8字節單精度浮點數
DOUBLE
(商城)
8字節雙精度浮點數
DECIMAL
(金融、銀行、科學研究)
自定義以字符串形式表示的浮點數取決於存儲單元字節數

字符串類數據列類型

字符串可以用來表示任何一種值,所以它是最基本的類型之一。

我們可以用字符串類型來存儲圖像或聲音之類的二進制數據,也可以存儲用gzip壓縮的數據。但是現在不會把圖片存儲到數據庫中。

MySQL支持以單或雙引號包圍的字符序列。如:“MySQL”,'PHP'。

同PHP程序一樣,MySQL能識別字符串中的轉義序列,轉義序列用反斜槓(\)表示。

字符串列類型:

spacer.gif

枚舉:存男或女這樣的漢字或字符串。用的時候直接調用過來,用的很少,一般用tinyint代替,因爲數字更快!

如果成員過多,可以考慮用集合,但是當能用到枚舉和集合的時候就可以考慮換內存級別的數據庫了,如:redius。


字符串類型注意事項:

  • CHAR和VARCHAR類型的長度範圍都在0~255之間

  • 在使用CHAR和VARCHAR類型時,當我們傳入的實際的值的長度大於指定的長度,字符串會被截取至指定長度

  • 在使用CHAR類型時,如果我們傳入的值的長度小於指定長度,實際長度會使用空格補至指定長度

  • 在使用VARCHAR類型時,如果我們傳入的值的長度小於指定長度,實際長度即爲傳入字符串的長度,不會使用空格填補

  • CHAR要比VARCHAR效率更高,但是佔用空間較大

日期和時間型數據列類型

spacer.gif


日期類型注意事項:

存儲日期時,我們可以使用整型來進行存儲時間戳,這樣做便於我們進行日期的計算

時間戳:1970年1月1日0時0分0秒開始

調用PHP中的time()函數獲取當前的時間戳

<?php
//設置時區
date_default_timezone_set("PRC");

//獲取當前時間
echo time();

//輸出當前時間
echo date('Y-m-d H:i:s',time());

NULL值

NULL值注意事項:

  • NULL意味着“沒有值”或“未知值”

  • 可以測試某個值是否爲NULL

  • 不能對NULL值進行算術計算

  • 對NULL值進行算術運算,其結果還是NULL

  • 0或NULL都意味着假,其餘值都意味着真

數據字段屬性:

UNSIGNED

  • 只能用於設置數值類型,不允許出現負數

  • 最大存儲長度會增加一倍

ZEROFILL

  • 只能用於設置數值類型,在數值之前會自動用0補齊不足的位數

  • 當給一個字段使用ZEROFILL修飾時,該字段自動應用UNSIGNED屬性。

AUTO_INCREMENT

  • 用於設置字段的自動增長屬性,每增加一條記錄,該字段的值會自動加1

NULL和NOT NULL

  • 默認爲NULL,即插入值時沒有在此字段插入值,默認爲NULL值,如果指定了NOT NULL,則必須在插入值時在此字段填入值

DEFAULT

  • 可以通過此屬性來指定一個默認值,如果沒有在此列添加值,那麼默認添加此值

字符集

完整創建表的語句:

create table 表名(

字段名 字段類型(長度) [unsigned] [not null][auto_increment],

字段名 字段類型(長度) [unsigned] [not null default 'xxx'],

....

primary key(id)

)engin=myisam default charset=utf8 collate utf8_general_ci;


表字段操作:

在實際應用中,當發現某個表的結構不滿足要求時,可以用ALTER TABLE語句來修改表的結構,包括增加新的字段、刪除原有的字段、修改列的類型、屬性及索引、表名。

添加字段    alter    table    表名    add    字段名稱    類型    屬性    索引類型。。。[FIRST   |   AFTER 列名]

刪除字段    alter    table    表名    drop    字段名稱;

修改字段    alter    table    表名    modify    字段名稱    類型    屬性;

                  alter    table    表名    change    原字段名稱    新字段名稱    類型    屬性;

修改表名    alter    table    舊錶名    rename    as    新表名

                  alter    table    舊錶名    rename    to    新表名

                  alter    table    舊錶名    rename    新表名

修改字段中,change除了更改類型外,還能更改列名,而modify不能實現這個功能。change更改;modify修改;

如果沒有指定可選的FIRST或AFTER,則在列表尾添加一列,否則在指定列添加新列。


創建索引:

在MySQL中主要有四類索引:主鍵索引、唯一索引、常規索引、全文索引。

主鍵索引:是關係數據庫中最常見的索引類型,主要作用是確定數據表裏一條特定的數據記錄的位置。我們可以在字段後添加PRIMARY KEY來對字段設置爲主鍵索引。

注意:

1.最好爲每張表指定一個主鍵,但不是必須指定。

2.一個表只能指定一個主鍵,而且主鍵的值不能爲空

3.主鍵可以有多個候選索引(例如NOT NULL,AUTO_INCREMENT)

唯一索引與主鍵索引一樣,都可以防止創建重複的值。

但是,不同之處在於,每個數據表中只能有一個主鍵索引,但可以有多個唯一索引。

我們使用關鍵字UNIQUE對字段定義爲唯一索引。


常規索引技術是關係數據查詢中最重要的技術,如果要提升數據庫的性能,索引優化是首先應該考慮的,因爲它能使我們的數據庫得到最大性能方面的提升。

常規索引也存在缺點:

1.多佔用磁盤空間

2.會減慢插入,刪除和修改操作

3.需要按照索引列上排序格式執行

創建索引我們可以使用INDEX和KEY關鍵字隨表一同創建。

創建索引   

create    index    索引名稱    on    數據表名(字段)

create    unique    index    索引名    on    數據表名(字段)

添加一個主鍵索引:     alter    table    數據表名    add    primary    key(列);

添加一個唯一索引:     alter    table    數據表名    add    unique    索引名(字段名);

添加一個常規索引:     alter    table    數據表名    add    index    索引名(字段名);


刪除索引

刪除常規索引:        drop    index    索引名稱    on    數據表名;

刪除常規索引:        alter    table    表名    drop    index    索引名;

刪除唯一索引:        alter    table    表名    drop    index    索引名;

查看索引:show index(es) from 數據表名;

 bbs_user | CREATE TABLE bbs_users1 (

 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

 `username` varchar(20) NOT NULL,

 `sex` tinyint(4) DEFAULT '1',

 `email` varchar(50) DEFAULT NULL,

 `qq` varchar(15) NOT NULL,

 `xingqu` text,

 PRIMARY KEY (`id`),

 UNIQUE KEY `cde` (`username`),

 UNIQUE KEY `aaaa` (`email`),

 KEY `qqin` (`qq`)

 ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 |


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章