1. 程式人生 > >MySQL基礎(三)

MySQL基礎(三)

資料型別

MySQL的資料型別主要有: (1)數值型別: 整數型別,如 TINYINT(很小的整數,佔1個位元組),SMALLINT(小的整數,佔2個位元組),DEDIUMINT(中等大小的整數,佔3個位元組),INT(普通整數,佔4個位元組),BIGINT(大整數,佔8個位元組)。 浮點小數型別,如 FLOAT(單精度浮點數,佔4個位元組), DOUBLE(雙精度浮點數,佔8個位元組), DECIMAL(定點型別,大小為M+2,M為總共的位數)。 (2)日期/時間型別: 包括:YESR,TIME,DATE,DATETIME,TIMESTAMP。 (3)字串型別: 包括: CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET。字串型別又分為文字字串和二進位制字串。

1. 整數型別的顯示寬度

宣告一個INT型別的欄位:

id INT(11);

該欄位的型別為INT(11),括號中的“11”表示該資料型別指定的顯示寬度,即指定能夠顯示的數值中數字的個數。 注意,顯示寬度和資料型別的取值範圍無關,顯示寬度只是用於指明最大可能顯示的數字個數,並不能限制取值範圍和佔用空間。數值的位數小於指定的寬度時,會由空格填充;如果插入的數值大於指定的寬度,只要該值不超過該型別整數的取值範圍,依然可以插入,而且能夠顯示出了。 在不指定顯示寬度的時候,系統會預設顯示寬度: TINYINT(4), SMALLINT(6), MEDIUMINT(9), INT(11), BIGINT(20)

,括號中為系統預設的顯示寬度。

2. 浮點數型別和定點數型別

浮點數和定點數都可以用(M,N)來表示,其中M稱為精度,表示總共的位數,N稱為標度,表示小數的位數。例如(5,3)表示一共有五位數,其中小數佔3位,如,12.365。 無論是浮點數還是定點數,當用戶指定資料的精度超出精度範圍,就會四捨五入進行處理。例如:宣告如下語句

CREATE TABLE temp1 ( id int primary key auto_increment,x FLOAT(5.1),y DOUBLE(5.1),z DECIMAL(5,1));

向資料表中插入資料

insert into temp1 values(0,1.23,1.69,1.67);

在這裡插入圖片描述 從結果來看,FLOATDOUBLE型別在四捨五入的時候不會發出警告,而DECIMAL的數值在截斷的時候回發出警告,但仍然可以操作。 注意,在不指定精度的情況下,FLOATDOUBLE型別都預設按照實際的精度,而DECIMAL預設為(10,0),即保留整數。如:

insert into temp1 values(0,1.25,1.64,1.03);

在這裡插入圖片描述 注意,在MySQL中,定點數是以字串的形式儲存的,在對精度要求比較高的時候(如貨幣、科學計數等),需要使用DECIMAL型別。 兩個浮點數之間應儘量避免進行比較和減法運算。

3. 日期與時間型別

  1. YEAR YEAR 型別用一個位元組表示年。可以使用以下格式指定YEAR的值。 (1)以4位字串或者4位數字格式表示。例如輸入’1992’或1992. (2)以2位字串格式表示。範圍是’00’~‘99’。‘00’-'69’轉換成2000-2069,‘70’-‘99’轉換成1970-1999.‘0’或‘00’或插入超出取值範圍的值,都將被轉換成2000. (3)以2位數字表示。範圍是1~99.其中1-69,轉換成2001-2069,70-99轉換成1970-1999. 0將被轉換成0000,而不是2000.
  2. TIME 在儲存時需要3個位元組。格式為‘HH:MM:SS’,分別表示時-分-秒。常用的格式為: (1)‘D HH:MM:SS’格式的字串。D表示日,可以使0-34之間的值。在插入資料庫時,D被轉換為小時儲存,格式為‘D-24+HH’。並且小時必須是雙位數,小於10的在十位上補0。例如:‘2 10:10’在插入資料庫後為‘58:10’。 (2)‘HHMMSS’格式的,沒有間隔符的字串,或者‘HHMMSS’格式的數值。 注意,對於沒有冒號的格式,MySQL在解釋的時候假定最右邊的兩位表示秒,依次往左類推。並且解釋的值表示過去了多少時間,而不是當天的時間。例如: ‘1012’或1012在MySQL中解釋為‘00:10:12’(10分12秒),而不是‘10:12:00’(10時12分)。 對於有冒號的格式,MySQL解釋為當天的時間。例如: ‘10:12’被解釋為‘10:12:00’(10時12分)。 (3)‘0’表示‘00:00:00’。對於超出範圍的資料,不會被插入到資料庫中。 (4)獲取系統當前的時間,可使用如下語句:

INSERT INTO table_name VALUES (CURRENT_TIME) | (NOW()); 在這裡插入圖片描述

  1. DATE 僅有日期,沒有時間部分。儲存需要3個位元組。格式為‘YYYY-MM-DD’,分別表示年-月-日。常用的格式如下: (1)‘YYYY-MM-DD’或‘YYYYMMDD’字串表示的日期。範圍是‘1000-01-01’-‘9999-12-3’。 (2)‘YY-MM-DD’或者‘YYMMDD’字串格式。 (3)‘YY-MM-DD’或者‘YYMMDD’數字格式。 (4)插入系統當前日期的語句如下:

INSERT INTO table_name VALUES (CURRENT_DATE | NOW());

在這裡插入圖片描述 4. DATETIME 同時包含日期和時間的資訊。需要8個位元組儲存。格式為:‘YYYY-MM-DD HH:MM:SS’,表示年-月-日 時:分:秒。輸入格式及獲取當前系統時間同TIMEDATE。 5. TIMESTAMP 顯示世界標準時間UTC,顯示格式同DATETIME,顯示寬度為19個字元,格式為 YYYY-MM-DD HH:MM:SS,儲存需要4個位元組,範圍為’1970-01-01 00:00:00’UTC - '2038-01-19 03:14:07’UTC。因此插入資料時要保證合法的取值範圍。 注意DATETIMETIMESTAMP之間的差異: DATETIME在儲存日期資料時,按照實際輸入的格式儲存,即輸入什麼就儲存什麼,與時區無關。 TIMESTAMP儲存日期時要對當前時區進行轉換,檢索時再轉換回當前時區。即查詢時的時區不同,當前顯示的時間也不同。

4. 文字字串型別

文字字串的資料型別常用的有: CHAR(M) 固定長度非二進位制字串 VARCHAR(M) 變長度非二進位制字串 TINYTEXT 非常小的非二進位制字串 TEXT 小的非二進位制字串 MEDIUMTEXT 中等大小的非二進位制字串 LONGTEXT 大的非二進位制字串 ENUM 列舉型別,只能有一個列舉字串值 SET 一個設定,字串物件可以有零個或多個SET成員

  1. CHAR(M) 列長度為M的固定長度的非二進位制字串。在值儲存時,當資料長度小於固定長度時,在右側填充空格以達到指定的長度;在檢索時,當尾部有空格時,會刪除尾部的空格。
  2. VARCHAR(M) 實際佔用的空間為字串的實際長度加1.在值儲存和檢索時,尾部的空格被保留。
  3. TEXT 當儲存或查詢TEXT列的值時,不刪除尾部空格。
  4. ENUM 這是一個字串物件,其值為表建立時在列規定中列舉一列值。語法格式如下:

欄位名 ENUM(‘值1’,‘值2’,…‘值n’)