Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ความแตกต่างระหว่าง SERIAL และ AUTO_INCREMENT ใน MySQL

ใน MySQL SERIAL และ AUTO_INCREMENT ใช้กำหนดลำดับเป็นค่าเริ่มต้นของฟิลด์ แต่มันต่างกันในทางเทคนิค

AUTO_INCREMENT รองรับชนิดข้อมูลตัวเลขทุกชนิด ยกเว้น BIT และ DECIMAL มีได้เพียงหนึ่งฟิลด์ต่อตาราง และลำดับที่เกิดจาก AUTO_INCREMENT ในตารางหนึ่งไม่สามารถใช้ในตารางอื่นได้ ต้องมีดัชนี UNIQUE บนฟิลด์เพื่อป้องกันค่าซ้ำ ลำดับเริ่มจาก 1 และเพิ่มทีละ 1 สำหรับทุกการแทรกข้อมูล

ตัวอย่าง

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

mysql> INSERT INTO Student(Name) VALUES('RAM'),('SHYAM');
Query OK, 2 rows affected (0.06 sec)

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)

สำหรับ SERIAL เป็นรูปย่อของ NOT NULL AUTO_INCREMENT UNIQUE KEY ชนิดตัวเลขจำนวนเต็ม เช่น TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT รองรับคำสั่ง SERIAL DEFAULT VALUE

ตัวอย่าง

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)

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)