sql >> Database teknologi >  >> RDS >> Mysql

Automatisk stigningskolonne:forskelle i SQL-syntaks mellem Oracle og MySQL

Ikke al SQL er ens. Hverken Oracle eller MySQL understøtter den faktiske SQL-standard IDENTITY.

Oracle bruger ikke backticks... du behøver faktisk ikke at citere dine identifikatorer. Det er bedre at lade være, så du ikke ender med at bruge et ugyldigt tegn i en identifikator.

Oracle-numerik kaldes NUMBER og kan tage en valgfri præcision og skala.

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

For at lave en AUTO_INCREMENT skal du oprette en sekvens:

CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;

Når du så indsætter i tabellen, skal du gøre dette:

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

For at gøre dette automatisk, som AUTO_INCREMENT, skal du bruge en trigger før indsættelse:

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

Eller:

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

For så vidt angår at opdage disse forskelle, kan du ofte bare søge efter noget som "oracle-identitet" eller "oracle auto_increment" for at se, hvordan Oracle gør dette.



  1. Forklar venligst MySQL Joins i et enkelt sprog

  2. SQL Alias ​​forklaret

  3. Codeigniter - Adgangsmodeller og database om routing

  4. Overvåg databaser og forekomster via Activity Monitor | SQL Server Performance Fejlfinding -2