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

 


 

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

79215. Общая характеристика преступлений против собственности 33.12 KB
  К преступлениям против собственности относятся общественно опасные деяния нарушающие права владения пользования и распоряжения собственника имуществом либо иным способом причиненияили угрозой причинения собственнику имущественного ущерба. Видовым объектом преступлений против собственности являются общественные отношения собственности владения пользования и распоряжения имуществом и права законного владения собственностью. Предметом преступлений против собственности являются любые физические предметы любое имущество не исключенное из...
79216. Понятие и признаки хищения 36.88 KB
  Под хищением в статьях настоящего Кодекса понимаются совершенные с корыстной целью противоправные безвозмездное изъятие и или обращение чужого имущества в пользу виновного или других лиц причинившие ущерб собственнику или иному владельцу этого имущества. он не имеет на данную вещь ни действительных ни мнимых прав Изъятие и или обращение вышеуказанного имущества в собственность виновного или третьих лиц. данное преступление совершается по средствам нападения направленного на создание условий для последующего изъятия и обращения чужого...
79218. Незаконное участие в предпринимательской деятельности 33.71 KB
  Объективная сторона преступления выражается в том что вопреки установленному законом запрету должностное лицо: а учреждает организацию осуществляющую предпринимательскую деятельность; б участвует лично или через доверенное лицо в управлении такой организацией; в предоставляет этой организации льготы и преимущества либо оказывает ей покровительство в иной форме. Особенность данного состава преступления состоит в том что ответственность за него может наступить лишь при условии что названные в ст. Субъективная сторона преступления...
79219. Кража. Состав и виды 34.63 KB
  Непосредственным объектом кражи являются общественные отношения по поводу конкретной формы собственности. Объективная сторона кражи предполагает деяние в виде тайного похищения чужого имущества. Состав кражи материальный поэтому в качестве обязательного признака объективной стороны наряду с деянием предполагается материальный ущерб опосредованный причинной связью. Субъективная сторона кражи выражается в прямом умысле.
79220. Мошенничество. Состав и виды 32.77 KB
  159 УК РФ определяется как хищение чужого имущества или приобретение права на него путем обмана или злоупотребления доверием. Объективную сторону мошенничества составляют два способа: обман и злоупотребление доверием. Злоупотребление доверием состоит в использовании доверительных отношений между виновным и потерпевшим для завладения имуществом. Отличительной особенностью обмана или злоупотребления доверием является то что собственник или иной владелец имущества введенный в заблуждение относительно истинных целей похитителя сам передает...
79221. Вымогательство. Состав и виды 32.84 KB
  163 УК РФ определяется в законе как требование передачи чужого имущества или права на имущество или на имущественные права наследственные жилищные и др. под угрозой применения насилия либо уничтожения чужого имущества а равно под угрозой распространения сведений позорящих потерпевшего или его близких. Угрозы могут быть любые вплоть до убийства и уничтожения имущества. Состав вымогательства формальный и поэтому требования передачи имущества или право на имущество или совершения действий имущественного характера образуют оконченный...
79222. Неправомерное завладение автомобилем или иным транспортным средством без цели хищения 32.09 KB
  Предметом преступления является автомобиль или любое другое механическое самоходное транспортное средство имеющее автомобильный двигатель с соответствующими характеристиками обозначенными в примечании к ст. Завладение предметом данного преступления выражается в удалении его с места стоянки любым способом. Объективная сторона преступления характеризуется действиями нарушающими права владения и пользования транспортными средствами по своему усмотрению собственником или иным законным владельцем. Субъектом преступления является физическое...
79223. Общая характеристика преступлений в сфере экономической деятельности 33.62 KB
  Статьи данной главы направлены на защиту законной предпринимательской деятельности охрану естественной государственной монополии на товарноденежную систему изделия драгоценные металлы права потребителей товаров и услуг защиту таможенных и налоговых отношений установленных в Российской Федерации. С учетом коренных изменений...