Как установить начальное значение и автоинкремент в mysql?

Syntax for SQL Server

The following SQL statement defines the «Personid» column to be an auto-increment primary key field in the «Persons» table:

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

The MS SQL Server uses the IDENTITY keyword to perform an auto-increment feature.

In the example above, the starting value for IDENTITY is 1, and it will increment by 1 for each new record.

Tip: To specify that the «Personid» column should start at value 10 and increment by 5, change
it to IDENTITY(10,5).

To insert a new record into the «Persons» table, we will NOT have to specify a value for the «Personid» column (a unique value will be added automatically):

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

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

Результирующие наборыResult Sets

В зависимости от того, указали ли вы какие-либо параметры для таблицы, содержащей столбец идентификаторов, инструкция DBCC CHECKIDENT возвращает следующее сообщение для всех операций за исключением одной.Whether or not you specify any options for a table that contains an identity column, DBCC CHECKIDENT returns the following message for all operations except one. Эта операция указывает новое начальное значение.That operation is specifying a new seed value.

При использовании инструкции DBCC CHECKIDENT для указания нового начального значения с помощью RESEED new_reseed_value возвращается следующее сообщение.When DBCC CHECKIDENT is used to specify a new seed value by using RESEED new_reseed_value, the following message is returned.

Ограничение внешнего ключа SQL

Внешний ключ — это ключ, используемый для связывания двух таблиц друг с другом.

Внешний ключ — это поле (или набор полей) в одной таблице, ссылающееся на первичный ключ в другой таблице.

Таблица, содержащая внешний ключ, называется дочерней таблицей, а таблица, содержащая выбранный ключ, называется ссылочной или родительской таблицей.

Посмотрите на следующие две таблицы:

ТАблица «персоны»:

PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20

«Orders» table:

OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Обратите внимание, что столбец «PersonID» в таблице «Orders» указывает на столбец «PersonID» в таблице «лица». Столбец «PersonID» в таблице «лица» является первичным ключом в таблице «лица»

Столбец «PersonID» в таблице «лица» является первичным ключом в таблице «лица».

Столбец «PersonID» в таблице «Orders» является внешним ключом в таблице «Orders».

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

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

Set AUTO_INCREMENT starting value

Now that you’ve created a table using the AUTO_INCREMENT attribute, how can you change the starting value for the AUTO_INCREMENT field if you don’t want to start at 1?

You can use the ALTER TABLE statement to change or set the next value assigned by the AUTO_INCREMENT.

Syntax

In MySQL, the syntax to change the starting value for an AUTO_INCREMENT column using the ALTER TABLE statement is:

ALTER TABLE table_name AUTO_INCREMENT = start_value;
table_name
The name of the table whose AUTO_INCREMENT value you wish to change. Since a table in MySQL can only contain one AUTO_INCREMENT column, you are only required to specify the table name that contains the sequence. You do not need to specify the name of the column that contains the AUTO_INCREMENT value.
start_value
The next value in the sequence to assign in the AUTO_INCREMENT column.

Example

Let’s look at an example of how to change the starting value for the AUTO_INCREMENT column in a table in MySQL.

For example:

ALTER TABLE contacts AUTO_INCREMENT = 50;

This MySQL AUTO_INCREMENT example would change the next value in the AUTO_INCREMENT field (ie: next value in the sequence) to 50 for the contact_id field in the contacts table.

Example

Let’s look at an example of how to use a sequence or the AUTO_INCREMENT attribute in MySQL.

For example:

CREATE TABLE contacts
( contact_id INT(11) NOT NULL AUTO_INCREMENT,
  last_name VARCHAR(30) NOT NULL,
  first_name VARCHAR(25),
  birthday DATE,
  CONSTRAINT contacts_pk PRIMARY KEY (contact_id)
);

This MySQL AUTO_INCREMENT example creates a table called contacts which has 4 columns and one primary key:

  • The first column is called contact_id which is created as an INT datatype (maximum 11 digits in length) and can not contain NULL values. It is set as an AUTO_INCREMENT field which means that it is an autonumber field (starting at 1, and incrementing by 1, unless otherwise specified.)
  • The second column is called last_name which is a VARCHAR datatype (maximum 30 characters in length) and can not contain NULL values.
  • The third column is called first_name which is a VARCHAR datatype (maximum 25 characters in length) and can contain NULL values.
  • The fourth column is called birthday which is a DATE datatype and can contain NULL values.
  • The primary key is called contacts_pk and is set to the contact_id column.

Тестирование

этой ссылке

  • Всего три серии тестов с длиной текстового поля в записи 80, 800 и 8000 байт соответственно (количество символов в тестовой программе будет в два раза меньше в каждом из случаев, так как один символ в NVARCHAR занимает два байта).
  • В каждой из серий — по 5 запусков, каждый из которых добавляет по 10000 записей в каждую из таблиц. По результатам каждого из запусков можно будет проследить зависимость времени вставки от количества строк, уже находящихся в таблице.
  • Перед началом каждой из серий таблицы полностью очищаются.
  • Использование генерации GUID на стороне базы данных в разы медленнее, чем генерации на стороне клиента. Это связано с затратами на чтение только что добавленного идентификатора. Детали этой проблемы рассмотрены в конце статьи.
  • Вставка записей с автоинкрементным ключом даже немного медленнее, чем с GUID-ом, присвоенным на клиенте.
  • Разницы между последовательным и непоследовательным GUID практически не видно на небольших записях. На больших записях разница появляется с ростом количества строк в таблице, но она не выглядит существенной.

УГУЪ Oracle µДУп·Ё

ФЪ Oracle ЦРЈ¬ґъВлЙФОўёґФУТ»µгЎЈ

Дъ±ШРлНЁ№э sequence ¶ФґґЅЁ auto-increment ЧЦ¶ОЈЁёГ¶ФПуЙъіЙКэЧЦРтБРЈЎЈ

ЗлК№УГПВГжµД CREATE SEQUENCE Уп·ЁЈє

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

ЙПГжµДґъВлґґЅЁГыОЄ seq_person µДРтБР¶ФПуЈ¬ЛьТФ 1 ЖрКјЗТТФ 1 µЭФцЎЈёГ¶ФПу»єґж 10 ёцЦµТФМбёЯРФДЬЎЈCACHE СЎПо№ж¶ЁБЛОЄБЛМбёЯ·ГОКЛЩ¶ИТЄґжґў¶аЙЩёцРтБРЦµЎЈ

ТЄФЪ «Persons» ±нЦРІеИлРВјЗВјЈ¬ОТГЗ±ШРлК№УГ nextval єЇКэЈЁёГєЇКэґУ seq_person РтБРЦРИЎ»ШПВТ»ёцЦµЈЈє

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

ЙПГжµД SQL Упѕд»бФЪ «Persons» ±нЦРІеИлТ»МхРВјЗВјЎЈ»P_Id» µДёіЦµКЗАґЧФ seq_person РтБРµДПВТ»ёцКэЧЦЎЈ»FirstName» »б±»ЙиЦГОЄ «Bill»Ј¬»LastName» БР»б±»ЙиЦГОЄ «Gates»ЎЈ

Syntax for Oracle

In Oracle the code is a little bit more tricky.

You will have to create an auto-increment field with the sequence object (this object generates a number sequence).

Use the following CREATE SEQUENCE syntax:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;

The code above creates a sequence object called seq_person, that starts with 1 and will increment by 1.
It will also cache up to 10 values for performance. The cache option specifies how many sequence values will be stored in memory for faster access.

To insert a new record into the «Persons» table, we will have to use the nextval function (this function retrieves the next value from seq_person
sequence):

INSERT INTO Persons (Personid,FirstName,LastName)
VALUES (seq_person.nextval,’Lars’,’Monsen’);

The SQL statement above would insert a new record into the «Persons» table. The «Personid» column would be assigned the next number from the seq_person
sequence. The «FirstName» column would be set to «Lars» and the «LastName» column would be set to «Monsen».

SQL References

SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE

MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE

Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK

Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION

SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN

Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR

Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME

MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase

Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val

Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year

Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric

SQL OperatorsSQL Data TypesSQL Quick Ref

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

Следующая инструкция SQL определяет столбец «Personid» как поле первичного ключа автоинкремента в таблице «Persons»:

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

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

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

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

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

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

Приведенная выше инструкция SQL вставит новую запись в таблицу» Persons».
Столбцу «Personid» будет присвоено уникальное значение.
Столбец «FirstName» будет иметь значение «Lars», а столбец «LastName»- «Monsen».

Комментарии

Если тип этого столбца не равен Int16, Int32 или Int64, то при задании этого свойства DataType свойство приводится к типу Int32.If the type of this column is not Int16, Int32, or Int64 when this property is set, the DataType property is coerced to Int32. Если это вычисляемый столбец, создается исключение.An exception is generated if this is a computed column. ExpressionСвойство задано.The Expression property is set. Увеличенное значение используется только в том случае, если значение строки для этого столбца при добавлении в коллекцию Columns равно значению по умолчанию.The incremented value is used only if the row’s value for this column, when added to the columns collection, is equal to the default value.

Новую строку можно создать с помощью ItemArray свойства DataRow класса и передать массив значений.You can create a new row using the ItemArray property of the DataRow class and passing in an array of values. Это потенциальная проблема для столбца со значением AutoIncrement , так как его значение создается автоматически.This is a potential problem for a column with its AutoIncrement set to , because its value is generated automatically. Чтобы использовать ItemArray свойство, поместите в позицию столбца в массиве.To use the ItemArray property, place in the column’s position in the array. Дополнительные сведения см. в описании ItemArray свойства DataRow класса.For more information, see the ItemArray property of the DataRow class.

Если тип столбца — SqlInt16 или SqlInt32 , AutoIncrement не будет работать.If the type of the column is SqlInt16 or SqlInt32, AutoIncrement will not work. Вместо этого используйте Int16 или Int32.Use Int16 or Int32 instead.

Если тип столбца — SqlInt64 или SqlDecimal , AutoIncrement будет работать только частично.If the type of the column is SqlInt64 or SqlDecimal, AutoIncrement will only partially work. Вместо этого используйте Int64 или Decimal.Use Int64 or Decimal instead.

При AutoIncrementStep добавлении значения к текущему значению проверка переполнения подавляется.When the AutoIncrementStep value is added to the current value, the overflow check is suppressed.

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

Синтаксис для 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».

Предыдущее: утверждение TABLE SQL ALTER
Далее: SQL CREATE VIEW, REPLACE VIEW, DROP VIEW заявление

Изменение начального значенияChanging the Seed Value

Начальное значение представляет собой значение, вставляемое в столбец идентификаторов для первой строки, загружаемой в таблицу.The seed value is the value inserted into an identity column for the first row loaded into the table. Все последующие строки содержат текущее значение идентификатора, увеличенное на значение приращения, где текущее значение идентификатора представляет собой последнее значение идентификатора, сформированное для таблицы или представления.All subsequent rows contain the current identity value plus the increment value where current identity value is the last identity value generated for the table or view.

Инструкцию DBCC CHECKIDENT нельзя использовать для следующих задач:You can’t use DBCC CHECKIDENT for the following tasks:

  • Изменение исходного начального значения, которое было указано для столбца идентификаторов при создании таблицы или представления.Change the original seed value specified for an identity column when the table or view was created.

  • Повторное указание начального значения для существующих строк в таблице или представлении.Reseed existing rows in a table or view.

Чтобы изменить исходное начальное значение и повторно задать начальное значение для каких-либо существующих строк, удалите столбец идентификаторов и создайте его повторно, указав новое начальное значение.To change the original seed value and reseed any existing rows, drop the identity column and recreate it specifying the new seed value. Если таблица содержит данные, то номера идентификаторов добавляются к существующим строкам с учетом указанного начального значения и приращения.When the table contains data, the identity numbers are added to the existing rows with the specified seed and increment values. Порядок, в котором выполняется обновление строк, не гарантирован.The order in which the rows are updated isn’t guaranteed.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector