|
@@ -93,241 +93,95 @@ from book
|
|
|
order by name limit 10 offset 10;
|
|
|
```
|
|
|
|
|
|
+~={yellow}Изменение данных в базе=~
|
|
|
+
|
|
|
+```sql
|
|
|
+--- Изменить описание
|
|
|
+update author
|
|
|
+set description='Французский писатель, классик приключенческой литературы, один из основоположников жанра научной фантастики.'
|
|
|
+where name='Жюль Верн';
|
|
|
+
|
|
|
+select description from author where name='Жюл
|
|
|
+```
|
|
|
+
|
|
|
+```sql
|
|
|
+--- Дополнить описание
|
|
|
+update author
|
|
|
+set description=description || ' И человек хороший. Скорее всего.'
|
|
|
+where name='Лусиану Рамальо';
|
|
|
+
|
|
|
+select description from author where name='Лусиану Рамальо';
|
|
|
+```
|
|
|
+
|
|
|
+```sql
|
|
|
+--- Удаление не будет возможно если на эту запись ссылаются другие записи
|
|
|
+delete from author where name='какой-то автор';
|
|
|
+
|
|
|
+--- Но можно удалить запись вместе со всеми записями, которые на нее ссылются
|
|
|
+
|
|
|
+--- Для начала создадим новую схему
|
|
|
+drop schema if exists tests cascade;
|
|
|
+create schema tests
|
|
|
+
|
|
|
+create table tests.author (
|
|
|
+ author_id bigint generated always as identity primary key,
|
|
|
+ name varchar(150) not null check (length(name) >= 3),
|
|
|
+ description text check (length(description) >= 30)
|
|
|
+);
|
|
|
+
|
|
|
+create table tests.book_category (
|
|
|
+ category_id int generated always as identity primary key,
|
|
|
+ name varchar(150) not null check (length(name) >= 2)
|
|
|
+);
|
|
|
+
|
|
|
+create table tests.book (
|
|
|
+ book_id bigint generated always as identity primary key,
|
|
|
+ name varchar(255) not null check (length(name) >= 2),
|
|
|
+ -- тут важно! Добавлен ON DELETE CASCADE
|
|
|
+ author_id bigint not null references tests.author(author_id) on delete cascade,
|
|
|
+ description text check (length(description) >= 20),
|
|
|
+ cover varchar(255),
|
|
|
+ category_id int not null references tests.book_category(category_id)
|
|
|
+);
|
|
|
+
|
|
|
+--- При удалении автора удалятся и его книги
|
|
|
+delete from tests.author where name='Михаил Шолохов';
|
|
|
+
|
|
|
+```
|
|
|
+
|
|
|
+~={yellow}Очистка таблицы. Быстрый способ.=~
|
|
|
+
|
|
|
+```sql
|
|
|
+truncate tabel book;
|
|
|
+
|
|
|
+--- Медленный способ
|
|
|
+delete from book where true;
|
|
|
+```
|
|
|
+
|
|
|
+~={yellow}Обновление записи=~
|
|
|
+
|
|
|
```sql
|
|
|
---- Наполняем базу данных птиц
|
|
|
-insert into species (species_name, genus_id, description, average_length, average_weight, primary_color) values
|
|
|
-('Большая синица',
|
|
|
-1,
|
|
|
-'Обычная птица из семейства синицевых, обитающая в лесах и садах.',
|
|
|
-14,
|
|
|
-18,
|
|
|
-'жёлтый'),
|
|
|
-('Синица лазоревка',
|
|
|
-1,
|
|
|
-'Маленькая яркая птица из семейства синицевых.',
|
|
|
-12,
|
|
|
-11,
|
|
|
-'голубой и жёлтый'),
|
|
|
-('Синица обыкновенная',
|
|
|
-1,
|
|
|
-'Распространённый вид синиц, обитающий в лесах и парках.',
|
|
|
-13,
|
|
|
-14,
|
|
|
-'зеленоватый'),
|
|
|
-('Гаичка болотная',
|
|
|
-2,
|
|
|
-'Маленькая птица из семейства синицевых, обитающая в болотистых районах.',
|
|
|
-12,
|
|
|
-13,
|
|
|
-'серый'),
|
|
|
-('Гаичка буроголовая',
|
|
|
-2,
|
|
|
-'Маленькая птица с коричневой головой.',
|
|
|
-11,
|
|
|
-12,
|
|
|
-'коричневый и серый'),
|
|
|
-('Гаичка черноголовая',
|
|
|
-2,
|
|
|
-'Маленькая птица с черной головой.',
|
|
|
-10,
|
|
|
-11,
|
|
|
-'чёрный и серый'),
|
|
|
-('Ворон обыкновенный',
|
|
|
-3,
|
|
|
-'Крупная птица из семейства врановых, обитающая в различных средах обитания.',
|
|
|
-64,
|
|
|
-1500,
|
|
|
-'чёрный'),
|
|
|
-('Грач',
|
|
|
-3,
|
|
|
-'Птица из семейства врановых с характерным внешним видом.',
|
|
|
-46,
|
|
|
-400,
|
|
|
-'чёрный'),
|
|
|
-('Клушица',
|
|
|
-3,
|
|
|
-'Птица из семейства врановых, обитающая в горах.',
|
|
|
-60,
|
|
|
-1200,
|
|
|
-'чёрный'),
|
|
|
-('Сорока обыкновенная',
|
|
|
-4,
|
|
|
-'Птица из семейства врановых с характерной черно-белой окраской.',
|
|
|
-45,
|
|
|
-200,
|
|
|
-'чёрный и белый'),
|
|
|
-('Сорока чернокрылая',
|
|
|
-4,
|
|
|
-'Птица с черными крыльями и белым телом.',
|
|
|
-44,
|
|
|
-190,
|
|
|
-'чёрный и белый'),
|
|
|
-('Сорока голубая',
|
|
|
-4,
|
|
|
-'Птица с голубыми крыльями и хвостом.',
|
|
|
-43,
|
|
|
-180,
|
|
|
-'голубой и белый'),
|
|
|
-('Дрозд рябинник',
|
|
|
-5,
|
|
|
-'Певчая птица из семейства дроздовых, обитающая в лесах и садах.',
|
|
|
-25,
|
|
|
-100,
|
|
|
-'коричневый'),
|
|
|
-('Дрозд певчий',
|
|
|
-5,
|
|
|
-'Певчая птица с мелодичным голосом.',
|
|
|
-23,
|
|
|
-90,
|
|
|
-'коричневый и белый'),
|
|
|
-('Дрозд черный',
|
|
|
-5,
|
|
|
-'Птица с черным оперением и мелодичным пением.',
|
|
|
-24,
|
|
|
-95,
|
|
|
-'чёрный'),
|
|
|
-('Дрозд белобровик',
|
|
|
-5,
|
|
|
-'Птица с белыми бровями и ярким оперением.',
|
|
|
-22,
|
|
|
-85,
|
|
|
-'коричневый и белый'),
|
|
|
-('Дрозд пересмешник',
|
|
|
-5,
|
|
|
-'Птица, способная имитировать звуки других птиц.',
|
|
|
-26,
|
|
|
-110,
|
|
|
-'серый и коричневый'),
|
|
|
-('Синица белая',
|
|
|
-1,
|
|
|
-'Белая синица, обитающая в северных регионах.',
|
|
|
-15,
|
|
|
-20,
|
|
|
-'белый и серый'),
|
|
|
-('Синица сибирская',
|
|
|
-1,
|
|
|
-'Птица, обитающая в Сибири, с ярким оперением.',
|
|
|
-16,
|
|
|
-21,
|
|
|
-'жёлтый и зелёный'),
|
|
|
-('Синица черноголовая',
|
|
|
-1,
|
|
|
-'Синица с черной головой и белыми щеками.',
|
|
|
-14,
|
|
|
-19,
|
|
|
-'чёрный и белый'),
|
|
|
-('Гаичка хохлатая',
|
|
|
-2,
|
|
|
-'Гаичка с характерным хохолком на голове.',
|
|
|
-12,
|
|
|
-14,
|
|
|
-'серый и чёрный'),
|
|
|
-('Гаичка горная',
|
|
|
-2,
|
|
|
-'Птица, обитающая в горных районах.',
|
|
|
-11,
|
|
|
-13,
|
|
|
-'коричневый и серый'),
|
|
|
-('Гаичка рыжеголовая',
|
|
|
-2,
|
|
|
-'Гаичка с рыжей головой и серым телом.',
|
|
|
-13,
|
|
|
-15,
|
|
|
-'рыжий и серый'),
|
|
|
-('Ворон пустынный',
|
|
|
-3,
|
|
|
-'Ворон, обитающий в пустынях.',
|
|
|
-62,
|
|
|
-1400,
|
|
|
-'чёрный'),
|
|
|
-('Ворон северный',
|
|
|
-3,
|
|
|
-'Ворон, обитающий в северных регионах.',
|
|
|
-63,
|
|
|
-1450,
|
|
|
-'чёрный'),
|
|
|
-('Ворон лесной',
|
|
|
-3,
|
|
|
-'Ворон, предпочитающий лесные районы.',
|
|
|
-61,
|
|
|
-1350,
|
|
|
-'чёрный'),
|
|
|
-('Сорока зеленая',
|
|
|
-4,
|
|
|
-'Сорока с зеленым оттенком в оперении.',
|
|
|
-46,
|
|
|
-210,
|
|
|
-'зелёный и белый'),
|
|
|
-('Сорока крапчатая',
|
|
|
-4,
|
|
|
-'Сорока с крапчатым оперением.',
|
|
|
-44,
|
|
|
-190,
|
|
|
-'чёрный и белый'),
|
|
|
-('Сорока длиннохвостая',
|
|
|
-4,
|
|
|
-'Сорока с длинным хвостом.',
|
|
|
-47,
|
|
|
-220,
|
|
|
-'чёрный и белый'),
|
|
|
-('Дрозд лесной',
|
|
|
-5,
|
|
|
-'Дрозд, предпочитающий лесные районы.',
|
|
|
-25,
|
|
|
-100,
|
|
|
-'коричневый'),
|
|
|
-('Дрозд полевой',
|
|
|
-5,
|
|
|
-'Дрозд, обитающий на полях и лугах.',
|
|
|
-24,
|
|
|
-95,
|
|
|
-'коричневый и белый'),
|
|
|
-('Дрозд луговой',
|
|
|
-5,
|
|
|
-'Дрозд, предпочитающий луговые районы.',
|
|
|
-23,
|
|
|
-90,
|
|
|
-'коричневый'),
|
|
|
-('Дрозд болотный',
|
|
|
-5,
|
|
|
-'Дрозд, обитающий в болотистых районах.',
|
|
|
-26,
|
|
|
-110,
|
|
|
-'серый и коричневый'),
|
|
|
-('Дрозд красногрудый',
|
|
|
-5,
|
|
|
-'Дрозд с ярко-красной грудью.',
|
|
|
-27,
|
|
|
-115,
|
|
|
-'красный и коричневый'),
|
|
|
-('Синица пестрая',
|
|
|
-1,
|
|
|
-'Синица с пестрым оперением.',
|
|
|
-14,
|
|
|
-18,
|
|
|
-'жёлтый и чёрный'),
|
|
|
-('Синица зелёная',
|
|
|
-1,
|
|
|
-'Синица с зелёным оттенком в оперении.',
|
|
|
-15,
|
|
|
-20,
|
|
|
-'зелёный и жёлтый'),
|
|
|
-('Синица красноголовая',
|
|
|
-1,
|
|
|
-'Синица с красной головой и серым телом.',
|
|
|
-14,
|
|
|
-19,
|
|
|
-'красный и серый'),
|
|
|
-('Гаичка зеленоголовая',
|
|
|
-2,
|
|
|
-'Гаичка с зеленым оттенком в оперении.',
|
|
|
-12,
|
|
|
-13,
|
|
|
-'зелёный и серый'),
|
|
|
-('Гаичка сероголовая',
|
|
|
-2,
|
|
|
-'Гаичка с серой головой и белым телом.',
|
|
|
-11,
|
|
|
-12,
|
|
|
-'серый и белый');
|
|
|
-```
|
|
|
+--- Создами временную таблицу
|
|
|
+create temp table books_with_isbn (
|
|
|
+ book_id bigint generated always as identity primary key,
|
|
|
+ name varchar(255),
|
|
|
+ isbn char(17) unique
|
|
|
+);
|
|
|
+
|
|
|
+insert into books_with_isbn(name, isbn) values(
|
|
|
+ 'Тихий Доннн', '978-5-389-16579'
|
|
|
+);
|
|
|
+
|
|
|
+--- При возникновении конфликта isbn обновить запись и
|
|
|
+--- взять имя из новой записи
|
|
|
+insert into books_with_isbn (name, isbn) values (
|
|
|
+ 'Тихий Дон', '978-5-389-16579'
|
|
|
+) on conflict(isbn) do update
|
|
|
+set name = excluded.name; /*do nothing*/
|
|
|
+
|
|
|
+
|
|
|
+table books_with_isbn;
|
|
|
+```
|
|
|
+
|
|
|
+~={yellow}Форматированный вывод=~
|
|
|
+
|