- 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')