Mysql
 sql >> база данни >  >> RDS >> Mysql

Колона с автоматично увеличение:разлики в SQL синтаксиса между Oracle и MySQL

Не всички SQL са еднакви. Нито Oracle, нито MySQL поддържат действителния SQL стандарт на IDENTITY.

Oracle не използва обратни отметки... всъщност не е нужно да цитирате вашите идентификатори. По-добре не го правете, за да не използвате невалиден знак в идентификатор.

Цифрите на Oracle се наричат ​​NUMBER и могат да приемат по избор точност и мащаб.

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

За да направите AUTO_INCREMENT, създайте последователност:

CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1;

След това, когато вмъкнете в таблицата, направете това:

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

За да направите това автоматично, като AUTO_INCREMENT, използвайте тригер преди вмъкване:

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

Или:

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

Сега, що се отнася до откриването на тези разлики, често можете просто да търсите нещо като „идентификация на oracle“ или „oracle auto_increment“, за да видите как 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. MySQL агрегатни функции без клауза GROUP BY

  2. Необходимо ли е да има индекс за всяка комбинация от заявени полета в SQL таблица, за да се оптимизира производителността?

  3. Добавете колона след друга колона

  4. Кой тип данни на MySQL да използвате за IP адрес?

  5. Laravel InvalidArgumentException в Carbon.php ред 425:Следващи данни с SQL база данни