Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

MySQL tương đương với SEQUENCE.NEXTVAL của Oracle

http://docs.oracle.com/cd/E17952_01/refman-5.5-en/example-auto-increment.html

3.6.9. Sử dụng AUTO_INCREMENT

Thuộc tính AUTO_INCREMENT có thể được sử dụng để tạo danh tính duy nhất cho các hàng mới:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;
Which returns:

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+

Không có giá trị nào được chỉ định cho cột AUTO_INCREMENT, vì vậy MySQL tự động gán số thứ tự. Bạn cũng có thể chỉ định rõ ràng NULL hoặc 0 cho cột để tạo số thứ tự.

Bạn có thể truy xuất giá trị AUTO_INCREMENT gần đây nhất bằng hàm LAST_INSERT_ID () SQL hoặc hàm API mysql_insert_id () C. Các hàm này dành riêng cho kết nối, vì vậy giá trị trả về của chúng không bị ảnh hưởng bởi một kết nối khác cũng đang thực hiện chèn.

Sử dụng kiểu dữ liệu số nguyên nhỏ nhất cho cột AUTO_INCREMENT đủ lớn để chứa giá trị trình tự lớn nhất mà bạn cần. Khi cột đạt đến giới hạn trên của kiểu dữ liệu, nỗ lực tiếp theo để tạo số thứ tự không thành công. Sử dụng thuộc tính UNSIGNED nếu có thể để cho phép phạm vi lớn hơn. Ví dụ:nếu bạn sử dụng TINYINT, số thứ tự tối đa được phép là 127. Đối với TINYINT UNSIGNED, số thứ tự tối đa là 255. Xem Phần 11.2.1, “Các loại số nguyên (Giá trị chính xác) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT ”Cho phạm vi của tất cả các loại số nguyên.

Lưu ýĐối với chèn nhiều hàng, LAST_INSERT_ID () và mysql_insert_id () thực sự trả về khóa AUTO_INCREMENT từ đầu tiên trong các hàng được chèn. Điều này cho phép sao chép chèn nhiều hàng một cách chính xác trên các máy chủ khác trong thiết lập sao chép.

Nếu cột AUTO_INCREMENT là một phần của nhiều chỉ mục, MySQL tạo các giá trị trình tự bằng cách sử dụng chỉ mục bắt đầu bằng cột AUTO_INCREMENT, nếu có. Ví dụ:nếu bảng động vật chứa các chỉ mục PRIMARY KEY (grp, id) và INDEX (id), MySQL sẽ bỏ qua PRIMARY KEY để tạo các giá trị trình tự. Do đó, bảng sẽ chứa một chuỗi duy nhất, không phải một chuỗi trên mỗi giá trị grp.

Để bắt đầu với giá trị AUTO_INCREMENT khác 1, hãy đặt giá trị đó bằng TẠO BẢNG hoặc BẢNG thay thế, như sau:

mysql> ALTER TABLE tbl AUTO_INCREMENT =100; Ghi chú InnoDB

Đối với bảng InnoDB, hãy cẩn thận nếu bạn sửa đổi cột có chứa giá trị tự động tăng ở giữa chuỗi câu lệnh INSERT. Ví dụ:nếu bạn sử dụng câu lệnh CẬP NHẬT để đặt một giá trị mới, lớn hơn vào cột tự động tăng, một INSERT tiếp theo có thể gặp lỗi "Mục nhập trùng lặp". Việc kiểm tra xem một giá trị tự động tăng đã xuất hiện hay chưa nếu bạn thực hiện DELETE theo sau bởi các câu lệnh INSERT khác hoặc khi bạn COMMIT giao dịch, nhưng không phải sau câu lệnh UPDATE.

Ghi chú MyISAM

Đối với bảng MyISAM, bạn có thể chỉ định AUTO_INCREMENT trên cột phụ trong chỉ mục nhiều cột. Trong trường hợp này, giá trị được tạo cho cột AUTO_INCREMENT được tính là MAX (auto_increment_column) + 1 WHERE prefix =tiền tố đã cho. Điều này rất hữu ích khi bạn muốn đặt dữ liệu vào các nhóm có thứ tự.

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;
Which returns:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+

Trong trường hợp này (khi cột AUTO_INCREMENT là một phần của chỉ mục nhiều cột), các giá trị AUTO_INCREMENT được sử dụng lại nếu bạn xóa hàng có giá trị AUTO_INCREMENT lớn nhất trong bất kỳ nhóm nào. Điều này xảy ra ngay cả đối với các bảng MyISAM mà các giá trị AUTO_INCREMENT thường không được sử dụng lại.

Đọc thêm

Thông tin thêm về AUTO_INCREMENT có sẵn tại đây:

Cách gán thuộc tính AUTO_INCREMENT cho một cột:Phần 13.1.17, “Cú pháp TẠO BẢNG” và Phần 13.1.7, “Cú pháp ALTER TABLE”.

Cách AUTO_INCREMENT hoạt động tùy thuộc vào chế độ SQL NO_AUTO_VALUE_ON_ZERO:Phần 5.1.7, “Chế độ máy chủ SQL”.

Cách sử dụng hàm LAST_INSERT_ID () để tìm hàng có chứa giá trị AUTO_INCREMENT gần đây nhất:Phần 12.14, “Hàm thông tin”.

Đặt giá trị AUTO_INCREMENT sẽ được sử dụng:Phần 5.1.4, “Biến hệ thống máy chủ”.

AUTO_INCREMENT và sao chép:Phần 16.4.1.1, “Sao chép và AUTO_INCREMENT”.

Các biến hệ thống máy chủ liên quan đến AUTO_INCREMENT (auto_increment_increment và auto_increment_offset) có thể được sử dụng để sao chép:Phần 5.1.4, “Biến hệ thống máy chủ”.

http://search.oracle.com/search/search?q=auto_increment&group=Documentation&x=0&y=0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về Oracle FOR LOOP REVERSE

  2. Cách gói cx_oracle với Pyinstaller

  3. Hàm BITAND () trong Oracle

  4. Hàm NLS_UPPER () trong Oracle

  5. Dấu chân máy khách tối thiểu cần thiết để kết nối C # với cơ sở dữ liệu Oracle là gì?