Computer >> Máy Tính >  >> Lập trình >> MySQL

Trong MySQL, sự khác biệt giữa SERIAL và AUTO_INCREMENT là gì?

Trong MySQL, cả SERIAL và AUTO_INCREMENT đều được sử dụng để xác định một chuỗi làm giá trị mặc định cho một trường. Nhưng chúng khác xa 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ố ngoại trừ BIT và DECIMAL. Chỉ có thể có một trường AUTO_INCREMENT trên mỗi bảng và trình tự được tạo bởi trường AUTO_INCREMENT trong một bảng không thể được sử dụng trong bất kỳ bảng nào khác.

Thuộc tính này yêu cầu chỉ mục DUY NHẤT tồn tại trên trường để đảm bảo chuỗi không có bản sao. Trình tự sẽ bắt đầu theo mặc định từ 1 và tăng lên 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 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)

Mặt khác, SERIAL DEFAULT VALUE là viết tắt của NOT NULL AUTO_INCREMENT UNIQUE KEY. Loại số xen kẽ 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)