7601

Редагування таблиці БД

Лекция

Информатика, кибернетика и программирование

Редагування таблиці Під час редагування таблиці доводиться виконувати такі роботи: зміна даних, тобто редагування вмісту полів маніпуляція записами, їх вилучення і вставка перейменування та знищення таблиці зміна структури...

Украинкский

2013-01-26

104.5 KB

8 чел.

Редагування таблиці

Під час редагування таблиці доводиться виконувати такі роботи:

  •  зміна даних, тобто редагування вмісту полів;
  •  маніпуляція записами, їх вилучення і вставка;
  •  перейменування та знищення таблиці;
  •  зміна структури таблиці, це вставка та вилучення полів, перейменування полів, додавання та вилучення обмежень тощо.

        Змінити дані таблиці дозволяє команда:

UPDATE ім’я_таблиці SET ім’я_поля1=значення1, ім’я_поля2 = значення2, ... WHERE вираз

        Приклад. Скласти команду для заміни в таблиці gazpr поля naz_g на Україна тих записів, де kod_g = 2:

UPDATE gazpr SET naz_g = ’УкраїнаWHERE kod_g = 2;

        Якщо редагуються всі записи, то інструкція WHERE може бути опущена. Для нашого прикладу така команда матиме такий вигляд:

UPDATE gazpr SET naz_g = ’Україна’;

        Знищення всіх або вибраних за умовою записів таблиці забезпечує команда:

DЕLETE FROM ім’я_таблиці WHERE вираз 

     Приклад. Знищити ті записи таблиці gazpr, яких naz_g = Україна.

DELETE FROM gazpr WHERE gazpr.naz_g = 'Україна';

        Вставку записів забезпечує вже розглянена в попередньому розділі команда INSERT. 

        Модифікація таблиці командою ALTER TABLE. У більшості сучасних РСУБД передбачена можливість модифікації таблиць командою ALTER TABLE. Її реалізація в PostgreSQL забезпечує такі види модифікації:

  •  створення полів;
  •  призначення і скасування значень за умовчанням;
  •  перейменування таблиці;
  •  перейменування полів;
  •  додавання обмежень;
  •  зміна власника.

        Додавання полів. Для створення нового поля в команду ALTER TABLE включається секція ADD COLUMN. Синтаксис команди ALTER TABLE з секцією ADD COLUMN:

ALTER TABLE ім’я_таблиці ADD [COLUMN] ім’я_поля тип_поля

  •  таблиця - ім’я таблиці, в якій створюється нове поле;
  •  ім’я_поля - ім’я нового поля;
  •  тип_поля - тип нового поля.

Ключове слово COLUMN не є обов’язковим і включається в команду лише для наочності. Приклад включення в таблицю books нового поля publication для зберігання дати публікації:

ALTER TABLE books ADD publication date;

        Призначення і скасування значень за замовчуванням

ALTER TABLE таблиця ALTER [COLUMN] імя_поля 

                                          {SET DEFAULT значення | DROP DEFAULT}

         Як і в попередньому розділі, ключове слово COLUMN є необов’язковим і включається в команду лише для наочності. Нижче наведено приклади встановлення та скасування послідовності значень за замовчуванням для поля id таблиці books.

ALTER TABLE books ALTER COLUMN id SET DEFAULT nextval ('books.id');

ALTER TABLE books ALTER id DROP DEFAULT;

        Перейменування таблиці забезпечує команда:

ALTER TABLE таблиця RENAME ТО нове_імя

        Таблицю можна перейменовувати скільки завгодно разів, це ніяк не відбивається на стані зберігаються в ній даних. Зрозуміло, що в деяких ситуаціях перейменування небажані, зокрема, якщо таблиця використовується зовнішнім додатком. Приклад зміни імені literature на books:

ALTER TABLE literature RENAME TO books;

        Перейменування полів. PostgreSQL дозволяє змінювати імена полів без зміни даних, що зберігаються в таблиці. Втім, перейменування полів – справа ризикована, оскільки  програми можуть містити посилання на імена полів. Якщо програма звертається до поля по імені, то перейменування може порушити її працездатність.

ALTER TABLE таблиця RENAME [COLUMN] імя_поля ТО нове_імя_поля

        Як і в інших командах ALTER TABLE, ключове слово COLUMN є необов’язковим. По двох ідентифікаторах, розділеним ключовим словом ТО, PostgreSQL може визначити, що команда перейменування відноситься до одного поля, а не до таблиці. Приклад:

ALTER TABLE daily RENAME COLUMN in_stock TO is_in_stock:

 

        Додавання обмежень. Після створення таблиці зберігаються деякі можливості додавання обмеження. У PostgreSQL команда ALTER TABLE з секцією ADD CONSTRAINT дозволяє визначати для полів існуючих таблиць тільки обмеження зовнішнього ключа. Команда створення нових обмежень має такий синтаксис:

ALTER TABLE таблиця ADD CONSTRAINT ім’я обмеження визначення

        Синтаксис визначення залежить від типу обмеження. Нижче показано створення нового обмеження зовнішнього ключа для таблиці editions (пов’язаної з полем id таблиці books) і обмеження перевірки для поля type.

ALTER TABLE editions 

ADD CONSTRAINT foreign_book FOREIGN KEY (bookjd) REFERENCES books (id);

 

ALTER TABLE editions

ADD CONSTRAINT hard_or_paper_back CHECK (type = 'p1 OR type =' h ');

 

        Установка обмеження зовнішнього ключа призводить до того, що будь-яке значення book_id у таблиці editions також має існувати і в таблиці books. Крім того, внаслідок встановленого обмеження перевірки полі type в таблиці editions може містити тільки значення р або b.

       Зауважимо, що при створенні унікального індекса командою CREATE INDEX (буде розглянена у відповідному розділі) також неявно встановлюється і обмеження унікальності.

        В існуючу таблицю  можна додати тільки обмеження таблиць. Це робить така команда:

        ALTER TABLE ім’я_таблиці

        ADD [ CONSTRAINT ім’я_таизначеннябмеження ]

         Команда ALTER додає обмеження таблиці, але не поля. Нижче встановлюється нове обмеження FOREIGN KEY для поля kod_g таблиці gazpr, яке зв’язується з полем kod_g таблиці oblik. Обмеження  FOREIGN KEY гарантує, що  внаслідок вставки або оновлення даних у поле kod_g таблиці oblik не з’являться значення, відсутні в полі kod_g таблиці gazpr, тому у прикладі система видала відповідне повідомлення про помилку, тобто про те, що в таблиці gazpr не існує газопроводу з кодом 7.

        ALTER TABLE gazpr ADD CONSTRAINT bbb PRIMARY KEY (kod_g);

        ALTER TABLE oblik ADD CONSTRAINT aaa

        FOREIGN KEY (kod_g) REFERENCES gazpr(kod_g);

        INSERT INTO OBLIK VALUES(4,4,'21.12.2000',4);

        INSERT INTO OBLIK VALUES(7,4,'21.12.2000',4);

ERROR:  insert or update on table "oblik" violates foreign key constraint "aaa"
DETAIL:  Key (kod_g)=(7) is not present in table "gazpr".
SQL
 state: 23503

         Зауважимо, що обмеження унікальності також неявно встановлюється при створенні унікального індекса командою CREATE INDEX.

        Видалення обмежень. Деякі версії PostgreSQL не підтримують пряме видалення обмежень із таблиці. Добитися потрібного результату можна лише одним способом: створити копію таблиці, що практично повністю повторює оригінал, який не містить тих обмежень, які видаляються. Дані копіюються з початкової таблиці в нову, після чого таблиці перейменовуються командою ALTER TABLE і копія замінює оригінал.

        Зміна власника. За замовчуванням творець таблиці автоматично стає її власником. Власник володіє всіма правами, пов’язаними з таблицею, в тому числі правами передання і відкликання прав командами GRANT і REVOKE (будуть розглянені пізніше у відповідному розділі). Зміна власника  проводиться командою ALTER TABLE з секцією OWNER. Команда має такий синтаксис:

ALTER TABLE імя_таблиці OWNER ТО новий_власник

        Змінювати власника таблиці може або поточний власник, або суперкористувач. Приклад зміни власника таблиці employee, де новим власником стає користувач corwin:

        ALTER TABLE employees OWNER TO corwin;

        Реструктуризація таблиць командами CREATE TABLE і INSERT INTO. Якщо таблиця, створена командою CREATE TABLE AS, не влаштовує (наприклад, якщо в таблиці необхідно встановити обмеження полів), то одну команду CREATE TABLE AS можна замінити двома командами SQL. Спочатку команда CREATE TABLE створює нову таблицю, а потім команда INSERT INTO з запрограмованим SELECT заповнює її даними. Приклад реструктуризації таблиці командами CREATE TABLE і INSERT INTO:

CREATE TABLE newbooks (

id integer UNIQUE,

title text NOT NULL,

authorid integer,

subjected integer CONSTRAINT books_id_pkey PRIMARY KEY (id));

 

NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index, books_id_pkey1

for table 'new_books "

 

INSERT INTO new books

SELECT id, title. author_id, subjected FROM books;

 

ALTER TABLE books RENAME TO old_books;

ALTER TABLE new_books RENAME TO books;

 Table "books"

Attribute   |  Type     |  Modifier

------------+----------+------------

id              | integer   | not null

title       | text        |not null 

author_id | integer   |

subjectid  | integer   |

Index: books_id_pkey

        Видалення таблиць забезпечує команда:

DROP TABLE таблиця

        Використання команди DROP TABLE вимагає обережності, оскільки видалення таблиці спричиняє знищення всіх збережених у ній даних. При знищенні таблиці з неявно створеним індексом знищуються і всі пов’язані з нею індекси.

         Копіювання даних із зовнішніх файлів командою COPY. У PostgreSQL підтримується і така корисна можливість, як пряме імпортування даних в таблицю з зовнішніх файлів командою COPY. Файл, з якого беруться дані, зберігається або в стандартному текстовому форматі ASCII з обмеженням полів спеціальним символом-роздільником, або в двійковому форматі таблиць PostgreSQL. У ASCII-файлах як роздільник зазвичай використовується символ табуляції або кома. При імпортуванні данних з ASCII-файлу кожен рядок файлу інтерпретується як окремий запис даних, а кожен компонент рядка – як значення відповідного поля запису.

         Команда COPY FROM працює значно швидше за звичайну команду INSERT, оскільки дані передаються прямо в приймальну таблицю за одну транзакцію. З іншого боку, до формату вихідного файлу пред'являються надзвичайно жорсткі вимоги, тому помилка всього в одному рядку спричинить до збою всієї команди COPY. Синтаксис команди COPY FROM:

COPY [BINARY] таблиця [WITH 0IDS]

  FROM {’ім’я_файлу’ | stdin}

 [[USING] DELIMITERS ’роздільник’]

 [WITH NULL AS ‘рядок_null’]

        Параметри команди:

  •  BINARY. Ознака імпортування вхідних даних із двійкового файлу, раніше створеного командою COPY ТО;
  •  таблиця. Ім’я таблиці, в яку імпортуються дані;
  •  WITH 0IDS. З першого рядка файлу завантажуються значення всіх ідентифікаторів OID імпортованої таблиці;
  •  FROM {’ім’я_файлу’ | stdin}. Джерело, з якого PostgreSQL отримує вхідні дані, це може бути файл із заданим ім’ям або стандартний ввід (stdin);
  •  [USING] DELIMITERS ’роздільник’. Символ, який використовується в якості розділювача при розборі вхідних даних. Не використовується для файлів, виведених у двійковому форматі PostgreSQL;
  •  WITH NULL AS рядок null. Заданий рядок повинен інтерпретуватися як значення NULL. Не використовується для файлів, виведених у двійковому форматі PostgreSQL.

         При підготовці до імпортування файлу слід простежити за тим, щоб він був доступний для читання процесом postmaster (тобто користувачем, який запустив PostgreSQL). Крім того, дозволені тільки абсолютні імена файлів; при спробі передати відносне ім’я відбувається помилка.

        При роботі з вхідними файлами в форматі ASCII в секції DELIMITERS передається символ, використаний як роздільник значень полів у рядках файлу. Якщо роздільник не вказаний, PostgreSQL вважає, що значення розділюються символом табуляції. Необов’язкова секція WITH NULL визначає формат, в якому передається значення NULL. Якщо секція відсутня, то PostgreSQL інтерпретує послідовність \N як NULL (наприклад, порожні поля вихідного файлу за замовчуванням інтерпретуються як порожні рядкові константи, а не як NULL).

        Якщо дані вводяться вручну або передаються терміналу іншою програмою, в якості джерела в секції FROM можна вказати стандартний файл (stdin). При отриманні даних з стандартного вводу вхідний потік повинен завершуватися послідовністю \. (зворотна коса риска плюс точка), зразу за якою слідує символ нового рядка.

         Нижче приведено вміст файлу, виведеного PostgreSQL в форматі ASCII. Поля (3 шт.) розділяються комами, а для відображення значення NULL використовується рядок \nul1. У файлі збережені дані з таблиці subjects.

1,Наука,Productivity Ave

2,Релігія, \null

3,Класика,Academic Rd

4,Комп’ютери,Productivity Ave

5,Cooking,Creativity St

 

        Наступна команда імпортує вміст файлу / tmp / subjects.sql в таблицю subjects.

COPY subjects FROM '/ tmp / subjects.sql' USING DELIMITERS '.' WITH NULL AS '\ null';

         Двійковий формат. Команда COPY також дозволяє виконувати операції введення і виведення з даними в двійковому форматі. Якщо команда COPY FROM містить ключове слово BINARY, то вхідний файл повинен бути створений командою COPY ТО в двійковому форматі PostgreSQL. Двійкові файли завантажуються швидше за ASCII-файли, але на відміну від останніх їх не можна читати і редагувати в простих текстових редакторах.

        Приклад вставки записів із двійкового файлу в таблицю subjects:

COPY BINARY subjects FROM '/ tmp / subjects.sql';

        Системні поля. У PostgreSQL всі таблиці містять системні поля, які залишаються невидимими для користувача і не виводяться при вибірці (якщо службова інформації не запитується спеціально). У системних полях зберігаються метадані, які описують вміст записів, вони такі:

Поле  

Опис

oid

4-байтовий унікальний ідентифікатор запису

tableoid

Ідентифікатор таблиці. Ім’я таблиці зв’язується з ідентифікатором у системній таблиці pg_class

xmin

Ідентифікатор транзакції вставки для кортежу

cmin

Ідентифікатор команди, асоційованої з транзакцією вставки для кортежу

хmах

Ідентифікатор транзакції видалення для кортежу. Для видимих (не видалених) кортежів дорівнює нулю

сmах

Ідентифікатор команди, асоційованої з транзакцією видалення для кортежу. За аналогією з xmax дорівнює нулю для видимих кортежів

ctid

Ідентифікатор, що описує фізичне місцезнаходження кортежу в БД. Поле ctid містить пару чисел: номер блоку та індекс кортежу в блоці

        Ідентифікатори записів дозволяють розрізнити два записи з однаковими значеннями полів. Для цього в PostgreSQL передбачений ідентифікатор OID, унікальний в межах таблиці. Приклад:

SELECT *, oid FROM my_list;

             todos               |   oid

----------------------------------+---------

Correct redundancies in my list. | 3391263

Correct redundancies in my list. | 3391264

 

DELETE FROM my_list WHERE oid = 3391264;

 

SELECT *, oid FROM my_list;

             todos               |   oid

----------------------------------+---------

Correct redundancies in my list. | 3391263

 


 

А также другие работы, которые могут Вас заинтересовать

73347. Урок на тему: «Food» 356.14 KB
  The trin crries Food. nd tody we’ll Lerner’s outcomes revise the Food nmes red trnslte prctice nd differentite them mke up sentences nd guess the riddles So let’s strt our journey Wrming up T: Imgine you re in the foodtrin. t the blckbord you cn see some food nmes.
73350. Звук ч, позначення його буквою Ч ч 138.84 KB
  Голосні та приголосні звуки Чим відрізняються приголосні звуки від голосних Як звуки позначаються на письмі Навіщо потрібно вивчати літери Щоб вміти читати слова речення тексти. Який спільний звук мають ці слова Спробуємо визначити який звук ч за звучанням. Які слова із звуком ч ви запам’ятали Які з них вказують на дію предмета Які називають один предмет а які багато предметів
73351. Позакласне читання. Олена Пчілка. «Сосонка» 74.1 KB
  Головний герой твору Івась переживає радість і захоплення. А коли він покинув рідний дім то охопили його і смуток і страх і розпач: Був він Івась а то став уже Ванька. Не витримав Івась чужої хати. Головні герої: Івась Сосонка.
73352. Урок: Дім, милий дім 557.63 KB
  The topic of our lesson is “My house”. Today we’re going to revise the words on topic “House”, we’ll listen to the text and try to represent it in a picture, we’ll revise the usage of the structures THERE IS/ARE and the prepositions of place. And by the end of the lesson we’ll make up the project “My house”.
73353. Продукти харчування та Домогосподарство 849.52 KB
  Повторити й активізувати ЛО теми. Систематизувати вживання слів some any у питальних та заперечних реченнях. Розвивати здібності учнів до планування свого висловлювання. Виховувати повагу до смаків та вподобань людей країни мова, якої вивчається.