SQL - Sử dụng chuỗi
Chuỗi là một tập hợp các số nguyên 1, 2, 3, ... được tạo theo thứ tự theo yêu cầu. Chuỗi thường được sử dụng trong cơ sở dữ liệu vì nhiều ứng dụng yêu cầu mỗi hàng trong bảng phải chứa một giá trị duy nhất và chuỗi cung cấp một cách dễ dàng để tạo chúng.
Chương này mô tả cách sử dụng chuỗi trong MySQL.
Sử dụng cột AUTO_INCREMENT
Cách đơn giản nhất trong MySQL để sử dụng các chuỗi là xác định một cột là AUTO_INCREMENT và để phần còn lại cho MySQL xử lý.
Thí dụ
Hãy thử ví dụ sau. Thao tác này sẽ tạo một bảng và sau đó, nó sẽ chèn một vài hàng vào bảng này, nơi nó không bắt buộc phải cung cấp ID bản ghi vì nó được MySQL tự động tăng lên.
mysql> CREATE TABLE INSECT
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL, # type of insect
-> date DATE NOT NULL, # date collected
-> origin VARCHAR(30) NOT NULL # where collected
);
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO INSECT (id,name,date,origin) VALUES
-> (NULL,'housefly','2001-09-10','kitchen'),
-> (NULL,'millipede','2001-09-10','driveway'),
-> (NULL,'grasshopper','2001-09-10','front yard');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM INSECT ORDER BY id;
+----+-------------+------------+------------+
| id | name | date | origin |
+----+-------------+------------+------------+
| 1 | housefly | 2001-09-10 | kitchen |
| 2 | millipede | 2001-09-10 | driveway |
| 3 | grasshopper | 2001-09-10 | front yard |
+----+-------------+------------+------------+
3 rows in set (0.00 sec)
Nhận các giá trị AUTO_INCREMENT
LAST_INSERT_ID () là một hàm SQL, vì vậy bạn có thể sử dụng nó từ bên trong bất kỳ máy khách nào hiểu cách phát hành câu lệnh SQL. Mặt khác, các tập lệnh PERL và PHP cung cấp các chức năng độc quyền để truy xuất giá trị tự động tăng dần của bản ghi cuối cùng.
Ví dụ về PERL
Sử dụng mysql_insertidđể nhận giá trị AUTO_INCREMENT do truy vấn tạo ra. Thuộc tính này được truy cập thông qua một xử lý cơ sở dữ liệu hoặc một xử lý câu lệnh, tùy thuộc vào cách bạn đưa ra truy vấn. Ví dụ sau tham chiếu nó thông qua xử lý cơ sở dữ liệu.
$dbh->do ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysql_insertid};
Ví dụ PHP
Sau khi phát hành một truy vấn tạo ra giá trị AUTO_INCREMENT, hãy truy xuất giá trị bằng cách gọi mysql_insert_id( ) chức năng.
mysql_query ("INSERT INTO INSECT (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysql_insert_id ($conn_id);
Đánh số lại một trình tự hiện có
Có thể có một trường hợp khi bạn đã xóa nhiều bản ghi khỏi một bảng và bạn muốn sắp xếp lại tất cả các bản ghi. Điều này có thể được thực hiện bằng cách sử dụng một thủ thuật đơn giản, nhưng bạn phải rất cẩn thận khi thực hiện việc này và kiểm tra xem bảng của bạn có tham gia với bảng khác hay không.
Nếu bạn xác định rằng việc sắp xếp lại một cột AUTO_INCREMENT là không thể tránh khỏi, thì cách thực hiện là bỏ cột khỏi bảng, sau đó thêm lại.
Ví dụ sau đây cho thấy cách đánh số lại các giá trị id trong bảng côn trùng bằng kỹ thuật này.
mysql> ALTER TABLE INSECT DROP id;
mysql> ALTER TABLE insect
-> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
-> ADD PRIMARY KEY (id);
Bắt đầu một trình tự ở một giá trị cụ thể
Theo mặc định, MySQL sẽ bắt đầu chuỗi từ 1, nhưng bạn có thể chỉ định bất kỳ số nào khác tại thời điểm tạo bảng.
Khối mã sau đây có một ví dụ trong đó MySQL sẽ bắt đầu trình tự từ 100.
mysql> CREATE TABLE INSECT
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL, # type of insect
-> date DATE NOT NULL, # date collected
-> origin VARCHAR(30) NOT NULL # where collected
);
Ngoài ra, bạn có thể tạo bảng và sau đó đặt giá trị trình tự ban đầu bằng ALTER TABLE.
mysql> ALTER TABLE t AUTO_INCREMENT = 100;