在本教學中,您將了解MySQL INT
或整數資料型別以及如何在資料庫表設計中使用它。 另外,我們將向您展示如何使用表中整數列的顯示寬度和ZEROFILL
屬性。
在MySQL中,INT
代表整數。整數可以寫成沒有分數的數值,例如,它可以是1
,100
,4
,-10
等,它不能是1.2
,5/3
等。整數可以是零,正和負。
MySQL支援所有標準SQL整數型別INTEGER
、INT
和SMALLINT
。 此外,MySQL提供TINYINT
, MEDIUMINT
,BIGINT
作為標準SQL的擴充套件。
MySQL INT
資料型別可以是有符號或無符號。下表說明了每個整數型別的特性,包括以位元組為單位的儲存,最小值和最大值。
由於整數型別表示精確數位,因此通常將其用作表的主鍵。此外,INT
列可以具有AUTO_INCREMENT
屬性。
當在INT AUTO_INCREMENT
列中插入NULL
值或0
時,列的值將設定為下一個序列值。 請注意,序列值以1
開始。
在AUTO_INCREMENT
列中插入不為NULL
或零的值時,列接受該值。 此外,序列將重置為插入值的下一個值。
我們來看一個使用帶有AUTO_INCREMENT
屬性的整數列的表的例子。
首先,使用以下語句建立一個名為items
的新表,其中整數列為主鍵:
USE testdb;
CREATE TABLE items (
item_id INT AUTO_INCREMENT PRIMARY KEY,
item_text VARCHAR(255)
);
可以在上面的CREATE TABLE語句中使用INT
或INTEGER
,因為它們是可互換的。 每當在items
表中插入一個新行時,item_id
列的值將增加1
。
接下來,以下INSERT語句在items
表中插入三行資料。
INSERT INTO items(item_text)
VALUES('laptop'), ('mouse'),('headphone');
然後,使用以下SELECT語句從items
表查詢資料:
SELECT
*
FROM
items;
之後,插入一個新的行,該行的item_id
列的值要明確指定。
INSERT INTO items(item_id,item_text)
VALUES(10,'Server');
因為item_id
列的當前值為10
,所以序列將重置為11
。如果插入新行,則AUTO_INCREMENT
列將使用11
作為下一個值。
INSERT INTO items(item_text)
VALUES('Router');
最後,再次查詢items
表中的資料,如下結果。
SELECT
*
FROM
items;
請注意,由於自MySQL 5.1版本起,
AUTO_INCREMENT
列只接受正值。AUTO_INCREMENT
列不支援負數值。
MySQL提供了一個擴充套件,允許您指定顯示寬度以及INT
資料型別。顯示寬度包含在INT
關鍵字後面的括號內,例如,INT(5)
指定一個顯示寬度為五位數的INT
。
要注意的是,顯示寬度屬性不能控制列可以儲存的值範圍。顯示寬度屬性通常由應用程式用於格式化整數值。 MySQL將顯示寬度屬性作為返回結果集的後設資料。
除了顯示寬度之外,MySQL還提供了非標準的ZEROFILL
屬性。 在這種情況下,MySQL將空格替換為零。請參考以下範例。
首先,使用以下語句建立一個名為zerofill_tests
的表:
USE testdb;
CREATE TABLE zerofill_tests(
id INT AUTO_INCREMENT PRIMARY KEY,
v1 INT(2) ZEROFILL,
v2 INT(3) ZEROFILL,
v3 INT(5) ZEROFILL
);
其次,在zerofill_tests
表中插入一個新行。
INSERT into zerofill_tests(v1,v2,v3)
VALUES(1,6,9);
第三,從zerofill_tests
表查詢資料。
SELECT
v1, v2, v3
FROM
zerofill_tests;
v1
列的顯示寬度為2
,包括ZEROFILL
,它的值為1
,因此在輸出中看到01
。 MySQL將第一個空格替換為0
。
v2
列具有包含ZEROFILL
的顯示寬度3
。 它的值為6
,因此將看到有00
作為前導零。
v3
列具有包含ZEROFILL
的顯示寬度5
,它的值為9
,因此MySQL在輸出數位的開頭填零為0000
。
請注意,如果對整數列使用
ZEROFILL
屬性,MySQL將自動將一個UNSIGNED
屬性新增到該列。
在本教學中,我們向您展示了如何在表中使用MySQL INT
資料型別,並向您介紹了整數列的顯示寬度和ZEROFILL
屬性。