sql >> Databasteknik >  >> RDS >> Mysql

Kolumn för automatisk ökning:skillnader i SQL-syntax mellan Oracle och MySQL

Inte all SQL är densamma. Varken Oracle eller MySQL stöder den faktiska SQL-standarden IDENTITY.

Oracle använder inte backticks... du behöver faktiskt inte citera dina identifierare. Bättre att inte göra det så att du inte oavsiktligt använder ett ogiltigt tecken i en identifierare.

Oracles siffror kallas NUMBER och kan ta en valfri precision och skala.

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

För att göra en AUTO_INCREMENT, skapa en sekvens:

CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;

När du sedan infogar i tabellen gör du så här:

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

För att göra detta automatiskt, som AUTO_INCREMENT, använd en trigger före infogning:

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

Nu när det gäller att upptäcka dessa skillnader kan du ofta bara söka efter något som "oracle identity" eller "oracle auto_increment" för att se hur Oracle gör detta.



  1. Hur man stoppar eller kontrollerar Microsoft Access-felkontrollmarkörer

  2. Hur man ansluter till SQL Server Instance genom att använda Windows-autentisering eller SQL Server-autentisering - SQL Server / T-SQL Tutorial Del 3

  3. Följ geospatial fråga:hitta n närmaste punkter till en plats

  4. matcha hela ord samtidigt som man ignorerar affix av ord med hjälp av regex