Thiết lập ID tăng tự động trong Oracle
Với MySQL thì đã có AUTO_INCREMENT giúp tăng tự động cho trường khóa chính có kiểu dữ liệu là số nguyên, tuy nhiên với Oracle thì không có sẵn như vậy mà bạn phải kết hợp Sequence và Trigger để tạo sự kiện tăng ID lên 1 mỗi khi có thao tác Insert.
1. Các thiết lập ID tăng tư động trong Oracle
Giả sử mình cần tạo bảng dữ liệu TINTUC như sau:
Field | Data Type |
---|---|
ID | number, tăng tự động |
TITLE | varchar(200) |
DESCRIPTION | varchar(500) |
Và đây là câu lệnh dùng để tạo bảng này.
CREATE TABLE TINTUC ( ID NUMBER PRIMARY KEY, TITLE VARCHAR(200), DESCRIPTION VARCHAR(500) )
Câu lệnh này sẽ tạo một bảng TINTUC với ID là khóa chính, tuy nhiên nó không hề tăng tự động. Để nó tăng tự động mỗi khi insert thì bạn thực hiện các bước sau.
Bài viết này được đăng tại [free tuts .net]
Tạo Sequence
Sau khi tạo thành công bảng TINTUC thì ta sẽ tạo một SEQUENCE giúp tự động tăng trường ID cho bảng này, ID này sẽ có giá trị bắt đầu từ 1 và tăng +1 mỗi khi có lệnh INSERT.
CREATE SEQUENCE AUTO_INCREMENT_SEQUENCE START WITH 1 INCREMENT BY 1;
Ok vậy là xong, bây giờ ta cần tạo trigger.
Tạo Trigger
Chúng ta dùng một trigger để kích hoạt Sequence vừa tạo, trigger này sẽ gọi đến AUTO_INCREMENT_SEQUENCE
để tăng trường ID lên 1 trước khi lệnh INSERT thực hiện.
CREATE OR REPLACE TRIGGER AUTO_INCREMENT_TRIGGER BEFORE INSERTON SINHVIEN REFERENCING NEW AS NEW FOR EACH ROWBEGINSELECT AUTO_INCREMENT_SEQUENCE.NEXTVAL INTO :NEW.ID FROM DUAL; END; /
Như vậy là bạn đã thiết lập thành công tăng tự động rồi đấy.
Lưu ý: Lệnh này chỉ có tác dụng trên một bảng, vì vậy nếu bạn có N bảng thì phải thực hiện N lần nhé.
2. Lời kết
Qua bài này nhận thấy việc thiết lập này là cần thiết trong trường hợp bạn muốn khóa chính tăng tự động, nó sẽ giúp cho việc truy vấn dữ liệu trở nên nhanh hơn rất nhiều vì mọi thứ đều được sắp xếp có thứ tự.
Cá nhân mình đang sử dụng MySQL nên cảm thấy Oracle quá rườm rà, tại sao nó không tạo một thông số cho việc thiết lập này vì nhu cầu thực tế rất cần thiết.