Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kolumna autoinkrementacji:różnice w składni SQL między Oracle i MySQL

Nie każdy SQL jest taki sam. Ani Oracle, ani MySQL nie obsługują rzeczywistego standardu tożsamości SQL.

Oracle nie używa backticków... właściwie nie musisz cytować swoich identyfikatorów. Lepiej tego nie robić, aby nie przypadkowo użyć nieprawidłowego znaku w identyfikatorze.

Liczby Oracle nazywają się LICZBA i mogą przyjmować opcjonalną precyzję i skalę.

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

Aby wykonać AUTO_INCREMENT, utwórz sekwencję:

CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;

Następnie po wstawieniu do tabeli zrób tak:

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

Aby zrobić to automatycznie, jak AUTO_INCREMENT, użyj wyzwalacza przed wstawieniem:

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

Lub:

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

Teraz, jeśli chodzi o odkrywanie tych różnic, często wystarczy wyszukać coś takiego jak „tożsamość Oracle” lub „auto_increment” Oracle, aby zobaczyć, jak robi to Oracle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz czas z MySQL w formacie GG:MM

  2. Jaka jest domyślna metoda szyfrowania haseł w Drupalu?

  3. Radzenie sobie z serwerem PHP i serwerem MySQL w różnych strefach czasowych

  4. Jaka jest różnica między mysql.createConnection i mysql.createPool w module Node.js MySQL?

  5. Java - Wyjątek w głównym wątku java.lang.Błąd:nierozwiązane problemy z kompilacją