Oracle auto_increment. автоматическое заполнение поля в oracle добавлением единицы

Как создать идентификатор с AUTO_INCREMENT на Oracle?

В Oracle не существует таких элементов, как столбцы «auto_increment» или «identity» в Oracle с Oracle 11g. Однако вы можете легко моделировать его с помощью последовательности и триггера:

Определение таблицы:

CREATE TABLE departments ( ID NUMBER(10) NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL); ALTER TABLE departments ADD ( CONSTRAINT dept_pk PRIMARY KEY (ID)); CREATE SEQUENCE dept_seq START WITH 1;

Определение триггера:

CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROW BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual;
END;
/

UPDATE:

IDENTITY теперь доступен в Oracle 12c:

create table t1 ( c1 NUMBER GENERATED by default on null as IDENTITY, c2 VARCHAR2(10) );

или указать значения начала и инкремента, а также предотвратить вставку в столбец идентификатора (GENERATED ALWAYS) (опять же, только Oracle 12c +)

create table t1 ( c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1), c2 VARCHAR2(10) );

ответ дан Eugenio Cuevas 02 июля '12 в 18:16

источник поделиться

SYS_GUID возвращает идентификатор GUID — глобальный уникальный идентификатор. A SYS_GUID — RAW(16). Он не генерирует увеличивающееся числовое значение.

Если вы хотите создать инкрементный числовой ключ, вам нужно создать последовательность.

CREATE SEQUENCE name_of_sequence START WITH 1 INCREMENT BY 1 CACHE 100;

Затем вы будете использовать эту последовательность в инструкции INSERT

INSERT INTO name_of_table( primary_key_column, ) VALUES( name_of_sequence.nextval, );

Или вы можете определить триггер, который автоматически заполняет значение первичного ключа, используя последовательность

CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW
BEGIN SELECT name_of_sequence.nextval INTO :new.primary_key_column FROM dual;
END;

Если вы используете Oracle 11.1 или новее, вы можете немного упростить триггер

CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW
BEGIN :new.primary_key_column := name_of_sequence.nextval;
END;

Если вы действительно хотите использовать SYS_GUID

CREATE TABLE table_name ( primary_key_column raw(16) default sys_guid() primary key,
)

ответ дан Justin Cave 02 июля '12 в 18:16

источник поделиться

В Oracle 12c вперед вы можете сделать что-то вроде:

CREATE TABLE MAPS
( MAP_ID INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL, MAP_NAME VARCHAR(24) NOT NULL, UNIQUE (MAP_ID, MAP_NAME)
);

И в Oracle (Pre 12c).

— create table
CREATE TABLE MAPS
( MAP_ID INTEGER NOT NULL , MAP_NAME VARCHAR(24) NOT NULL, UNIQUE (MAP_ID, MAP_NAME)
); — create sequence
CREATE SEQUENCE MAPS_SEQ; — create tigger using the sequence
CREATE OR REPLACE TRIGGER MAPS_TRG BEFORE INSERT ON MAPS FOR EACH ROW
WHEN (new.MAP_ID IS NULL)
BEGIN SELECT MAPS_SEQ.NEXTVAL INTO :new.MAP_ID FROM dual;
END;
/

ответ дан Nisar 14 июня '14 в 21:10

источник поделиться

Вот три варианта:

  • Числовое. Простое увеличение числового значения, например. 1,2,3,….
  • GUID. глобально универсальный идентификатор, как тип данных RAW.
  • GUID (строка). То же, что и выше, но как строка, которая может быть проще обрабатывать на некоторых языках.

x — это тождественный столбец. Замените FOO своим именем таблицы в каждом из примеров.

— numerical identity, e.g. 1,2,3…
create table FOO ( x number primary key
);
create sequence FOO_seq; create or replace trigger FOO_trg
before insert on FOO
for each row
begin select FOO_seq.nextval into :new.x from dual;
end;
/ — GUID identity, e.g. 7CFF0C304187716EE040488AA1F9749A
— use the commented out lines if you prefer RAW over VARCHAR2.
create table FOO ( x varchar(32) primary key — string version — x raw(32) primary key — raw version
); create or replace trigger FOO_trg
before insert on FOO
for each row
begin select cast(sys_guid() as varchar2(32)) into :new.x from dual; — string version — select sys_guid() into :new.x from dual; — raw version
end;
/

обновление:

Oracle 12c вводит эти два варианта, которые не зависят от триггеров:

create table mytable(id number default mysequence.nextval);
create table mytable(id number generated as identity);

Первый использует последовательность традиционным способом; второй управляет значением внутри.

ответ дан Mark Harrison 13 янв. '10 в 2:44

источник поделиться

В Oracle Database 12c представлен Identity, автоинкрементный (сгенерированный системой) столбец. В предыдущих версиях базы данных (до 11g) вы обычно реализуете Identity, создавая последовательность и триггер. Начиная с 12c, вы можете создать свою собственную таблицу и определить столбец, который должен быть сгенерирован как идентификатор.

В следующей статье объясняется, как ее использовать:

Идентификационные столбцы — новая запись в Oracle Database 12c

ответ дан Corrado Piola 10 окт. '13 в 17:47

источник поделиться

Trigger и Sequence могут использоваться, когда вы хотите сериализованный номер, который каждый может легко прочитать/запомнить/понять.

Но если вы не хотите управлять идентификационной колонкой (например, emp_id) таким образом, а значение этого столбца не намного значимо, вы можете использовать SYS_GUID() при создании таблицы, чтобы получить автоматическое увеличение таким образом.

CREATE TABLE (emp_id RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
name VARCHAR2(30));

Теперь ваш столбец emp_id примет «глобальное уникальное значение идентификатора». вы можете вставить значение в таблицу, игнорируя столбец emp_id следующим образом.

INSERT INTO (name) VALUES ('name value');

Таким образом, он вставляет уникальное значение в столбец emp_id.

ответ дан N J 18 янв. '14 в 9:08

источник поделиться

Начиная с Oracle 12c существует поддержка столбцов Identity одним из двух способов:

  • Последовательность + Таблица. В этом решении вы все равно создаете последовательность, как обычно, тогда вы используете следующий DDL:CREATE TABLE MyTable (ID NUMBER ПО УМОЛЧАНИЮ MyTable_Seq.NEXTVAL, …)
  • Только таблица. В этом решении никакая последовательность явно не указана. Вы должны использовать следующий DDL:CREATE TABLE MyTable (идентификатор NUMBER GENERATED AS IDENTITY,…)

Если вы используете первый способ, он обратно совместим с существующим способом выполнения действий. Второй — немного более простой и более строгий с остальными системами RDMS.

ответ дан Nate Zaugg 24 февр. '16 в 18:53

источник поделиться

он называется Identity Columns и доступен только из Oracle 12c

CREATE TABLE identity_test_tab
( id NUMBER GENERATED ALWAYS AS IDENTITY, description VARCHAR2 (30)
);

пример вставки в Identity Columns, как показано ниже

INSERT INTO identity_test_tab (description) VALUES ('Just DESCRIPTION');

вы не можете вставить, как показано ниже

INSERT INTO identity_test_tab (id, description) VALUES (NULL, 'ID=NULL and DESCRIPTION');
INSERT INTO identity_test_tab (id, description) VALUES (999, 'ID=999 and DESCRIPTION');

полезная ссылка

ответ дан sam 10 марта '17 в 15:44

источник поделиться

Вот полное решение w.r.t обработка исключений/ошибок для автоматического приращения, это решение обратно совместимо и будет работать на 11g и 12c, особенно если приложение находится в процессе разработки.

Пожалуйста, замените «TABLE_NAME» на соответствующее имя таблицы

—checking if table already exisits
BEGIN EXECUTE IMMEDIATE 'DROP TABLE TABLE_NAME'; EXCEPTION WHEN OTHERS THEN NULL;
END;
/ —creating table
CREATE TABLE TABLE_NAME ( ID NUMBER(10) PRIMARY KEY NOT NULL, . . .
); —checking if sequence already exists
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE TABLE_NAME_SEQ'; EXCEPTION WHEN OTHERS THEN NULL;
END; —creating sequence
/
CREATE SEQUENCE TABLE_NAME_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 NOMAXVALUE NOCYCLE CACHE 2; —granting rights as per required user group
/
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE_NAME TO USER_GROUP; — creating trigger
/
CREATE OR REPLACE TRIGGER TABLE_NAME_TS BEFORE INSERT OR UPDATE ON TABLE_NAME FOR EACH ROW
BEGIN — auto increment column SELECT TABLE_NAME_SEQ.NextVal INTO :New.ID FROM dual; — You can also put some other required default data as per need of your columns, for example SELECT SYS_CONTEXT('USERENV', 'SESSIONID') INTO :New.SessionID FROM dual; SELECT SYS_CONTEXT('USERENV','SERVER_HOST') INTO :New.HostName FROM dual; SELECT SYS_CONTEXT('USERENV','OS_USER') INTO :New.LoginID FROM dual; . . .
END;
/

ответ дан emkays 17 февр. '16 в 14:12

источник поделиться

Вот как я сделал это в существующей таблице и столбце (named id):

UPDATE table SET id=ROWNUM;
DECLARE maxval NUMBER;
BEGIN SELECT MAX(id) INTO maxval FROM table; EXECUTE IMMEDIATE 'DROP SEQUENCE table_seq'; EXECUTE IMMEDIATE 'CREATE SEQUENCE table_seq START WITH '|| TO_CHAR(TO_NUMBER(maxval)+1) ||' INCREMENT BY 1 NOMAXVALUE';
END;
CREATE TRIGGER table_trigger BEFORE INSERT ON table FOR EACH ROW
BEGIN :new.id := table_seq.NEXTVAL;
END;

ответ дан ether6 19 янв. '17 в 2:06

источник поделитьсяFUNCTION UNIQUE2( seq IN NUMBER
) RETURN VARCHAR2
AS i NUMBER := seq; s VARCHAR2(9); r NUMBER(2,0);
BEGIN WHILE i > 0 LOOP r := MOD( i, 36 ); i := ( i — r ) / 36; IF ( r < 10 ) THEN s := TO_CHAR(r) || s; ELSE s := CHR( 55 + r ) || s; END IF; END LOOP; RETURN 'ID'||LPAD( s, 14, '0' ); END;

ответ дан kumar venkatesan 02 авг. '17 в 14:25

источник поделиться create trigger t1_trigger before insert on AUDITLOGS for each row begin select t1_seq.nextval into :new.id from dual; end;

только мне нужно просто изменить имя таблицы (AUDITLOGS) с именем вашей таблицы и new.id с именем new.column_name

ответ дан abhishek ringsia 21 сент. '15 в 9:46

источник поделитьсяFUNCTION GETUNIQUEID_2 RETURN VARCHAR2
AS
v_curr_id NUMBER;
v_inc NUMBER;
v_next_val NUMBER;
pragma autonomous_transaction;
begin CREATE SEQUENCE sequnce
START WITH YYMMDD0000000001
INCREMENT BY 1
NOCACHE
select sequence.

nextval into v_curr_id from dual;
if(substr(v_curr_id,0,6)= to_char(sysdate,'yymmdd')) then
v_next_val := to_number(to_char(SYSDATE+1, 'yymmdd') || '0000000000');
v_inc := v_next_val — v_curr_id;
execute immediate ' alter sequence sequence increment by ' || v_inc ;
select sequence.nextval into v_curr_id from dual;
execute immediate ' alter sequence sequence increment by 1';
else
dbms_output.put_line('exception : file not found');
end if;
RETURN 'ID'||v_curr_id;
END;

ответ дан kumar venkatesan 02 авг. '17 в 14:22

источник поделиться

Возможно, просто попробуйте этот простой script:

http://www.hlavaj.sk/ai.php

Результат:

CREATE SEQUENCE TABLE_PK_SEQ; CREATE OR REPLACE TRIGGER TR_SEQ_TABLE BEFORE INSERT ON TABLE FOR EACH ROW BEGIN
SELECT TABLE_PK_SEQ.NEXTVAL
INTO :new.PK
FROM dual;
END;

ответ дан Martin Hlavaj 02 сент. '15 в 12:24

источник поделиться

Источник: http://qaru.site/questions/25810/how-to-create-id-with-autoincrement-on-oracle

SQL AUTO INCREMENT Поле

Автоматическое приращение позволяет автоматически генерировать уникальный номер при вставке новой записи в таблицу.

Часто это поле первичного ключа, которое мы хотели бы создать автоматически каждый раз при вставке новой записи.

Синтаксис для MySQL

Следующая инструкция SQL определяет столбец «ID», который будет автоматически увеличивать поле первичного ключа в таблице «лица»:

CREATE TABLE Persons (     ID int NOT NULL AUTO_INCREMENT,     LastName varchar(255) NOT NULL,     FirstName varchar(255),     Age int,     PRIMARY KEY (ID)

);

MySQL использует ключевое слово ауто_инкремент для выполнения функции автоматического приращения.

По умолчанию начальное значение для ауто_инкремент равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Чтобы позволить ауто_инкремент последовательности начать с другого значения, используйте следующую инструкцию SQL:

ALTER TABLE Persons AUTO_INCREMENT=100;

Чтобы вставить новую запись в таблицу «персоны», нам не нужно будет указывать значение для «ID» столбец (уникальное значение будет добавлено автоматически):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');

Вышеприведенная инструкция SQL вставит новую запись в таблицу «персоны». Столбцу «ID» присваивается уникальное значение. В столбце «имя» будет установлено значение «Ларс», а в столбце «Фамилия» будет установлено значение «Монсен Сотрудник IIP».

Синтаксис для SQL Server

Следующая инструкция SQL определяет столбец «ID», который будет автоматически увеличивать поле первичного ключа в таблице «лица»:

CREATE TABLE Persons (     ID int IDENTITY(1,1) PRIMARY KEY,     LastName varchar(255) NOT NULL,     FirstName varchar(255),     Age int

Читайте также:  Nginx + rtmp. трансляция видео с веб-сервера. установка и настройка nginx-rtmp-module

);

Сервер MS SQL использует ключевое слово Identity для выполнения функции автоматического приращения.

В приведенном выше примере начальное значение Identity равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Совет: Чтобы указать, что столбец «ID» должен начинаться со значения 10 и увеличиваться на 5, измените его на Identity (10, 5).

Чтобы вставить новую запись в таблицу «персоны», нам не нужно будет указывать значение для столбца «ID» (уникальное значение будет добавлено автоматически):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');

The SQL statement above would insert a new record into the «Persons» table. The «ID» column would be assigned a unique value. The «FirstName» column would be set to «Lars» and the «LastName» column would be set to «Monsen».

Синтаксис для доступа

Следующая инструкция SQL определяет столбец «ID», который будет автоматически увеличивать поле первичного ключа в таблице «лица»:

CREATE TABLE Persons (     ID Integer PRIMARY KEY AUTOINCREMENT,     LastName varchar(255) NOT NULL,     FirstName varchar(255),     Age int

);

Для выполнения функции автоматического приращения используется ключевое слово автоприращение.

По умолчанию начальное значение для автоприращения равно 1, и оно будет увеличиваться на 1 для каждой новой записи.

Совет: Чтобы указать, что столбец «ID» должен начинаться со значения 10 и увеличиваться на 5, измените автоприращение на автоприращение (10, 5).

Чтобы вставить новую запись в таблицу «персоны», нам не нужно будет указывать значение для столбца «ID» (уникальное значение будет добавлено автоматически):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen');

Вышеприведенная инструкция SQL вставит новую запись в таблицу «персоны». Столбцу «п_ид» присваивается уникальное значение. В столбце «имя» будет установлено значение «Ларс», а в столбце «Фамилия» будет установлено значение «Монсен Сотрудник IIP».

Синтаксис для Oracle

В Oracle код немного сложнее.

Вам придется создать поле с автоматическим приращением с помощью объекта Sequence (этот объект генерирует номерную серию).

Используйте следующий синтаксис создания последовательности:

CREATE SEQUENCE seq_person MINVALUE 1 START WITH 1 INCREMENT BY 1

CACHE 10;

Приведенный выше код создает объект Sequence с именем сек_персон, начинающийся с 1 и увеличивающийся на 1. Он также будет кэшировать до 10 значений для производительности. Параметр cache указывает, сколько значений последовательности будет сохранено в памяти для более быстрого доступа.

Чтобы вставить новую запись в таблицу «персоны», мы должны будем использовать функцию NEXTVAL (Эта функция извлекает следующее значение из последовательности сек_персон):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen');

Вышеприведенная инструкция SQL вставит новую запись в таблицу «персоны». Столбцу «ID» присваивается следующий номер из последовательности сек_персон. В столбце «имя» будет установлено значение «Ларс», а в столбце «Фамилия» будет установлено значение «Монсен Сотрудник IIP».

Источник: https://html5css.ru/sql/sql_autoincrement.php

How to Define an Auto Increment Primary Key in Oracle

Much to the frustration of database administrators worldwide, prior to Oracle version 12c in mid-2014, Oracle simply had no inherent ability to inherently generate auto incrementing columns within a table schema.

While the reasons for this design decision can only be guessed at, the good news is that even for users on older Oracle systems, there is a possible workaround to circumnavigate this pitfall and create your own auto incremented primary key column.

Creating a Sequence

The first step is to create a SEQUENCE in your database, which is a data object that multiple users can access to automatically generate incremented values. As discussed in the documentation, a sequence in Oracle prevents duplicate values from being created simultaneously because multiple users are effectively forced to “take turns” before each sequential item is generated.

For the purposes of creating a unique primary key for a new table, first we must CREATE the table we’ll be using:

CREATE TABLE books ( id NUMBER(10) NOT NULL, title VARCHAR2(100) NOT NULL
);

Next we need to add a PRIMARY KEY constraint:

ALTER TABLE books ADD ( CONSTRAINT books_pk PRIMARY KEY (id) );

Finally, we’ll create our SEQUENCE that will be utilized later to actually generate the unique, auto incremented value.

CREATE SEQUENCE books_sequence;

Adding a Trigger

While we have our table created and ready to go, our sequence is thus far just sitting there but never being put to use. This is where TRIGGERS come in.

Similar to an event in modern programming languages, a TRIGGER in Oracle is a stored procedure that is executed when a particular event occurs.

Typically a TRIGGER will be configured to fire when a table is updated or a record is deleted, providing a bit of cleanup when necessary.

In our case, we want to execute our TRIGGER prior to INSERT into our books table, ensuring our SEQUENCE is incremented and that new value is passed onto our primary key column.

CREATE OR REPLACE TRIGGER books_on_insert BEFORE INSERT ON books FOR EACH ROW
BEGIN SELECT books_sequence.nextval INTO :new.id FROM dual;
END;

Here we are creating (or replacing if it exists) the TRIGGER named books_on_insert and specifying that we want the trigger to fire BEFORE INSERT occurs for the books table, and to be applicable to any and all rows therein.

The ‘code’ of the trigger itself is fairly simple: We SELECT the next incremental value from our previously created books_sequence SEQUENCE, and inserting that into the :new record of the books table in the specified .id field.

Note: The FROM dual part is necessary to complete a proper query but is effectively irrelevant. The dual table is just a single dummy row of data and is added, in this case, just so it can be ignored and we can instead execute the system function of our trigger rather than returning data of some kind.

IDENTITY Columns

IDENTITY columns were introduced in Oracle 12c, allowing for simple auto increment functionality in modern versions of Oracle.

Using the IDENTITY column is functionally similar to that of other database systems. Recreating our above books table schema in modern Oracle 12c or higher, we’d simply use the following column definition.

CREATE TABLE books ( id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, title VARCHAR2(100) NOT NULL
);

Источник: https://chartio.com/resources/tutorials/how-to-define-an-auto-increment-primary-key-in-oracle/

Creating BETTER auto-increment columns in Oracle

I was explaining to a developer today how Oracle doesn’t support auto-increment columns for IDs and how you have to implement your own. I wanted to point him to a tutorial but I found that most of the tutorials have PL/SQL code with unexplained side effects.

So I thought I’d post some Oracle PL/SQL code that behaves just like a MySQL or PostgreSQL auto-increment column, but which also fixes the sequence number when an application provides its own ID number for a record, which is one place where MySQL and PostgreSQL autoincrement columns fail.

Step 1: Know the names of your tablespaces. Know which tablespace you want to use for your tables and which tablespace you want to use for your indexes. Don’t assume that Oracle is going to put the table in the right place. To get a list of available tablespaces:

select tablespace_name from user_tablespaces;

Step 2: Create your table. In this example the table is built in the tablespace TDATA and the primary key index is built in the tablespace INDX.

create table example ( id number not null, name varchar2(30), constraint example_pk primary key(id) using index tablespace INDX ) tablespace TDATA;

Note that by declaring the id column “not null” you can’t add a record with an empty ID field, ever.

Creating the primary key constraint on a separate line allows us to name the constraint, which can be handy when you’re looking through the data dictionary later on trying to figure out which constraint does what.

Step 3: Create a sequence. In this case I create an ID sequence that starts at 1 and goes on from there. If you want to start your ID sequence with a different number, or increment by some other amount, change these values.

create sequence example_id_seq start with 1 increment by 1;

Step 4: Create a trigger. This is what does the actual work setting the ID number. There are many ways to do this, here are two:

Method 1: Use a sequence-generated ID for all IDs.

create or replace trigger example_insert before insert on example for each row begin select example_id_seq.nextval into :new.id from dual; end; /

Method 1 will always use a sequence-generated ID no matter what. For example:

SQL> insert into example (id, name) values (100, 'Earl'); 1 row created. SQL> insert into example (name) values ('Cleopatra'); 1 row created. SQL> insert into example (name) values ('Frankenstein'); 1 row created. SQL> select * from example; ID NAME ———- —————————— 1 Earl 2 Cleopatra 3 Frankenstein

In this case the trigger-supplied ID 1 overwrote the user-supplied id 100.

Method 2: Allow users to supply their own IDs when they want to.

create or replace trigger example_insert before insert on example for each row declare max_id number; cur_seq number; begin if :new.id is null then — No ID passed, get one from the sequence select example_id_seq.nextval into :new.id from dual; else — ID was set via insert, so update the sequence select greatest(nvl(max(id),0), :new.id) into max_id from example; select example_id_seq.nextval into cur_seq from dual; while cur_seq < max_id loop select example_id_seq.nextval into cur_seq from dual; end loop; end if; end; /

Method 2 will use the sequence-generated ID if the insert statement doesn’t supply an ID, which is what MySQL and PostgreSQL do. It also updates the sequence so that the next value of the sequence won’t collide with IDs supplied by an insert statement.

For example, let’s say I’m using Trigger Method 2 and just loaded the table with a bunch of old data, including old ID numbers.

SQL> delete from example; 3 rows deleted. SQL> insert into example (id, name) values (200, 'Cleopatra'); 1 row created. SQL> insert into example (id, name) values (300, 'Frankenstein'); 1 row created. SQL> insert into example (name) values ('Earl'); 1 row created. SQL> select * from example; ID NAME ———- —————————— 200 Cleopatra 300 Frankenstein 301 Earl

The last record added gets an ID of 301.

Hope you find this useful.

Follow earlruby

Источник: http://earlruby.org/2009/01/creating-auto-increment-columns-in-oracle/

ALTER TABLE ОПЕРАТОР

Это учебное пособие объясняет, как использовать в Oracle/PLSQL оператор ALTER TABLE, чтобы добавить столбец, изменить столбец, удалить столбец, переименовать столбец или переименовать таблицу (с синтаксисом, примерами и практическими упражнениями).

Описание

Оператор Oracle/PLSQL ALTER TABLE используется для добавления, изменения или удаления столбца в таблице. Оператор Oracle/PLSQL ALTER TABLE также используется для переименования таблиц.

Добавить столбец в таблицу

Синтаксис

Синтаксис ALTER TABLE для добавления столбца в таблицу Oracle:

Читайте также:  Анализ нагрузки на веб-сервер linux. мониторинг нагрузки web-сервера.

ALTER TABLE table_name
ADD column_name column-definition;

Пример

Рассмотрим на примере, как добавить столбец в таблицу Oracle с помощью оператора ALTER TABLE.

Например:

  ADD customer_name varchar2(45);

В этом примере оператор ALTER TABLE добавит столбец customer_name к таблице customers (клиенты).

Добавление нескольких столбцов в таблицу

Синтаксис

Синтаксис ALTER TABLE для добавления несколько столбцов в существующую таблицу Oracle:

ALTER TABLE table_name ADD (column_1 column-definition, column_2 column-definition, …

column_n column_definition);

Пример

Рассмотрим пример, который показывает, как добавить несколько столбцов в таблицу Oracle с помощью оператора ALTER TABLE.

Например:

  ADD (customer_name varchar2(45),

В этом примере ALTER TABLE добавит в таблицу customers два столбца, customer_name varchar2 (45) и city varchar2 (40).

Изменить столбец в таблице

Синтаксис

Синтаксис ALTER TABLE для изменения столбца в существующей таблице Oracle:

ALTER TABLE table_name
MODIFY column_name column_type;

Пример

Рассмотрим пример, который показывает, как изменить столбец в таблице Oracle с помощью оператора ALTER TABLE.

Например:

  MODIFY customer_name varchar2(100) not null;

В этом примере ALTER TABLE будет модифицировать столбец customer_name в тип данных VARCHAR2 (100) и указывает столбцу не принимать значения NULL.

Изменение нескольких столбцов в таблице

Синтаксис

Синтаксис ALTER TABLE для редактирования нескольких столбцов в существующей таблице Oracle:

ALTER TABLE table_name MODIFY (column_1 column_type, column_2 column_type, …

column_n column_type);

Пример

Рассмотрим пример, который показывает, как изменить несколько столбцов в таблице Oracle с помощью оператора ALTER TABLE.

Например:

  MODIFY (customer_name varchar2(100) not null,

В этом примере ALTER TABLE модифицирует столбцы customer_name и city.

Удаление столбца из таблицы

Синтаксис

Синтаксис ALTER TABLE для удаления столбца в существующей таблице Oracle:

ALTER TABLE table_name
DROP COLUMN column_name;

Пример

Рассмотрим пример, который показывает, как удалить столбец из таблицы Oracle с помощью оператора ALTER TABLE.

Например:

  DROP COLUMN customer_name;

В этом примере Oracle/PLSQL ALTER TABLE удалит столбец customer_name из таблицы customers.

Переименование столбца в таблице

Синтаксис

Начиная с Oracle 9i Release 2, вы можете переименовать столбец.
Синтаксис ALTER TABLE для переименования столбца в существующей таблице Oracle,:

ALTER TABLE table_name
RENAME COLUMN old_name to new_name;

Пример

Рассмотрим пример, который показывает, как переименовать столбец в таблице Oracle с помощью оператора ALTER TABLE.

Например:

  RENAME COLUMN customer_name to cname;

В этом примере Oracle/PLSQL ALTER TABLE переименует столбец customer_name в cname.

Переименовать таблицу

Синтаксис

Синтаксис ALTER TABLE для переименования таблицы Oracle:

ALTER TABLE table_name
RENAME TO new_table_name;

Пример

Рассмотрим пример, который показывает, как переименовать таблицу в Oracle с помощью оператора ALTER TABLE.

Например:

В этом примере Oracle/PLSQL ALTER TABLE переименует таблицу customers в contacts.

Практическое упражнение №1:

На основании таблицы departments ниже, переименовать таблицу departments в depts.

( department_id number(10) not null,  department_name varchar2(50) not null,  CONSTRAINT departments_pk PRIMARY KEY (department_id)

Решение для практического упражнения №1:

Следующий оператор Oracle/PLSQL ALTER TABLE переименует таблицу departments в depts:

Практическое упражнение №2:

На основании таблицы employees ниже, добавьте столбец с наименованием bonus, и типом данных number (6).

( employee_number number(10) not null,  employee_name varchar2(50) not null,  department_id number(10),  CONSTRAINT employees_pk PRIMARY KEY (employee_number)

Решение для практического упражнения №2:

Следующий оператор Oracle/PLSQL ALTER TABLE добавит столбец bonus к таблице employees:

Практическое упражнение №3:

На основании таблицы customers ниже, добавьте два столбца. Один столбец с названием contact_name и типом данных VARCHAR2 (50), второй столбец с названием last_contacted и типом данных DATE.

( customer_id number(10) not null,  customer_name varchar2(50) not null,  CONSTRAINT customers_pk PRIMARY KEY (customer_id)

Решение для практического упражнения №3:

Следующий оператор Oracle/PLSQL ALTER TABLE добавит столбцы contact_name и last_contacted в таблицу customers:

  ADD (contact_name varchar2(50),

Практическое упражнение №4:

На основании таблицы employees ниже, модифицируйте тип данных столбца employee_name в varchar2 (80).

( employee_number number(10) not null,  employee_name >varchar2(50) not null,  department_id number(10),  CONSTRAINT employees_pk PRIMARY KEY (employee_number)

Решение для практического упражнения №4:

Следующий оператор Oracle/PLSQL ALTER TABLE модифицирует тип данных для столбца employee_name в varchar2 (80):

  MODIFY employee_name varchar2(80);

Практическое упражнение №5:

На основании таблицы customers ниже, модифицируйте столбец customer_name, чтобы он не мог принимать значения NULL и изменить типа данных в столбце state в varchar2 (2).

( customer_id number(10) not null,  customer_name varchar2(50),  CONSTRAINT customers_pk PRIMARY KEY (customer_id)

Решение для практического упражнения №5:

Следующий оператор Oracle/PLSQL ALTER TABLE модифицирует столбцы customer_name и state в таблице customers:

  MODIFY (customer_name varchar2(50) not null,

Практическое упражнение №6:

На основании таблицы employees ниже, удалить столбец salary.

( employee_number number(10) not null,  employee_name varchar2(50) not null,  department_id number(10),  CONSTRAINT employees_pk PRIMARY KEY (employee_number)

Решение для практического упражнения №6:

Следующий оператор Oracle/PLSQL ALTER TABLE удалит столбец salary из таблицы employees:

Практическое упражнение №7:

На основании таблицы departments ниже, переименовать столбец department_name в dept_name.

( department_id number(10) not null,  department_name varchar2(50) not null,  CONSTRAINT departments_pk PRIMARY KEY (department_id)

Решение для практического упражнения №7:

Следующий оператор Oracle/PLSQL ALTER TABLE переименует столбец department_name в dept_name в таблице departments:

  RENAME COLUMN department_name to dept_name;

Источник: http://oracleplsql.ru/alter-table.html

Как создать идентификатор с AUTO_INCREMENT на Oracle?

Похоже, что в Oracle нет концепции AUTO_INCREMENT, вплоть до версии 11g.

Как создать столбец, который ведет себя как автоматическое увеличение в Oracle 11g?

В Oracle с Oracle 11g нет таких объектов, как столбцы «auto_increment» или «identity» в Oracle. Однако вы можете легко смоделировать его с помощью последовательности и триггера:

Определение таблицы:

CREATE TABLE departments ( ID NUMBER(10) NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL); ALTER TABLE departments ADD ( CONSTRAINT dept_pk PRIMARY KEY (ID)); CREATE SEQUENCE dept_seq START WITH 1;

Определение триггера:

CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROW BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual; END; /

ОБНОВИТЬ:

Столбец IDENTITY теперь доступен на Oracle 12c:

create table t1 ( c1 NUMBER GENERATED by default on null as IDENTITY, c2 VARCHAR2(10) );

или указать начальные и инкрементные значения, а также не допускать вставки в столбец идентификатора ( GENERATED ALWAYS ) (опять же, только Oracle 12c +)

create table t1 ( c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1), c2 VARCHAR2(10) );

SYS_GUID возвращает идентификатор GUID – глобально уникальный идентификатор. SYS_GUID – это RAW(16) . Он не генерирует увеличивающееся числовое значение.

Если вы хотите создать инкрементный числовой ключ, вам нужно создать последовательность.

CREATE SEQUENCE name_of_sequence START WITH 1 INCREMENT BY 1 CACHE 100;

Затем вы будете использовать эту последовательность в своем заявлении INSERT

INSERT INTO name_of_table( primary_key_column, ) VALUES( name_of_sequence.nextval, );

Или вы можете определить триггер, который автоматически заполняет значение первичного ключа, используя последовательность

CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN SELECT name_of_sequence.nextval INTO :new.primary_key_column FROM dual; END;

Если вы используете Oracle 11.1 или новее, вы можете немного упростить триггер

CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN :new.primary_key_column := name_of_sequence.nextval; END;

Если вы действительно хотите использовать SYS_GUID

CREATE TABLE table_name ( primary_key_column raw(16) default sys_guid() primary key, )

В Oracle 12c вперед вы можете сделать что-то вроде:

CREATE TABLE MAPS ( MAP_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), MAP_NAME VARCHAR(24) NOT NULL, UNIQUE (MAP_ID, MAP_NAME) )

И в Oracle (Pre 12c).

— create table CREATE TABLE MAPS ( MAP_ID INTEGER NOT NULL , MAP_NAME VARCHAR(24) NOT NULL, UNIQUE (MAP_ID, MAP_NAME) ) —create sequence CREATE SEQUENCE MAPS_SEQ; — create tigger using the sequence CREATE OR REPLACE TRIGGER MAPS_TRG BEFORE INSERT ON MAPS FOR EACH ROW WHEN (new.MAP_ID IS NULL) BEGIN SELECT MAP_ID_SEQ.NEXTVAL INTO :new.MAP_ID FROM dual; END; / —enable the trigger ALTER TRIGGER MAPS_TRG ENABLE ;

Вот три варианта:

  1. числовое . Простое увеличение числового значения, например 1,2,3, ….
  2. GUID . глобально универсальный идентификатор, как тип данных RAW .
  3. GUID (строка) . То же, что и выше, но как строка, которая может быть проще обрабатывать на некоторых языках.

x – тождественный столбец. Замените FOO своим именем таблицы в каждом из примеров.

— numerical identity, eg 1,2,3… create table FOO ( x number primary key ); create sequence FOO_seq; create or replace trigger FOO_trg before insert on FOO for each row begin select FOO_seq.nextval into :new.x from dual; end; / — GUID identity, eg 7CFF0C304187716EE040488AA1F9749A — use the commented out lines if you prefer RAW over VARCHAR2. create table FOO ( x varchar(32) primary key — string version — x raw(32) primary key — raw version ); create or replace trigger FOO_trg before insert on FOO for each row begin select cast(sys_guid() as varchar2(32)) into :new.x from dual; — string version — select sys_guid() into :new.x from dual; — raw version end; /

Обновить:

Oracle 12c представляет эти два варианта, которые не зависят от триггеров:

create table mytable(id number default mysequence.nextval); create table mytable(id number generated as identity);

Первый использует последовательность традиционным способом; второй управляет значением внутри.

Предполагая, что вы имеете в виду столбец, подобный столбцу идентификации SQL Server?

В Oracle вы используете SEQUENCE для достижения той же функциональности. Я посмотрю, смогу ли найти хорошую ссылку и разместить ее здесь.

Обновление: похоже, вы нашли его сами. Вот ссылка: http://www.techonthenet.com/oracle/sequences.php

В Oracle Database 12c был введен Identity, автоинкрементный (сгенерированный системой) столбец. В предыдущих версиях базы данных (до 11g) вы обычно реализуете Identity, создавая последовательность и триггер. Начиная с 12c, вы можете создать свою собственную таблицу и определить столбец, который должен быть сгенерирован как Identity.

В следующей статье объясняется, как ее использовать:

Столбцы идентификаторов – новая запись в Oracle Database 12c

Trigger и Sequence могут использоваться, когда вы хотите сериализованный номер, который каждый может легко прочитать / запомнить / понять. Но если вы не хотите управлять идентификационной колонкой (например, emp_id) таким образом, а значение этого столбца не так много, вы можете использовать SYS_GUID() создания таблицы, чтобы получить автоматическое увеличение таким образом.

CREATE TABLE (emp_id RAW(16) DEFAULT SYS_GUID() PRIMARY KEY, name VARCHAR2(30));

Теперь ваш столбец emp_id примет «глобально уникальное значение идентификатора». вы можете вставить значение в таблицу, игнорируя столбец emp_id следующим образом.

INSERT INTO (name) VALUES ('name value');

Таким образом, он вставляет уникальное значение в ваш столбец emp_id .

Начиная с Oracle 12c существует поддержка столбцов Identity одним из двух способов:

  1. Sequence + Table – в этом решении вы все равно создаете последовательность, как обычно, тогда вы используете следующий DDL:

    CREATE TABLE MyTable (ID NUMBER DEFAULT MyTable_Seq.NEXTVAL , …)

  2. Только таблица. В этом решении никакая последовательность явно не указана. Вы должны использовать следующий DDL:

    CREATE TABLE MyTable (ID NUMBER GENERATED AS IDENTITY , …)

Если вы используете первый способ, он обратно совместим с существующим способом выполнения действий. Второй – немного более простой и более строгий с остальными системами RDMS.

он называется Identity Columns и он доступен только из Oracle Oracle 12c

CREATE TABLE identity_test_tab ( id NUMBER GENERATED ALWAYS AS IDENTITY, description VARCHAR2 (30) );

пример вставки в Identity Columns как Identity Columns ниже

INSERT INTO identity_test_tab (description) VALUES ('Just DESCRIPTION');

Читайте также:  Включить аудит доступа к файлам windows в картинках

вы НЕ можете вставить, как показано ниже

INSERT INTO identity_test_tab (id, description) VALUES (NULL, 'ID=NULL and DESCRIPTION'); INSERT INTO identity_test_tab (id, description) VALUES (999, 'ID=999 and DESCRIPTION');

полезная ссылка

Вот полное решение для обработки исключений / ошибок для автоматического увеличения, это решение обратно совместимо и будет работать на 11g & 12c, особенно если приложение находится в производстве.

Пожалуйста, замените «TABLE_NAME» на соответствующее имя таблицы

—checking if table already exisits BEGIN EXECUTE IMMEDIATE 'DROP TABLE TABLE_NAME'; EXCEPTION WHEN OTHERS THEN NULL; END; / —creating table CREATE TABLE TABLE_NAME ( ID NUMBER(10) PRIMARY KEY NOT NULL, . . . ); —checking if sequence already exists BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE TABLE_NAME_SEQ'; EXCEPTION WHEN OTHERS THEN NULL; END; —creating sequence / CREATE SEQUENCE TABLE_NAME_SEQ START WITH 1 INCREMENT BY 1 MINVALUE 1 NOMAXVALUE NOCYCLE CACHE 2; —granting rights as per required user group / GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE_NAME TO USER_GROUP; — creating trigger / CREATE OR REPLACE TRIGGER TABLE_NAME_TS BEFORE INSERT OR UPDATE ON TABLE_NAME FOR EACH ROW BEGIN — auto increment column SELECT TABLE_NAME_SEQ.NextVal INTO :New.ID FROM dual; — You can also put some other required default data as per need of your columns, for example SELECT SYS_CONTEXT('USERENV', 'SESSIONID') INTO :New.SessionID FROM dual; SELECT SYS_CONTEXT('USERENV','SERVER_HOST') INTO :New.HostName FROM dual; SELECT SYS_CONTEXT('USERENV','OS_USER') INTO :New.LoginID FROM dual; . . . END; /

Так я сделал это в существующей таблице и столбце (named id):

UPDATE table SET id=ROWNUM; DECLARE maxval NUMBER; BEGIN SELECT MAX(id) INTO maxval FROM table; EXECUTE IMMEDIATE 'DROP SEQUENCE table_seq'; EXECUTE IMMEDIATE 'CREATE SEQUENCE table_seq START WITH '|| TO_CHAR(TO_NUMBER(maxval)+1) ||' INCREMENT BY 1 NOMAXVALUE'; END; CREATE TRIGGER table_trigger BEFORE INSERT ON table FOR EACH ROW BEGIN :new.id := table_seq.NEXTVAL; END; create trigger t1_trigger before insert on AUDITLOGS for each row begin select t1_seq.nextval into :new.id from dual; end;

только мне нужно просто изменить имя таблицы (AUDITLOGS) с именем вашей таблицы и new.id с именем new.column_name

FUNCTION GETUNIQUEID_2 RETURN VARCHAR2 AS v_curr_id NUMBER; v_inc NUMBER; v_next_val NUMBER; pragma autonomous_transaction; begin CREATE SEQUENCE sequnce START WITH YYMMDD0000000001 INCREMENT BY 1 NOCACHE select sequence.nextval into v_curr_id from dual; if(substr(v_curr_id,0,6)= to_char(sysdate,'yymmdd')) then v_next_val := to_number(to_char(SYSDATE+1, 'yymmdd') || '0000000000'); v_inc := v_next_val — v_curr_id; execute immediate ' alter sequence sequence increment by ' || v_inc ; select sequence.nextval into v_curr_id from dual; execute immediate ' alter sequence sequence increment by 1'; else dbms_output.put_line('exception : file not found'); end if; RETURN 'ID'||v_curr_id; END; FUNCTION UNIQUE2( seq IN NUMBER ) RETURN VARCHAR2 AS i NUMBER := seq; s VARCHAR2(9); r NUMBER(2,0); BEGIN WHILE i > 0 LOOP r := MOD( i, 36 ); i := ( i — r ) / 36; IF ( r < 10 ) THEN s := TO_CHAR(r) || s; ELSE s := CHR( 55 + r ) || s; END IF; END LOOP; RETURN 'ID'||LPAD( s, 14, '0' ); END;

Возможно, просто попробуйте этот простой скрипт:

http://www.hlavaj.sk/ai.php

Результат:

CREATE SEQUENCE TABLE_PK_SEQ; CREATE OR REPLACE TRIGGER TR_SEQ_TABLE BEFORE INSERT ON TABLE FOR EACH ROW BEGIN SELECT TABLE_PK_SEQ.NEXTVAL INTO :new.PK FROM dual; END;

Источник: http://sql.fliplinux.com/auto_increment-x430.html

поле SQL AUTO ИНКРЕМЕНТ

Автоинкрементная в новой записи будет генерировать уникальный номер в таблицу во.

Поле AUTO ИНКРЕМЕНТ

Как правило, мы хотим, чтобы вставить новую запись каждый раз, автоматически создает значение поля первичного ключа.

Мы можем создать поле Автоинкрементная в таблице.

Синтаксис для MySQL

Следующий SQL заявление «Лица» таблицы в столбце «ИД» определяется как поля первичного ключа автоинкрементируемого:

CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (ID)

)

MySQL использует ключевое слово AUTO_INCREMENT для выполнения автоинкрементным.

По умолчанию начальное значение AUTO_INCREMENT равно 1, и увеличивается на 1 для каждой новой записи.

Пусть последовательность AUTO_INCREMENT начать с другого значения, используйте следующий синтаксис SQL:

ALTER TABLE Persons AUTO_INCREMENT=100

Для того, чтобы вставить новую запись в таблице «Лица», мы не должны «ID» столбец заранее заданное значение (автоматически добавляет уникальное значение):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

SQL выше утверждение будет вставить новую запись в таблице «Лица». колонка «ID» присваивается уникальное значение. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».

Синтаксис для SQL Server

Следующий SQL заявление «Лица» таблицы в столбце «ИД» определяется как поля первичного ключа автоинкрементируемого:

CREATE TABLE Persons ( ID int IDENTITY(1,1) PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255)

)

MS SQL Server, используя ключевое слово IDENTITY выполнить Автоинкрементная.

В приведенном выше примере, начало значение тождественности равно 1, и увеличивается на 1 для каждой новой записи.

Совет: Чтобы указать столбец «ID» к исходным шагом 10 и 5, пожалуйста идентичность персонами (10,5).

Для того, чтобы вставить новую запись в таблице «Лица», мы не должны «ID» столбец заранее заданное значение (автоматически добавляет уникальное значение):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

SQL выше утверждение будет вставить новую запись в таблице «Лица». колонка «ID» присваивается уникальное значение. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».

Синтаксис для доступа

Следующий SQL заявление «Лица» таблицы в столбце «ИД» определяется как поля первичного ключа автоинкрементируемого:

CREATE TABLE Persons ( ID Integer PRIMARY KEY AUTOINCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255)

)

MS Access, используя ключевое слово AUTOINCREMENT выполнить Автоинкрементная.

По умолчанию начальное значение AUTOINCREMENT равно 1, и увеличивается на 1 для каждой новой записи.

Совет: Чтобы указать столбец «ID» к исходной с шагом 10 и 5, пожалуйста , Autoincrement к Autoincrement (10,5).

Для того, чтобы вставить новую запись в таблице «Лица», мы не должны «ID» столбец заранее заданное значение (автоматически добавляет уникальное значение):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

SQL выше утверждение будет вставить новую запись в таблице «Лица». колонка «ID» присваивается уникальное значение. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».

Синтаксис для Oracle

В Oracle, код немного сложнее.

Необходимо создать Автоинкрементная поля от объекта последовательности (который генерирует последовательность цифр).

Пожалуйста, используйте следующий синтаксис CREATE SEQUENCE:

CREATE SEQUENCE seq_person MINVALUE 1 START WITH 1 INCREMENT BY 1

CACHE 10

Приведенный выше код создает объект последовательности под названием seq_person, который, начиная с 1 и увеличивается на 1. Значения кэша объектов 10 для повышения производительности. Кэш опция обеспечивает быстрый доступ к числу значений последовательности, которые будут сохранены.

Для того, чтобы вставить новую запись в таблице «Лица», мы должны использовать NEXTVAL функцию (эта функция возвращает следующее значение из последовательности seq_person):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

SQL выше утверждение будет вставить новую запись в таблице «Лица». столбец «ID» присвоен следующий номер в последовательности из seq_person. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».

Источник: http://www.w3big.com/ru/sql/sql-autoincrement.html

SQL AUTO ИНКРЕМЕНТ поле

Автоинкрементная позволяет уникальное число, генерируемое, когда новая запись вставляется в таблицу.

AUTO ИНКРЕМЕНТ поле

Очень часто мы хотели бы значение поля первичного ключа, которая будет создана автоматически каждый раз, когда новая запись вставляется.

Мы хотели бы создать поле Автоинкрементная в таблице.

Синтаксис для MySQL

Следующий SQL заявление определяет «ID» столбец , чтобы быть первичным ключом в автоприращением «Persons» таблицы:

CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (ID)

)

MySQL использует ключевое слово AUTO_INCREMENT, чтобы выполнить функцию автоматического приращения.

По умолчанию начальное значение для AUTO_INCREMENT равно 1, и она будет увеличиваться на 1 для каждой новой записи.

Для того, чтобы последовательность AUTO_INCREMENT начать с другого значения, используйте следующую инструкцию SQL:

ALTER TABLE Persons AUTO_INCREMENT=100

Для того, чтобы вставить новую запись в «Persons» таблицы, мы не должны указать значение для «ID» столбце (уникальное значение будет добавлено автоматически):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

SQL выше утверждение будет вставить новую запись в «Persons» таблицы. «ID» столбец будет присвоено уникальное значение. «FirstName» столбец должен быть установлен на «Lars» и «LastName» столбец должен быть установлен на «Monsen» .

Синтаксис для SQL Server

Следующий SQL заявление определяет «ID» столбец , чтобы быть первичным ключом в автоприращением «Persons» таблицы:

CREATE TABLE Persons ( ID int IDENTITY(1,1) PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255)

)

MS SQL Server использует Идентичность ключевое слово, чтобы выполнить функцию автоматического приращения.

В приведенном выше примере начальное значение для Идентичность 1, и она будет увеличиваться на 1 для каждой новой записи.

Совет: Для того, чтобы указать , что «ID» столбец должен начинаться при значении 10 и приращении на 5, изменить его на тождестве (10,5).

Для того, чтобы вставить новую запись в «Persons» таблицы, мы не должны указать значение для «ID» столбце (уникальное значение будет добавлено автоматически):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

SQL выше утверждение будет вставить новую запись в «Persons» таблицы. «ID» столбец будет присвоено уникальное значение. «FirstName» столбец должен быть установлен на «Lars» и «LastName» столбец должен быть установлен на «Monsen» .

Синтаксис для доступа

Следующий SQL заявление определяет «ID» столбец , чтобы быть первичным ключом в автоприращением «Persons» таблицы:

CREATE TABLE Persons ( ID Integer PRIMARY KEY AUTOINCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255)

)

MS Access использует AUTOINCREMENT ключевое слово, чтобы выполнить функцию автоматического приращения.

По умолчанию начальное значение для Autoincrement равно 1, и она будет увеличиваться на 1 для каждой новой записи.

Совет: Для того, чтобы указать , что «ID» столбец должен начинаться при значении 10 и приращении на 5, изменить автоинкрементного к автоинкрементация (10,5).

Для того, чтобы вставить новую запись в «Persons» таблицы, мы не должны указать значение для «ID» столбце (уникальное значение будет добавлено автоматически):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

SQL выше утверждение будет вставить новую запись в «Persons» таблицы. «P_Id» колонка будет присвоено уникальное значение. «FirstName» столбец должен быть установлен на «Lars» и «LastName» столбец должен быть установлен на «Monsen» .

Синтаксис для Oracle

В Oracle код немного сложнее.

Вы должны создать поле Автоинкрементная с объектом последовательности (этот объект генерирует последовательность чисел).

Используйте следующий синтаксис CREATE SEQUENCE:

CREATE SEQUENCE seq_person MINVALUE 1 START WITH 1 INCREMENT BY 1

CACHE 10

Приведенный выше код создает объект последовательности под названием seq_person, который начинается с 1 и будет увеличиваться на 1. Он также будет кэшировать до 10 значений для повышения производительности. Опция кэша определяет, сколько значений последовательности будут сохранены в памяти для быстрого доступа.

Для того, чтобы вставить новую запись в «Persons» таблицы, мы будем использовать функцию NEXTVAL (эта функция возвращает следующее значение из последовательности seq_person):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

SQL выше утверждение будет вставить новую запись в «Persons» таблицы. «ID» столбец будет присвоен следующий номер из последовательности seq_person. «FirstName» столбец должен быть установлен на «Lars» и «LastName» столбец должен быть установлен на «Monsen» .

Источник: http://www.w3bai.com/ru/sql/sql_autoincrement.html

Ссылка на основную публикацию