我們今天來進行建表的基本操作: 首先要建表就要瞭解列類型,因為建表就是聲明列的過程,列聲明完成了,表也就建好了。 mysql中列分為三大類: 一、數值型 數值型又分為整型和浮點型兩種。 先來看整型: tinyint:占據空間:1個位元組;存儲範圍:帶符號數:-2^7(-128)~2^7-1(127), ...
我們今天來進行建表的基本操作:
首先要建表就要瞭解列類型,因為建表就是聲明列的過程,列聲明完成了,表也就建好了。
mysql中列分為三大類:
一、數值型
數值型又分為整型和浮點型兩種。
先來看整型:
tinyint:占據空間:1個位元組;存儲範圍:帶符號數:-2^7(-128)~2^7-1(127),無符號數:0~255
smallint:占據空間:2個位元組;存儲範圍:帶符號數:-2^15(-32768)~2^15-1(32767),無符號數:0~65535
mediumint:占據空間:3個位元組;存儲範圍:帶符號數:-2^23(-8388608)~2^23-1(8388607),無符號數:0~16777215
int:占據空間:4個位元組;存儲範圍:帶符號數:-2^31(-2147483648)~2^31-1(2147483647),無符號數:0~4294967295
bigint:占據空間8個位元組;存儲範圍:帶符號數:-2^63(-9,223,372,036,854,775,808)~2^63-1(9,223,372,036,854,775,807),無符號數:0~18446744073709551615
int 系列聲明時的參數:
unsigned:無符號,在MySQL中聲明int類參數為無符號數,如果不聲明unsigned,則預設為帶符號數。
(M)zerofill M只有和zerofill配合在一起使用才有效果,即指定數據的長度,不夠的話用0填充
例如 我們聲明一個 id int(5)zerofill 一個id2 int(5):
我們給裡面插入同樣的數據:
我們可以看到,同樣是500,id就在前面補兩個0,因為我們指定了它的數據長度是5。
那如果我們插入的數據長度超過了5怎麼辦?
我們可以看到如果我們插入的數據長度超過了我們設定的M值,那麼就按實際長度來插入。
然後我們來看浮點型:
M叫做精度,代表這個小數的總位數,D叫做標度,代表小數點後面的位數。
float(M,D)單精度浮點型,占據空間:4個位元組。
double float(M,D) 雙精度浮點型,占據空間:8個位元組。
浮點型在存儲的時候存的是近似值,還有一種小數類型是定點型,它是把整數部分和小數部分分開存儲的 。
定點型:
decimal(M,D)
我們來看具體的區別:我們聲明一個num float(9,2)和一個num2 decimal(9,2):
然後給num插入1234567.23,給num2插入1234567.25,然後我們來看一下結果:
我們發現,num欄下麵的數字變成了1234567.25。原因就是上面說的float類型存儲時是存的近似值。
所以如果涉及到金融,賬戶等等對數字變化比較敏感的時候需要存小數我們就用decimal。
二、字元串型
Char(M) 是定長類型 例如Char(6)只能存儲6個字元,內容不夠6個字元的在尾部用空格補齊,取出時再把右側所有的空格刪除。
Varchar(M) 是變長類型 例如varchar(20),可存儲0~20個字元長度,但是列內容前有1~2個位元組來標誌該列內容長度。
我們聲明兩個變數,分別是name name2,一個用char,一個用varchar
插入數據,張三後面有個空格,李四後面也有個空格
直接查看的話看不出來大的差別,我們把它和另一個字元連接起來:
我們可以看到張三後面的空格被刪除了。
Text 文本類型,一般用來儲存文章內容,新聞內容等。聲明text列類型時不用給預設值。
Blob 二進位類型,一般用來存儲圖像音頻等二進位信息。Blob在於防止字元集的問題導致信息丟失。比如:一張圖片中有0xff位元組,這個在ASCII字元集中認為非法,在入庫的時候被過濾。使用blob就可以防止信息丟失。
三、日期時間型
Date 日期 存儲年-月-日 存儲範圍是1000-01-01~9999-12-31
Time 時間 存儲時:分:秒 存儲範圍是-838:59:59~838:59:59
Datetime 日期時間類型年-月-日 時:分:秒 範圍是1000-01-01 00:00:00~9999-12-31 23:59:59
Year 年類型 YYYY和YY(不推薦)範圍是1901~2155 還能存一個特殊的0000年
建表的語法不重要,重要的是要學會合理的選擇列類型併為其聲明參數。
建表的語法:
Create table 表名 (
列1 列類型 列參數,
列2 列類型 列參數,
......
列n 列類型 列參數
)engine myisam charset utf8;
最後一句是聲明引擎和字元集的,那個我們會在後面講到。
如果一張表建好了,我們需要增加列怎麼辦?
alter table 表名 add 列名 列類型 列參數
我們就給上面的test2表增加一列:
由於之前沒有salary列,因此增加後原來的行在salary列的值為空。
這是預設增加在最後一列的,我們想在birth後面增加一列怎麼辦?
alter table 表名 add 列名 列類型 列參數 after birth;
我們想在把列增加最前面,該怎麼辦?
alter table 表名 add 列名 列類型 列參數 first;
刪除列:
alter table 表名 drop 列名;
修改列類型:
alter table 表名 modify 列名 新列類型 列參數;
我們看到這張表的結構:star是varchar(20)。
我們給它改成varchar(30):
修改列名:
alter table 表名 change 舊列名 新列名 列類型 列參數;