Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kolom kenaikan otomatis:perbedaan sintaks SQL antara Oracle dan MySQL

Tidak semua SQL sama. Baik Oracle maupun MySQL tidak mendukung standar SQL IDENTITY yang sebenarnya.

Oracle tidak menggunakan backticks... Anda sebenarnya tidak perlu mengutip pengenal Anda. Sebaiknya tidak agar Anda tidak menggunakan karakter yang tidak valid dalam pengenal secara tidak sengaja.

Numerik Oracle disebut NUMBER, dan dapat mengambil presisi dan skala opsional.

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

Untuk melakukan AUTO_INCREMENT, buat urutan:

CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;

Kemudian ketika Anda memasukkan ke dalam tabel, lakukan ini:

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

Untuk melakukannya secara otomatis, seperti AUTO_INCREMENT, gunakan pemicu sebelum penyisipan:

-- 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;

Atau:

-- 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;

Sekarang, sejauh menemukan perbedaan ini, Anda sering dapat mencari sesuatu seperti "identitas oracle" atau "oracle auto_increment" untuk melihat bagaimana Oracle melakukan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Socket menolak koneksi setelah ribuan koneksi berturut-turut

  2. Pembaruan massal Sqlalchemy di MySQL bekerja sangat lambat

  3. Bagaimana cara mengakses koneksi mysqli di kelas lain di halaman lain?

  4. Cara Memasukkan Beberapa Nilai Kotak Centang ke dalam Basis Data

  5. MySQL GROUP oleh Regex?