MySQL自學篇(三),mysql自學
MySQL資料類型介紹
MySQL支援多種資料類型,主要有數值類型、日期類型、字串類型
數值類型
MySQL主要提供的整數類型有:TINYINT/SMALLINT/MEDIUMINT/INT(INTEGER)/BIGINT
整數類型的屬性欄位可以添加AUTO_INCREMENT自增約束條件。
1、MySQL中整數類型
整數類型的取值範圍
2、浮點數類型和定點數類型
MySQL中使用浮點數和定點數表示小數。浮點數類型有兩種,單精確度浮點數(FLOAT)和雙精確度浮點數(DOUBLE)。定點類型只有DECIMAL。浮點類型和定點類型都可以用(M,N)來表示,其中M成為精度,表示總共的位元;N成為標度,表示小數的位元。
不論是定點還是浮點數,如果使用者指定的精度超出精度範圍,則會四捨五入進行處理
範例:
建立表test1,其中欄位x,y,z資料類型依次為FLOAT(5,1)/DOUBLE(5,1)/DECIMAL(5,1)向表中插入資料5.51,5.12,5.123
create table test1
(
x FLOAT(5,1),
y DOUBLE(5,1),
z DECIMAL(5,1)
);
插入資料:
insert into test1 values (5.51,5.12,5.123);
查看資料:
select * from test1;
3、日期與時間類型
MySQL中有多種表示日期的資料類型,主要有:DATETIME,DATE,TIMESTAMP,TIME,YEAR。
A、YEAR
YEAR類型是一個單位元組類型用於表示年,在儲存是只要一個位元組。可以使用各種格式指定YEAR的值
(1)以4位字串或者4位元字格式表示的YEAR,範圍是1901-2155.輸入格式為:‘YYYY’或者YYYY。例如輸入‘2010’或2010
(2)以2位字串格式表示的YEAR,範圍是‘00’——‘99’。‘00’——‘69’範圍的值分別被轉換為2000—2069和1970—1999範圍的YEAR值。插入超過取值範圍的值將被轉換為2000
(3)以2位元字表示的YEAR,範圍1~99.1~69和70~99範圍的值分別被轉換為2001~2069和1970~1999範圍的YEAR值。0將被轉換為0000而不是2000
範例:
建立資料表test2,定義資料類型為YEAR的欄位y,插入2014,‘2014’,‘2166’
Insert into test2 values(2014),(‘2014’),(‘2166’);
B、TIME
TIME類型用在只需要時間資訊的值,在儲存時需要3個位元組。格式為‘HH:MM:SS’。HH表示小時;MM表示分鐘;SS表示秒。使用各種格式指定TI ME值。
(1)採用‘D HH:MM:SS’格式的字串。
也可以使用下面任何一種非嚴格的文法:‘HH:MM:SS’/‘HH:MM’/‘D HH:MM’/‘D HH’/‘SS’。這裡D表示是日,可以去0-34之間的值。插入資料庫時,D被轉換為小時儲存,格式為“D*24+HH”
(2)採用‘HHMMSS’格式的,沒有間隔符的字串或者HHMMSS格式的數值。
範例:
建立test3表,定義資料類型為TIME的欄位t,向其中插入‘11:05:05’,‘23:23’,‘2 10:10’,‘3 02’,‘10’。
insert into test3 values ('11:05:05'),('23:23'),('2 10:10');
C、DATE類型
DATE類型用在僅僅需要日期的時候,沒有時間部分,在儲存時需要3個位元組。日期格式為‘YYYY-MM-DD’
(1)以‘YYYY-MM-DD’或者‘YYYYMMDD’字串格式表示日期。
(2)以‘YY-MM-DD’或者‘YYMMDD’字串表示日期,在這裡YY表示兩位的年。‘00~69’範圍轉換為‘2000~2069’;‘70~99’範圍轉換為‘1970~1999’。
(3)以YY-MM-DD或者YYMMDD格式表示日期。與前面類似,00-69表示2000-2069;70-99轉換為1970-1999
(4)使用CURRENT_DATE或者NOW()插入當前系統日期。
範例:
建立資料表test4,定義資料類型DATE的欄位為d,插入‘YYYY-MM-DD’和‘YYYYMMDD’字串格式的日期
insert into test4 values ('2014-12-11'),(20141211);
插入當前系統時間:
insert into test4 values (current_date),(now());
D、DATETIME
DATETIME類型用在需要同時包含日期和時間的值。在儲存時需要8位元組。日期格式為‘YYYY-MM-DD HH:MM:SS’,在給DATETIME類型的欄位賦值時,可以使用字串類型或數字類型的資料插入。
(1)以‘YYYY-MM-DD HH:MM:SS’或者’YYYYMMDDHHMMSS’字串格式的值,其取值範圍‘1001-01-01 00:00:00’~‘9999-12-3 23:59:59’
(2)以‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字串格式表示日期。
(3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS的數字格式表示日期和時間
範例:
insert into test5 values ('2014-12-11 15:27:12'),('20141211152712'),(20141211152712);
E、TIMESTAMP
TIMESTAMP顯示格式與DATETIME相同,顯示寬度固定在19個字元,日期格式為YYYY-MM-DD HH:MM:SS,儲存時需要4位元組。但是TIMESTAMP列的取值範圍小於DATETIME的取值範圍,為‘1970-01-01 00:00:01’UTC ~‘2038-01-19 03:14:07’UTC。UTC為世界標準時間。
範例:
建立test7,定義資料類型為TIMESTAMP的欄位ts,向表中插入值‘19950101010101’,‘950505050505’,now().
insert into test6 values ('19950101010101'),(950505050505),(now());
4、字串類型
MySQL中字串類型指的:CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET
1、CHAR和VARCHAR類型
CHAR(M)為固定長度字串,在定義時指定字串列長。儲存時在右側填充空格以達到指定的長度。M表示列長,範圍0~255個字元。例如:CH AR(4)定義了一個固定長度的字串列,其包含的字元個數最大為4.當檢索到CHAR值時,尾部的空空格將被刪除。
VARCHAR(M)是長度可變的字串,M表示列最大長度,M的範圍0~65535。VARCHAR的最大實際長度由最長的行的大小和使用的字元集確定,而其實際佔用的空間為字串的實際長度+1。例如VARCHAR(50)定義了一個最大長度為50的字串。如果插入的字串只有10個字元,則實際儲存的字串為10個字串+一個結束字串。VARCHAR在值儲存和檢索時,尾部的空格仍保留。
2、TEXT類型
TEXT列儲存非二進位字串,如文章,評論等。當儲存或查詢TEXT列的值時,不刪除尾部空格。TEXT類型分為4中:TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT。不同的TEXT類型的儲存空間和資料長度不同。
(1)TINYTEXT最大長度為255字元的TEXT列
(2)TEXT最大長度為65535字元的TEXT列
(3)MEDIUMTEXT最大長度為16777215字元的TEXT列
(4)LONGTEXT最大長度為4294967295(4GB)字元的列
3、ENUM類型
ENUM是一個字串對象,其值為表建立時在列規定中枚舉的一列值。文法格式如下:
欄位名 ENUM(‘值1’,‘值2’...‘值n’)
欄位名指將要定義的欄位,值n指枚舉列表中的第n個值。ENUM類型的欄位在取值時,只能在指定的枚舉列表中取值,而且一次只能取一個。如果建立的成員中有空格時,其尾部的空格將自動被刪除。ENUM值在內部用整數表示,每個枚舉值均有一個索引:列表值所允許的成員值從1開始編號,MySQL儲存的就是這個索引編號。枚舉最多可以有65535個元素。
例如:定義ENUM類型的列(‘first’,’second’,’third’),該列可以取的值和每個值的索引如下:
值 |
索引 |
NULL |
NULL |
“ |
0 |
first |
1 |
second |
2 |
third |
3
|