sql >> Database >  >> RDS >> Oracle

MySQL-equivalent van Oracle's SEQUENCE.NEXTVAL

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

3.6.9. AUTO_INCREMENT gebruiken

Het kenmerk AUTO_INCREMENT kan worden gebruikt om een ​​unieke identiteit voor nieuwe rijen te genereren:

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

Er is geen waarde opgegeven voor de kolom AUTO_INCREMENT, dus MySQL heeft automatisch volgnummers toegewezen. U kunt ook expliciet NULL of 0 toewijzen aan de kolom om volgnummers te genereren.

U kunt de meest recente AUTO_INCREMENT-waarde ophalen met de LAST_INSERT_ID() SQL-functie of de mysql_insert_id() C API-functie. Deze functies zijn verbindingsspecifiek, dus hun retourwaarden worden niet beïnvloed door een andere verbinding die ook inserts uitvoert.

Gebruik het kleinste integer-gegevenstype voor de kolom AUTO_INCREMENT dat groot genoeg is om de maximale reekswaarde te bevatten die u nodig hebt. Wanneer de kolom de bovengrens van het gegevenstype bereikt, mislukt de volgende poging om een ​​volgnummer te genereren. Gebruik indien mogelijk het kenmerk UNSIGNED om een ​​groter bereik toe te staan. Als u bijvoorbeeld TINYINT gebruikt, is het maximaal toegestane volgnummer 127. Voor TINYINT UNSIGNED is het maximum 255. Zie Paragraaf 11.2.1, "Integer-typen (exacte waarde) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT ” voor de bereiken van alle typen gehele getallen.

OpmerkingVoor een invoeging met meerdere rijen retourneren LAST_INSERT_ID() en mysql_insert_id() feitelijk de AUTO_INCREMENT-sleutel van de eerste van de ingevoegde rijen. Hierdoor kunnen inserts met meerdere rijen correct worden gereproduceerd op andere servers in een replicatieconfiguratie.

Als de AUTO_INCREMENT-kolom deel uitmaakt van meerdere indexen, genereert MySQL reekswaarden met behulp van de index die begint met de AUTO_INCREMENT-kolom, als die er is. Als de tabel met dieren bijvoorbeeld de indexen PRIMARY KEY (grp, id) en INDEX (id) bevatte, zou MySQL de PRIMARY KEY negeren voor het genereren van sequentiewaarden. Als gevolg hiervan zou de tabel een enkele reeks bevatten, geen reeks per gp-waarde.

Om te beginnen met een AUTO_INCREMENT-waarde anders dan 1, stelt u die waarde in met CREATE TABLE of ALTER TABLE, als volgt:

mysql> ALTER TABLE tbl AUTO_INCREMENT =100;InnoDB Notes

Voor InnoDB-tabellen moet u voorzichtig zijn als u de kolom wijzigt die de auto-increment-waarde bevat in het midden van een reeks INSERT-instructies. Als u bijvoorbeeld een UPDATE-instructie gebruikt om een ​​nieuwe, grotere waarde in de kolom voor automatisch ophogen te plaatsen, kan een volgende INSERT een fout 'Dubbele invoer' opleveren. De test of er al een auto-increment-waarde aanwezig is, vindt plaats als u een DELETE uitvoert gevolgd door meer INSERT-instructies, of wanneer u de transactie COMMIT, maar niet na een UPDATE-instructie.

MijnISAM-notities

Voor MyISAM-tabellen kunt u AUTO_INCREMENT opgeven in een secundaire kolom in een index met meerdere kolommen. In dit geval wordt de gegenereerde waarde voor de kolom AUTO_INCREMENT berekend als MAX(auto_increment_column) + 1 WHERE prefix=gegeven-prefix. Dit is handig als u gegevens in geordende groepen wilt plaatsen.

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

In dit geval (wanneer de AUTO_INCREMENT-kolom deel uitmaakt van een index met meerdere kolommen), worden AUTO_INCREMENT-waarden opnieuw gebruikt als u de rij verwijdert met de grootste AUTO_INCREMENT-waarde in een groep. Dit gebeurt zelfs voor MyISAM-tabellen, waarvoor AUTO_INCREMENT-waarden normaal niet opnieuw worden gebruikt.

Verder lezen

Meer informatie over AUTO_INCREMENT is hier beschikbaar:

Hoe u het AUTO_INCREMENT-attribuut aan een kolom toewijst:Paragraaf 13.1.17, "CREATE TABLE-syntaxis", en Paragraaf 13.1.7, "ALTER TABLE-syntaxis".

Hoe AUTO_INCREMENT zich gedraagt, hangt af van de NO_AUTO_VALUE_ON_ZERO SQL-modus:Paragraaf 5.1.7, "Server SQL-modi".

Hoe de functie LAST_INSERT_ID() te gebruiken om de rij te vinden die de meest recente AUTO_INCREMENT-waarde bevat:Paragraaf 12.14, "Informatiefuncties".

De te gebruiken AUTO_INCREMENT-waarde instellen:Paragraaf 5.1.4, "Serversysteemvariabelen".

AUTO_INCREMENT en replicatie:Paragraaf 16.4.1.1, "Replicatie en AUTO_INCREMENT".

Serversysteemvariabelen gerelateerd aan AUTO_INCREMENT (auto_increment_increment en auto_increment_offset) die kunnen worden gebruikt voor replicatie:Paragraaf 5.1.4, "Serversysteemvariabelen".

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



  1. Monitoring &Ops Management van MySQL 8.0 met ClusterControl

  2. Hoe database te herstellen met RMAN

  3. Afkappen (niet ronde) decimalen in SQL Server

  4. Hoe alle MySQL-databases van oude naar nieuwe server over te zetten?