數據表:數據表由表結構和表內容兩部分組成,先建立表結構,然後才能輸入數據。
數據表結構設計主要包括字段名稱、字段類型、和字段屬性的設置。
在關係數據庫中,爲了確保數據的完整性和一致性,在創建表時除了必須指定字段名稱、字段類型、字段屬性外,還需要使用約束(constraint)、索引(index)、主鍵(primary key)和外鍵(foreign key)等功能屬性。
數據值和列類型(字段的類型):
對MySQL中數據值的分類:有數值型、字符型、日期型和空值等。
MySQL中的列類型有三種:數值類、字符串類和日期/時間類。
數值類的數據列類型
數值分整型和浮點型兩種。
整型中又分爲5種整型數據列類型:
數據列類型 | 存儲空間 | 說明 | 取值範圍 |
TINYINT 男或女 | 1字節 | 非常小的整數 | 帶符號值:-127~127 無符號值:0~255 |
INT 最常用的 | 4字節 | 標準整數 | |
BIGINT | 8字節 | 大整數 | |
SMALLINT 學校人數 | |||
MEDIUMINT |
整型注意事項:
INT(3)、SMALLINT(3)等整型後面的數字不會影響數值的存儲範圍,只會影響顯示
整型後面的數字只有配合零填充的時候纔有實際意義。
整型後面的數字可以省略
浮點型數據列類型:
數據列類型 | 存儲空間 | 說明 | 取值範圍 |
FLOAT | 4或8字節 | 單精度浮點數 | |
DOUBLE (商城) | 8字節 | 雙精度浮點數 | |
DECIMAL (金融、銀行、科學研究) | 自定義 | 以字符串形式表示的浮點數 | 取決於存儲單元字節數 |
字符串類數據列類型
字符串可以用來表示任何一種值,所以它是最基本的類型之一。
我們可以用字符串類型來存儲圖像或聲音之類的二進制數據,也可以存儲用gzip壓縮的數據。但是現在不會把圖片存儲到數據庫中。
MySQL支持以單或雙引號包圍的字符序列。如:“MySQL”,'PHP'。
同PHP程序一樣,MySQL能識別字符串中的轉義序列,轉義序列用反斜槓(\)表示。
字符串列類型:
枚舉:存男或女這樣的漢字或字符串。用的時候直接調用過來,用的很少,一般用tinyint代替,因爲數字更快!
如果成員過多,可以考慮用集合,但是當能用到枚舉和集合的時候就可以考慮換內存級別的數據庫了,如:redius。
字符串類型注意事項:
CHAR和VARCHAR類型的長度範圍都在0~255之間
在使用CHAR和VARCHAR類型時,當我們傳入的實際的值的長度大於指定的長度,字符串會被截取至指定長度
在使用CHAR類型時,如果我們傳入的值的長度小於指定長度,實際長度會使用空格補至指定長度
在使用VARCHAR類型時,如果我們傳入的值的長度小於指定長度,實際長度即爲傳入字符串的長度,不會使用空格填補
CHAR要比VARCHAR效率更高,但是佔用空間較大
日期和時間型數據列類型
日期類型注意事項:
存儲日期時,我們可以使用整型來進行存儲時間戳,這樣做便於我們進行日期的計算
時間戳: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 |