В този раздел ще разберем работата на Сериен PostgreSQL псевдотип, който ни позволява да дефинираме колони с автоматично нарастване в таблици. И ние също виждаме примери от Псевдо тип PostgreSQL Serial .
Какво е сериен псевдотип на PostgreSQL?
В PostgreSQL имаме един конкретен вид генератор на обекти на база данни, известен като Сериен , който е свикнал да създайте поредица от цели числа които често се използват като Първичен ключ в таблица.
Последователността може да бъде генерирана с помощта на SERIAL псевдотип , докато създаваме нова таблица, както можем да видим в следната команда:
CREATE TABLE table_name( ID SERIAL );
PostgreSQL прави следното, ако предоставим SERIAL псевдотип към документ за самоличност колона:
- Първо, 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');
Изход
След като изпълним горната команда, ще получим съобщението по-долу, което казва, че или можем да използваме Ключова дума по подразбиране или игнорирайте името на колоната , ще получим подобен резултат:
пример за java do while
Затова ще добавим още няколко стойности към автомобили таблица с помощта на следната команда:
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 псевдо тип функционалност, която се използва най-вече за създаване на автоматични увеличения стойност на колона за конкретна таблица.