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

Khác biệt giữa SERIAL và AUTO_INCREMENT trong MySQL?

Trong MySQL, cả SERIAL và AUTO_INCREMENT đều dùng để định nghĩa một dãy số làm giá trị mặc định cho một trường. Nhưng chúng khác nhau về mặt kỹ thuật.

Thuộc tính AUTO_INCREMENT được hỗ trợ bởi tất cả các kiểu dữ liệu số trừ BIT và DECIMAL. Chỉ có thể có một trường AUTO_INCREMENT mỗi bảng và dãy số được sinh ra bởi trường AUTO_INCREMENT trong một bảng không thể dùng cho bảng khác.

Thuộc tính này yêu cầu tồn tại một chỉ mục UNIQUE trên trường để đảm bảo dãy số không bị trùng lặp. Dãy số sẽ bắt đầu mặc định từ 1 và tăng 1 cho mỗi lần chèn.

Ví dụ

mysql> CREATE TABLE Student(Student_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name VARCHAR(20));
Query OK, 0 rows affected (0.18 sec)

Truy vấn trên khai báo Student_id là AUTO_INCREMENT.

mysql> INSERT INTO Student(Name) VALUES('RAM'),('SHYAM');
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM Student;
+------------+-------+
| Student_id | Name  |
+------------+-------+
| 1          | RAM   |
| 2          | SHYAM |
+------------+-------+
2 rows in set (0.00 sec)
mysql> SHOW CREATE TABLE Student\G
*************************** 1. row ***************************
Table: Student
Create Table: CREATE TABLE `student` (
  `Student_id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`Student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

Ngược lại, SERIAL DEFAULT VALUE là viết tắt của NOT NULL AUTO_INCREMENT UNIQUE KEY. Các kiểu số nguyên như TINYINT, SMALLINT, MEDIUMINT, INT, và BIGINT hỗ trợ từ khóa SERIAL DEFAULT VALUE.

Ví dụ

mysql> CREATE TABLE Student_serial(Student_id SERIAL, Name VARCHAR(20));
Query OK, 0 rows affected (0.17 sec)
mysql> INSERT INTO Student_serial(Name) VALUES('RAM'),('SHYAM');
Query OK, 2 rows affected (0.12 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM Student_serial;
+------------+-------+
| Student_id | Name  |
+------------+-------+
| 1          | RAM   |
| 2          | SHYAM |
+------------+-------+
2 rows in set (0.00 sec)
mysql> SHOW CREATE TABLE Student_serial\G
*************************** 1. row ***************************
Table: Student_serial
Create Table: CREATE TABLE `student_serial` (
  `Student_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(20) DEFAULT NULL,
  UNIQUE KEY `Student_id` (`Student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)