sql >> Database >  >> RDS >> Mysql

Kolom automatisch verhogen:verschillen in SQL-syntaxis tussen Oracle en MySQL

Niet alle SQL is hetzelfde. Noch Oracle, noch MySQL ondersteunen de feitelijke SQL-standaard van IDENTITY.

Oracle gebruikt geen backticks... u hoeft uw identifiers niet echt te citeren. Het is beter om dat niet te doen, zodat u niet per ongeluk een ongeldig teken in een identificatie gebruikt.

Oracle-nummers worden NUMBER genoemd en kunnen een optionele precisie en schaal hebben.

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

Maak een reeks aan om een ​​AUTO_INCREMENT te doen:

CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;

Wanneer u vervolgens in de tabel invoegt, doet u dit:

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

Om dit automatisch te doen, zoals AUTO_INCREMENT, gebruik je een trigger voor het invoegen:

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

Of:

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

Wat betreft het ontdekken van deze verschillen, kunt u vaak gewoon zoeken naar iets als "oracle identity" of "oracle auto_increment" om te zien hoe Oracle dit doet.



  1. Hoe de Security Advisor MySQL-waarschuwing te repareren

  2. selecteer 30 willekeurige rijen waarbij sombedrag =x

  3. Vreemd gedrag Laravel Homestead Database-verbinding

  4. een willekeurig getal maken met MYSQL