一、建立資料表的SQL語句模型【弱類型】
CREATETABLE [IF NOT EXISTS]
表名稱(
字段名1列的類型[屬性][索引],
字段名2
列的類型[屬性][索引],
…
字段名n列的類型[屬性][索引],
)[表屬性][表字元集];
【表名稱,字段名需要自己來命名】
【SQL語句并不區分大小寫,但是一個檔案名:在Windows下不區分大小寫,但是在
Linux/UNIX下是區分大小寫的】
【命名規則: 1、有意義(英文,英文組合或英文縮寫)
2、自己定的名稱最好小寫。
3、SQL語句最好大寫。】
1、 CREATETABLE
users(
idINT,
nameCHAR(32)
);
2、 SHOWTABLES;
3、 DESCusers;
4、 SELECT*
FROM users;
二、資料值與列類型
都以空間大小來細分,能夠存下即可!
1、數值型
整型(整數):
非常小整數型 1位元組
-128~127 0~255(無符号)
TINYINIT
較小整數型 2位元組
-32768~32767 SMALLINIT
中等大小整數型 3位元組
0~16777215 MEDIUMIINT
标準整數型 4位元組
-2147483648~2147483647 INT
大整數型 8位元組
BIGINT
【可以添加屬性:UNSIGNED】
浮點型(小數):
FLOAT(M,N)
4位元組
【長度M,保留小數點後N位】
DOUBLE(M,N)
8位元組
【五舍六入】
DECIMAL(M,N)
M+2位元組
【定點數,以字元串形式存儲資料,
更精确的儲存資料,但是效率會有所折扣。】【四舍五入】
【浮點數會存在誤差,是以在對數字敏感的時候,需要用定點數來存儲!】
3、字元型
MySQL支援以單引号與雙引号表示字元串類型。
如“MySQL”與
'MySQL'相同
char(M)
最大255
固定長度字元串
varchar(M)
可變長度字元串
char(4) varchar(4)//
永遠比字元多一個位元組
'' 4 '' 1位元組
'a' 4 'a' 2位元組
'abcd' 4 'abcd' 5位元組
'abcdefg' 4 'abcdefgh' 5位元組
char類型會截取尾部的空格;
示例: CREATETABLE
IF NOT EXISTS tab(v varchar(4),c char(4));
INSERTINTO tab(v,c) VALUES(“ab ”,”ab ”);
SELECTCONCAT(v,”#”),CONCAT(c,”#”) FROM tab;
最佳實踐:
固定長度,推薦使用char類型(可能會浪費一定空間)。
可變長度,推薦使用varchar類型(可能會付出一些性能損耗)
text
文本資料:文章,日志
長度:2^16-1
MEDIUMTEXT
LONGTEXT
blob
二進制資料:照片,電影
MEDIUMBLOB
LONGBLOB
【雖然沒法通過SQL語句将照片,電影,壓縮包等二進制檔案插入到資料庫中,
但是我們可以通過C++/Java等程式設計語言将二進制檔案讀成二進制資料流,然
後儲存到資料庫中】
ENUM
枚舉 1~2位元組
ENUM(“one”,”two”,”three”,”four”)~65535
一次隻能有一個值
SET集合 1,2,3,4,8位元組
SET(“one”,”two”,”three”,”four”)~64
一次可以有多個值,用“,”隔開。
4、日期型
DATE YYYY-MM-DD //如果位數充足,可以不用加‘-’
TIME hh:mm:ss //位數充足,可以忽略‘:’,位數不足,從後面截取
DATETIME YYYY-MM-DDhh:mm:ss
TIMESTAMP YYYYMMDDhhmmss //位數不足時,不可忽略前導0
YEAR YYYY
【建立資料表時,最好不要使用這些時間值,最好使用C++/Java等程式設計語言中的整數來儲存
時間,這樣更友善計算,如C++中的int,PHP中時間戳1970-1-10:0:0】