У цьому розділі ми збираємося зрозуміти роботу Серійний номер PostgreSQL псевдотипу, що дозволяє визнач стовпці з автоматичним збільшенням в таблицях. І ми теж бачимо приклади з Псевдотип PostgreSQL Serial .
Що таке псевдотип PostgreSQL Serial?
У PostgreSQL ми маємо один конкретний тип генератора об’єктів бази даних, відомий як Серійний , який звик створити послідовність цілих чисел які часто використовуються як a Первинний ключ в таблиці.
Послідовність може бути згенерована за допомогою SERIAL псевдотип , поки ми створюємо нову таблицю, як ми можемо бачити в наступній команді:
CREATE TABLE table_name( ID SERIAL );
PostgreSQL робить наступне, якщо ми надаємо SERIAL псевдотип до ID колонка:
- По-перше, PostgreSQL створить об’єкт послідовності, а потім встановить наступне значення, створене послідовністю, як попередньо визначене значення конкретного стовпця.
- Після цього PostgreSQL покращить a Обмеження NOT NULL до стовпець ID оскільки послідовність завжди створює ціле число, яке є a ненульове значення .
- Нарешті PostgreSQL надасть власника послідовності колонка ID; як результат, об'єкт послідовності видаляється, коли таблиця або стовпець ID випадає.
Примітка. Ми можемо використовувати обидві команди для визначення псевдотипу Serial, оскільки обидві наведені нижче команди схожі одна на одну.
CREATE TABLE table_name( ID SERIAL );
CREATE SEQUENCE table_name_ID_seq; CREATE TABLE table_name ( ID integer NOT NULL DEFAULT nextval('table_name_ID_seq') ); ALTER SEQUENCE table_name_ID_seq OWNED BY table_name.ID;
The Псевдотип PostgreSQL Serial класифікується на три види, які є такими:
У нас є наступна таблиця, яка містить усі Серійний псевдотип специфікація, яка підтримується PostgreSQL:
Ім'я | Розмір зберігання | Діапазон |
---|---|---|
МАЛОСЕРІЙНИЙ | 2 байти | 1 до 32767 |
СЕРІАЛ | 4 байти | 1 до 2147483647 |
BIGSERIAL | 8 байт | 1 до 9223372036854775807 |
Синтаксис псевдотипу PostgreSQL Serial
Синтаксис PostgreSQL Серійний псевдотип наступним чином:
variable_name SERIAL
Приклади типу PostgreSQL SERIAL
Давайте розглянемо різні приклади, щоб зрозуміти, як Псевдотип PostgreSQL Serial працює .
Примітка. Ми можемо визначити обмеження PRIMARY KEY для стовпця SERIAL, оскільки тип SERIAL не створює опосередковано індекс для стовпця або не робить стовпець стовпцем первинного ключа.
Ми створюємо одну нову таблицю за допомогою команди CREATE і вставляємо деякі значення за допомогою команди INSERT.
У прикладі нижче ми використовуємо СТВОРИТИ команда для створення a Автомобілі таблиці в База даних організації:
CREATE TABLE Cars( Car_id SERIAL PRIMARY KEY, Car_name VARCHAR NOT NULL, Car_model VARCHAR NOT NULL );
Вихід
The Автомобілі таблицю було успішно створено після виконання наведених вище команд, як показано на знімку екрана нижче:
Одного разу Автомобілі таблицю було створено, ми можемо вставити в неї деякі значення за допомогою команди INSERT. І ми можемо використовувати ЗА ПРОМОВЧАННЯМ у команді INSERT або пропустіть назву стовпця (Car_id) .
INSERT INTO Cars(Car_name, Car_model) VALUES('Porche','911 Carrera');
Вихід
Після виконання наведеної вище команди ми отримаємо таке повідомлення, і значення було успішно вставлено в Автомобілі стіл:
для кожного машинопису
АБО Використовуючи Ключове слово за замовчуванням з назвою стовпця (Car_id):
INSERT INTO Cars(Car_id, Car_name, Car_model) VALUES(DEFAULT,'Audi','A8');
Вихід
Виконавши наведену вище команду, ми отримаємо таке повідомлення; значення було успішно вставлено в Автомобілі стіл:
Як ми бачимо на наведеному вище знімку екрана, PostgreSQL вставив два рядки в Автомобілі таблиця з Car_id значення стовпця 1 і 2 .
Після створення та вставки Автомобілі значення таблиці, ми будемо використовувати ВИБРАТИ команда повертає всі рядки Автомобілі стіл:
SELECT * FROM Cars;
Вихід
Після успішної реалізації наведеної вище команди ми отримаємо наступний результат:
Ми можемо використовувати pg_get_serial_sequence() функція для отримання імені послідовності a СЕРІАЛ у вказаній таблиці, як ми бачимо в синтаксисі нижче:
pg_get_serial_sequence('table_name','column_name')
Щоб отримати поточне значення створений послідовністю, ми можемо передати назву послідовності функції currval().
У наступному прикладі ми використали currval() функція для повернення поточного значення, отриманого за допомогою Автомобілі стіл Car_id_seq об'єкт:
SELECT currval(pg_get_serial_sequence('Cars', 'car_id'));
Вихід
Після виконання наведеної вище команди ми отримаємо такий результат:
Ми можемо використовувати ПОВЕРНЕННЯ Car_id у команду INSERT, якщо ми хочемо отримати ці значення, створені послідовністю, коли ми вставляємо новий рядок у таблицю.
Команда нижче використовується для вставки нового рядка в Автомобілі і повертає ці записи, створені для Car_id колонка.
INSERT INTO Cars(Car_name,Car_model) VALUES('Jaguar', 'XK') RETURNING Car_id;
Вихід
Після виконання наведеної вище команди ми отримаємо наступний результат, який повертає Car_id як 3 :
Примітка:
- Як ми зрозуміли вище, генератор послідовності операція не є безпечною для транзакцій, що означає, що кожен користувач отримає різне значення якщо дві паралельні бази даних підключення намагаються отримати наступне значення з послідовності.
- І порядковий номер цього користувача буде неактивним і створює розрив у послідовності if один користувач може відкотити транзакцію .
Приклад 2
Давайте подивимося ще один приклад, щоб навчитися Серійний псевдотип детально.
Отже, ми збираємося створити ще одну нову таблицю як a Овочі таблиці за допомогою команди CREATE в подібну бази даних тобто організація з Veg_id колонка як СЕРІАЛ псевдотип.
CREATE TABLE Vegetables( Veggie_id SERIAL PRIMARY KEY, Veggie_name VARCHAR NOT NULL, Veggie_seasons VARCHAR NOT NULL );
Вихід
The Овочі таблицю було успішно створено після виконання наведених вище команд, як показано на знімку екрана нижче:
Одного разу Овочі було створено таблицю, ми вставимо в неї деякі значення за допомогою команди INSERT і опустимо Veggies_id стовпець, як показано в команді нижче:
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Broccoli','Spring');
Вихід
Ми отримаємо таке повідомлення під час виконання наведеної вище команди: значення успішно вставлено в Овочі стіл.
Або ми також можемо використовувати За замовчуванням ключове слово та використовує Veggie_id стовпець, як показано в такій команді:
INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter');
Вихід
Після виконання наведеної вище команди ми отримаємо повідомлення нижче, у якому сказано, що ми можемо використовувати Ключове слово за умовчанням або ігнорувати назву стовпця , ми отримаємо аналогічний результат:
Тому ми додамо ще кілька значень до Автомобілі таблицю за допомогою наступної команди:
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Jalapeno Peppers','Fall'), ('Cucumbers','Summer'), ('Winter Squash','Winter'), ('Snow Peas','Spring'), ('Black Radish','All seasons'), ('Pumpkin','Fall');
Вихід
Після виконання наведеної вище команди ми отримаємо повідомлення нижче, яке показує, що значення було успішно вставлено в Овочі стіл.
Після створення та вставки Овочі значення таблиці, ми будемо використовувати ВИБРАТИ команда для повернення всіх рядків Овочі стіл:
SELECT * FROM Vegetables;
Вихід
Після успішного виконання наведеної вище команди ми отримаємо такий результат:
Огляд
В Псевдотип PostgreSQL Serial розділі ми дізналися про функціональність псевдотипу Serial, яка здебільшого використовується для створення автоматичне збільшення значення стовпця для певної таблиці.