SEQUENCE và NEXTVAL - Tạo khóa chính tăng tự động
Oracle sử dụng khái niệm SEQUENCE để tạo các giá trị khóa chính dạng số khi chúng ta thêm các hàng dữ liệu vào bảng. Trong khi tập hợp khóa chính bằng số cho MySQL và SQL Server được liên kết với các bảng riêng lẻ, thì trong Oracle, cấu trúc SEQUENCE được tạo riêng biệt và không gắn với một bảng riêng lẻ.
Cú pháp
Cú pháp để tạo một chuỗi trong Oracle là:[START WITH {Initial_Value}]
[INCREMENT BY {interval}];
{Giá trị ban đầu} là giá trị bắt đầu của dãy, và {khoảng} là khoảng thời gian giữa các dãy số liên tiếp. Cả [BẮT ĐẦU VỚI] và [TĂNG BẰNG] đều là các trường tùy chọn. Nếu chúng không được chỉ định, mặc định {Initial_Value} và {khoảng thời gian} đều là 1.
Ví dụ
Giả sử chúng ta có một bảng với cấu trúc sau:
Bảng USER_TABLE
Column Name | Data Type |
Userid | integer |
Last_Name | varchar(50) |
First_Name | varchar(50) |
và chúng tôi muốn sử dụng trình tự sau để tạo userid:
Chúng tôi chỉ định rằng chúng tôi muốn sử dụng trình tự và hàm NEXTVAL trong các câu lệnh INSERT INTO theo thứ tự sau:
INSERT INTO USER_TABLE VALUES (SEQ_USER.NEXTVAL, 'Jefferson', 'Thomas');
Bây giờ bảng có hai hàng sau:
Bảng USER_TABLE
Userid | Last_Name | First_Name |
5 | Washington | George |
10 | Jefferson | Thomas |
Điều đáng chú ý là một trình tự độc lập với một bảng. Nói cách khác, một trình tự có thể được sử dụng để tạo các giá trị khóa chính cho nhiều bảng và trình tự tiếp tục ngay cả khi nó đang được áp dụng cho một bảng khác. Vì vậy, giả sử chúng ta có một bảng thứ hai, Bảng NEW_USERS , có cấu trúc tương tự như bảng USER_TABLE và chúng tôi phát hành lệnh SQL sau sau khi thực hiện hai lệnh SQL ở trên:
Bảng NEW_USER sẽ có hàng sau:
Bảng NEW_USER
Userid | Last_Name | First_Name |
15 | Adams | John |
Userid là 15 vì đó là giá trị tiếp theo sau 10.
Xem thêm:
- Truy vẫn con trong SQL và cách sử dụng
- SQL LIMIT - Hạn chế số lượng kết quả trả về
- SQL UNION - gộp kết quả của 2 câu truy vấn