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

MySQL еквивалент на SEQUENCE.NEXTVAL на Oracle

http://docs.oracle.com/cd/E17952_01/refman-5.5-en/example-auto-increment.html

3.6.9. Използване на AUTO_INCREMENT

Атрибутът AUTO_INCREMENT може да се използва за генериране на уникална идентичност за нови редове:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

INSERT INTO animals (name) VALUES
    ('dog'),('cat'),('penguin'),
    ('lax'),('whale'),('ostrich');

SELECT * FROM animals;
Which returns:

+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
|  3 | penguin |
|  4 | lax     |
|  5 | whale   |
|  6 | ostrich |
+----+---------+

Не беше посочена стойност за колоната AUTO_INCREMENT, така че MySQL автоматично присвои последователни номера. Можете също така изрично да зададете NULL или 0 на колоната, за да генерирате последователни номера.

Можете да извлечете най-новата стойност AUTO_INCREMENT с LAST_INSERT_ID() SQL функцията или mysql_insert_id() функцията C API. Тези функции са специфични за връзката, така че техните върнати стойности не се влияят от друга връзка, която също извършва вмъквания.

Използвайте най-малкия целочислен тип данни за колоната AUTO_INCREMENT, който е достатъчно голям, за да побере максималната стойност на последователността, от която ще се нуждаете. Когато колоната достигне горната граница на типа данни, следващият опит за генериране на пореден номер е неуспешен. Използвайте атрибута UNSIGNED, ако е възможно, за да разрешите по-голям диапазон. Например, ако използвате TINYINT, максимално допустимият пореден номер е 127. За TINYINT UNSIGNED, максимумът е 255. Вижте раздел 11.2.1, „Типове цели числа (точна стойност) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT ” за диапазоните на всички типове цели числа.

Забележка За вмъкване с множество редове, LAST_INSERT_ID() и mysql_insert_id() всъщност връщат ключа AUTO_INCREMENT от първия от вмъкнатите редове. Това позволява вмъкванията от няколко реда да се възпроизвеждат правилно на други сървъри при настройка за репликация.

Ако колоната AUTO_INCREMENT е част от множество индекси, MySQL генерира стойности на последователността, използвайки индекса, който започва с колоната AUTO_INCREMENT, ако има такава. Например, ако таблицата с животни съдържа индекси PRIMARY KEY (grp, id) и INDEX (id), MySQL ще игнорира PRIMARY KEY за генериране на стойности на последователността. В резултат на това таблицата ще съдържа една последователност, а не последователност на стойност на grp.

За да започнете със стойност AUTO_INCREMENT, различна от 1, задайте тази стойност със CREATE TABLE или ALTER TABLE, както следва:

mysql> ALTER TABLE tbl AUTO_INCREMENT =100;InnoDB Бележки

За таблици InnoDB, бъдете внимателни, ако модифицирате колоната, съдържаща стойността за автоматично увеличение в средата на поредица от оператори INSERT. Например, ако използвате оператор UPDATE, за да поставите нова, по-голяма стойност в колоната за автоматично увеличение, последващо INSERT може да срещне грешка „Дублиращ запис“. Тестът дали вече е налице стойност за автоматично увеличение се извършва, ако направите DELETE, последвано от повече оператори INSERT, или когато COMMIT транзакцията, но не и след оператор UPDATE.

MyISAM Бележки

За MyISAM таблици можете да зададете AUTO_INCREMENT на вторична колона в индекс с множество колони. В този случай генерираната стойност за колоната AUTO_INCREMENT се изчислява като MAX(auto_increment_column) + 1 WHERE префикс =даден префикс. Това е полезно, когато искате да поставите данни в подредени групи.

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;
Which returns:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+

В този случай (когато колоната AUTO_INCREMENT е част от индекс с множество колони), стойностите на AUTO_INCREMENT се използват повторно, ако изтриете реда с най-голямата стойност AUTO_INCREMENT във всяка група. Това се случва дори за таблици MyISAM, за които стойностите на AUTO_INCREMENT обикновено не се използват повторно.

Допълнително четене

Повече информация за AUTO_INCREMENT можете да намерите тук:

Как да присвоите атрибута AUTO_INCREMENT на колона:Раздел 13.1.17, „СИНТАксиС НА СЪЗДАВАНЕ НА ТАБЛИЦА“ и Раздел 13.1.7, „СИНТАксиС НА ТАБЛИЦА ALTER“.

Как се държи AUTO_INCREMENT в зависимост от режима на SQL NO_AUTO_VALUE_ON_ZERO:Раздел 5.1.7, „Режими на SQL на сървъра“.

Как да използвате функцията LAST_INSERT_ID(), за да намерите реда, който съдържа най-новата стойност AUTO_INCREMENT:Раздел 12.14, „Информационни функции“.

Задаване на стойността AUTO_INCREMENT, която да се използва:Раздел 5.1.4, „Променливи на сървърната система“.

AUTO_INCREMENT и репликация:Раздел 16.4.1.1, „Репликация и AUTO_INCREMENT“.

Променливи на сървърната система, свързани с AUTO_INCREMENT (auto_increment_increment и auto_increment_offset), които могат да се използват за репликация:Раздел 5.1.4, „Сървърни системни променливи“.

http://search.oracle.com/search/search?q=auto_increment&group=Documentation&x=0&y=0



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как тълкувате плана за обяснение на заявка?

  2. Oracle:DDL и връщане на транзакциите

  3. Как да изберете всички колони и брой (*) в една и съща заявка

  4. Групово вмъкване в базата данни на Oracle:Кое е по-добре:цикъл FOR Cursor или обикновен Select?

  5. Използване на псевдоним в когато част от изявление за казус в Oracle SQL