Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thay đổi giá trị mặc định TINYINT thành 1 trong MySQL?

Sử dụng ALTER TABLE ... CHANGE COLUMN để định nghĩa lại cột với DEFAULT 1.

Tạo bảng

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName VARCHAR(20),
    -> UserAge INT,
    -> isMarried TINYINT(1)
    -> );

Kiểm tra cấu trúc ban đầu (DEFAULT NULL)

mysql> DESC DemoTable;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| Id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| UserName  | varchar(20) | YES  |     | NULL    |                |
| UserAge   | int(11)     | YES  |     | NULL    |                |
| isMarried | tinyint(1)  | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+

Thay đổi DEFAULT thành 1, NOT NULL

mysql> ALTER TABLE DemoTable 
    -> CHANGE isMarried isMarried TINYINT(1) DEFAULT 1 NOT NULL;
Query OK, 0 rows affected (1.29 sec)

Kiểm tra cấu trúc sau thay đổi

mysql> DESC DemoTable;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| Id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| UserName  | varchar(20) | YES  |     | NULL    |                |
| UserAge   | int(11)     | YES  |     | NULL    |                |
| isMarried | tinyint(1)  | NO   |     | 1       |                |
+-----------+-------------+------+-----+---------+----------------+

Giải thích cú pháp CHANGE vs MODIFY

Cú phápKhi nào dùng
CHANGE old_name new_name definitionĐổi tên cột HOẶC đổi định nghĩa (cần lặp tên cột)
MODIFY column_name definitionChỉ đổi định nghĩa, giữ nguyên tên

Ví dụ dùng MODIFY: ALTER TABLE DemoTable MODIFY isMarried TINYINT(1) DEFAULT 1 NOT NULL;

Lưu ý

  • TINYINT(1) thường dùng cho boolean (0=false, 1=true)
  • NOT NULL bắt buộc có giá trị, kết hợp DEFAULT 1 đảm bảo hàng mới tự động là 1
  • Dữ liệu hiện có: NULL sẽ thành 0 (hoặc lỗi nếu strict mode), nên UPDATE trước: UPDATE DemoTable SET isMarried = 1 WHERE isMarried IS NULL;
  • MySQL không có kiểu BOOLEAN thực sự, BOOL/BOOLEAN là alias của TINYINT(1)