
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者賬戶
- MySQL - 解鎖使用者賬戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 清空表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - 插入查詢
- MySQL - 選擇查詢
- MySQL - 更新查詢
- MySQL - 刪除查詢
- MySQL - 替換查詢
- MySQL - 插入忽略
- MySQL - 插入重複鍵更新
- MySQL - 插入到選擇
- MySQL 運算子和子句
- MySQL - Where 子句
- MySQL - Limit 子句
- MySQL - Distinct 子句
- MySQL - Order By 子句
- MySQL - Group By 子句
- MySQL - Having 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - Like 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - Between 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - 內連線
- MySQL - 左連線
- MySQL - 右連線
- MySQL - 交叉連線
- MySQL - 全連線
- MySQL - 自連線
- MySQL - 刪除連線
- MySQL - 更新連線
- MySQL - Union vs Join
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - 插入前觸發器
- MySQL - 插入後觸發器
- MySQL - 更新前觸發器
- MySQL - 更新後觸發器
- MySQL - 刪除前觸發器
- MySQL - 刪除後觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT 資料型別
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式和運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複資料
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - 檢查約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入到資料庫
- MySQL - UUID
- MySQL - 公共表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - Signal
- MySQL - Resignal
- MySQL - 字元集
- MySQL - 校對規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 獲取當前日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - Explain
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - 顯示程序列表
- MySQL - 修改列型別
- MySQL - 重置自動遞增
- MySQL - Coalesce() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - INT 資料型別
MySQL INT 資料型別
MySQL 的INT資料型別用於儲存沒有小數位的整數。
但是,MySQL 提供了各種整數資料型別,例如 TINYINT、SMALLINT、MEDIUMINT 和 BIGINT,以滿足不同範圍的整數的需求。
下表說明了 MySQL 中不同整數型別的特性,包括儲存空間(以位元組為單位)、帶符號和無符號選項的最小值和最大值:
型別 | 儲存空間 (位元組) | 最小值 (帶符號/無符號) | 最大值 (帶符號/無符號) |
---|---|---|---|
TINYINT | 1 | -128/ 0 | 127/ 255 |
SMALLINT | 2 | -32768/ 0 | 32767/ 65535 |
MEDIUMINT | 3 | -8388608/ 0 | 8388607/ 16777215 |
INT | 4 | -8388607/ 16777215 | 2147483647/ 4294967295 |
BIGINT | 8 | - 9223372036854775808 / 0 | 9223372036854775807 / 18446744073709551615 |
我們必須根據儲存的資料型別選擇資料型別。如果可能,我們需要使用較小的資料型別來最小化資料庫大小。TINYINT 可用於儲存較小的數字,而 INT 或 BIGINT 可用於儲存較大的數字,例如國家/地區的電話號碼。
MySQL INT 的自動遞增
在 MySQL 中,您可以將AUTO_INCREMENT屬性與INT列一起使用,以自動為該列生成唯一值。以下是其工作原理:
初始值:當您建立一個帶有 AUTO_INCREMENT INT 列的表時,序列從 1 開始。
插入 NULL 或 0:當您插入一條記錄並在 AUTO_INCREMENT 列中插入 NULL 或 0 值時,MySQL 會將該值設定為下一個序列值。這意味著它會從 1 開始分配下一個可用的整數。
插入非 NULL 值:如果您將非 NULL 值插入到 AUTO_INCREMENT 列中,MySQL 會接受該值並根據插入的新值繼續序列。
示例
首先,我們建立一個名為 STUDENTS 的表,其中包含一個名為“ID”的 AUTO_INCREMENT INT 列:
CREATE TABLE STUDENTS ( ID int auto_increment, NAME varchar(20), primary key (ID) );
當我們向此表中插入記錄而不為“ID”列指定值時,MySQL 會自動從 1 開始為“ID”生成唯一值。
在這裡,我們使用以下 INSERT 查詢向 STUDENTS 表中插入三行:
INSERT INTO STUDENTS (NAME) VALUES ('Tilak'), ('Akash'), ('Surya'), ('Deepak');
建立的 STUDENTS 表如下所示:
ID | 姓名 |
---|---|
1 | Tilak |
2 | Akash |
3 | Surya |
4 | Deepak |
現在,讓我們插入一行,其中我們為“ID”列提供顯式值:
INSERT INTO STUDENTS (ID, NAME) VALUES (15, 'Arjun');
獲得的輸出如下所示:
Query OK, 1 row affected (0.01 sec)
由於我們將“ID”指定為 15,因此 MySQL 將序列重置為 16。如果我們插入新行而不指定“ID”,MySQL 將使用 16 作為下一個 AUTO_INCREMENT 值:
INSERT INTO STUDENTS (NAME) VALUES ('Dev');
獲得的輸出如下所示:
Query OK, 1 row affected (0.01 sec)
現在,讓我們從“STUDENTS”表中檢索記錄:
SELECT * FROM STUDENTS;
生成的表為:
ID | 姓名 |
---|---|
1 | Tilak |
2 | Akash |
3 | Surya |
4 | Deepak |
15 | Arjun |
16 | Dev |
從 MySQL 5.1 版本開始,AUTO_INCREMENT列僅接受正值,不允許負值。
MySQL INT UNSIGNED
在 MySQL 中,當您在列上定義 UNSIGNED INT 時,該列將被限制為僅儲存非負值(即正值)。此類列中不允許使用負值。
示例
讓我們使用以下查詢建立一個名為EMPLOYEES的表:
CREATE TABLE EMPLOYEES ( ID int auto_increment, NAME varchar(30) not null, AGE int UNSIGNED, Primary key(ID) );
獲得的輸出如下所示:
Query OK, 0 rows affected (0.04 sec)
現在,讓我們向“AGE”列中插入一個非負值:
INSERT INTO EMPLOYEES (NAME, AGE) VALUES ('Varun', 32);
上述查詢將成功執行,因為為“AGE”列提供的值是非負的。
Query OK, 1 row affected (0.01 sec)
但是,如果我們嘗試向“AGE”列中插入負值,MySQL 將生成錯誤:
INSERT INTO EMPLOYEES (NAME, AGE) VALUES ('Sunil', -10);
MySQL 將發出如下所示的錯誤:
ERROR 1264 (22003): Out of range value for column 'AGE' at row 1
MySQL INT 帶顯示寬度屬性
在 MySQL 中,您可以透過在 INT 關鍵字後使用括號來指定 INT 資料型別的顯示寬度。例如,使用 INT(5) 將顯示寬度設定為五位數字。
需要注意的是,MySQL 中 INT 的顯示寬度屬性不會影響可以儲存在列中的值的範圍。它在應用程式中格式化整數值,並作為元資料包含在結果集中。
例如,如果您將值 12345 插入到 EMPLOYEES 表的 id 列中,它將按原樣儲存。當您檢索它時,某些應用程式可能會選擇用前導零填充它,以確保它顯示為五位數字(例如,012345)。
MySQL INT 帶 ZEROFILL 屬性
在 MySQL 中,ZEROFILL 屬性是一個非標準屬性,可以應用於數值資料型別。它會在顯示的值前面新增前導零,確保數字以固定寬度顯示,對於數字程式碼特別有用。
示例
讓我們建立一個名為ZEROFILL_TABLE的表,使用下面的查詢將 ZEROFILL 應用於 INT 列:
CREATE TABLE ZEROFILL_TABLE ( col1 int(4) ZEROFILL, col2 int(6) ZEROFILL, col3 int(8) ZEROFILL );
獲得的輸出如下所示:
Query OK, 0 rows affected, 6 warnings (0.02 sec)
現在,我們向上面建立的表中插入一行新資料:
INSERT INTO ZEROFILL_TABLE (col1, col2, col3) VALUES (1, 7, 3);
以下是上述程式碼的輸出:
Query OK, 1 row affected (0.00 sec)
現在,讓我們顯示 ZEROFILL_TABLE 表中的記錄:
SELECT * FROM ZEROFILL_TABLE;
我們可以看到下面的輸出中,值以指定的寬度顯示,並且添加了前導零以保持該寬度,這由 ZEROFILL 屬性決定:
col1 | col2 | col3 |
---|---|---|
0001 | 000007 | 00000003 |
使用客戶端程式的 INT 資料型別
我們也可以使用客戶端程式建立 INT 資料型別的列。
語法
要透過 PHP 程式建立 INT 資料型別的列,我們需要使用mysqli函式query()執行“CREATE TABLE”語句,如下所示:
$sql = 'CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )'; $mysqli->query($sql);
要透過 JavaScript 程式建立 INT 資料型別的列,我們需要使用mysql2庫的query()函式執行“CREATE TABLE”語句,如下所示:
sql = "CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )"; con.query(sql);
要透過 Java 程式建立 INT 資料型別的列,我們需要使用JDBC函式execute()執行“CREATE TABLE”語句,如下所示:
String sql = "CREATE TABLE students(Id INT AUTO_INCREMENT primary key not null, reg_No INT)"; statement.execute(sql);
要透過 Python 程式建立 INT 資料型別的列,我們需要使用MySQL Connector/Python的execute()函式執行“CREATE TABLE”語句,如下所示:
sql = 'CREATE TABLE students (ID int auto_increment, NAME varchar(20), primary key (ID) )' cursorObj.execute(sql)
示例
以下是程式:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); //create table with boolean column $sql = 'CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )'; $result = $mysqli->query($sql); if ($result) { printf("Table created successfully...!\n"); } //insert data into created table $q = "INSERT INTO students (reg_No) VALUES (101), (102)"; if ($res = $mysqli->query($q)) { printf("Data inserted successfully...!\n"); } //now display the table records $s = "SELECT Id, reg_No FROM students"; if ($r = $mysqli->query($s)) { printf("Table Records: \n"); while ($row = $r->fetch_assoc()) { printf(" ID: %d, Reg: %s", $row["Id"], $row["reg_No"]); printf("\n"); } } else { printf('Failed'); } $mysqli->close();
輸出
獲得的輸出如下所示:
Table Records: ID: 1, Reg: 101 ID: 2, Reg: 102
var mysql = require("mysql2"); var con = mysql.createConnection({ host: "localhost", user: "root", password: "password", }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; //console.log("Connected successfully...!"); //console.log("--------------------------"); sql = "USE TUTORIALS"; con.query(sql); //create a students table, that accepts one column of int type. sql = "CREATE TABLE students (Id INT AUTO_INCREMENT primary key not null, reg_No INT )"; con.query(sql); //insert data into created table sql = "INSERT INTO students (reg_No) VALUES (101), (102)"; con.query(sql); //select datatypes of salary sql = `SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'students' AND COLUMN_NAME = 'reg_No'`; con.query(sql, function (err, result) { if (err) throw err; console.log(result); }); });
輸出
產生的輸出如下所示:
[ { DATA_TYPE: 'int' } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Int { public static void main(String[] args) { String url = "jdbc:mysql://:3306/TUTORIALS"; String username = "root"; String password = "password"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //Int data types...!; String sql = "CREATE TABLE students(Id INT AUTO_INCREMENT primary key not null, reg_No INT)"; statement.execute(sql); System.out.println("column of a INT type created successfully...!"); ResultSet resultSet = statement.executeQuery("DESCRIBE students"); while (resultSet.next()){ System.out.println(resultSet.getString(1)+" "+resultSet.getString(2)); } connection.close(); } catch (Exception e) { System.out.println(e); } } }
輸出
獲得的輸出如下所示:
Connected successfully...! column of a INT type created successfully...! Id int reg_No int
import mysql.connector # Establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) # Creating a cursor object cursorObj = connection.cursor() # Create table with int column sql = '''CREATE TABLE students ( ID int auto_increment, NAME varchar(20), primary key (ID) )''' cursorObj.execute(sql) print("The table is created successfully!") # Data to be inserted data_to_insert = [ (1, 'Tilak'), (2, 'Akash'), (3, 'Surya'), (4, 'Deepak'), (15, 'Arjun'), (16, 'Dev') ] # Insert data into the created table insert_query = "INSERT INTO STUDENTS (ID, NAME) VALUES (%s, %s)" cursorObj.executemany(insert_query, data_to_insert) # Commit the changes after the insert operation connection.commit() print("Rows inserted successfully.") # Now display the table records select_query = "SELECT * FROM Students" cursorObj.execute(select_query) result = cursorObj.fetchall() print("Table Data:") for row in result: print(row) cursorObj.close() connection.close()
輸出
以下是上述程式碼的輸出:
The table is created successfully! Rows inserted successfully. Table Data: (1, 'Tilak') (2, 'Akash') (3, 'Surya') (4, 'Deepak') (15, 'Arjun') (16, 'Dev')