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

Cột tự động tăng:sự khác biệt về cú pháp SQL giữa Oracle và MySQL

Không phải tất cả SQL đều giống nhau. Cả Oracle và MySQL đều không hỗ trợ tiêu chuẩn SQL thực tế của IDENTITY.

Oracle không sử dụng dấu gạch ngược ... bạn thực sự không cần phải trích dẫn số nhận dạng của mình. Tốt hơn là không nên làm như vậy, bạn sẽ không vô tình sử dụng một ký tự không hợp lệ trong số nhận dạng.

Các số trong Oracle được gọi là NUMBER và có thể có độ chính xác và tỷ lệ tùy chọn.

CREATE TABLE Category
(
  id    NUMBER(11)   NOT NULL,
  title VARCHAR2(45) NULL,
  PRIMARY KEY (id)
)

Để thực hiện AUTO_INCREMENT, hãy tạo một chuỗi:

CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;

Sau đó, khi bạn chèn vào bảng, hãy thực hiện như sau:

INSERT INTO category
VALUES (seq_category_id.nextval, 'some title');

Để thực hiện việc này một cách tự động, chẳng hạn như AUTO_INCREMENT, hãy sử dụng trình kích hoạt trước khi chèn:

-- Automatically create the incremented ID for every row:
CREATE OR REPLACE trigger bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
BEGIN
    SELECT seq_category_id.nextval INTO :new.id FROM dual;
END;

Hoặc:

-- Allow the user to pass in an ID to be used instead
CREATE OR REPLACE TRIGGER bi_category_id
BEFORE INSERT ON category
FOR EACH ROW
DECLARE
    v_max_cur_id NUMBER;
    v_current_seq NUMBER;
BEGIN
    IF :new.id IS NULL THEN
        SELECT seq_category_id.nextval INTO :new.id FROM dual;
    ELSE
        SELECT greatest(nvl(max(id),0), :new.id) INTO v_max_cur_id FROM category;
        SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
        WHILE v_current_seq < v_max_cur_id
        LOOP
            SELECT seq_category_id.nextval INTO v_current_seq FROM dual;
        END LOOP;
    END IF;
END;

Bây giờ, khi phát hiện ra những điểm khác biệt này, bạn thường có thể chỉ cần tìm kiếm một cái gì đó như "danh tính oracle" hoặc "oracle auto_increment" để xem Oracle thực hiện điều này như thế nào.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các mối quan hệ hùng hồn đối với vấn đề di cư ở nước ngoài trong Laravel

  2. Truy vấn Java MYSQL / JDBC đang trả về dữ liệu cũ từ Kết nối được lưu trong bộ nhớ cache

  3. Nhiều câu lệnh chèn / cập nhật bên trong trình kích hoạt?

  4. Rails Octopus Gem - Hành vi kết nối Master-Slave Replication khi nô lệ không hoạt động

  5. MySQL giải thích cho các truy vấn DELETE