Румяна Цанкова Владимир Л. Станчев Работа с бази от данни в примери на access 2003 2007


Оператори за изменение и дефиниране на данните



страница19/20
Дата13.11.2018
Размер3.1 Mb.
#104752
ТипГлава
1   ...   12   13   14   15   16   17   18   19   20

18.2. Оператори за изменение и дефиниране на данните


Оператори за изменения на данните в таблиците

Операторите за изменения на таблиците са: за вмъкване на редове-INSERT, за внасяне на корекции-UPDATE, за отстраняване -DELETE.


Изпозуване на оператор за вмъкване INSERT

С оператора за вмъкване INSERT може да се решава аналогична на съединението задача. Тогава обаче резултаът не е заявка, а разширение на основната таблица т.е. прави се поддържане на базата от данни.

Операторът INSERT добавя записи в дадена таблица. Той може да добавя редове един по един или цяла нова таблица. Естествено добавянето на отделни редове става много по-просто в директния режим на Access, както вече беше обяснено в първия том на тази книга. Добавянето на цяла таблица обаче става много по-ефективно и гъвкаво с оператора INSERT на SQL. То е необходимо при поддържането на базата от данни, когато се добавят масово нови данни или когато се работи в мрежова среда и се формира централната база от данни от локалните такива. И тук двете таблици трябва да са с еднакви структури и еднакви типове на данните. Особено трябва да се внимава да не се допускат грешки при главните ключове и индексирането.

Синтаксисът на оператора е:

INSERT INTO <таблица 1>

SELECT*


FROM <таблица 2>;

Нека поддържаме таблица Klienti от централната база от данни, като добавяме новите данни от Table2, която беше показана на фиг.18.24. Заявката се задава от основния изглед на текущата база от данни чрез опциите: QueriesÞNewÞDesignViewÞOKÞCloseÞViewÞSQLView–фиг.18.27.
Фиг.18.27. Заявка за добавяне на записи в таблица от БД.

Резултатната таблица трябва да е еднаква по съдържание със резултата от заявката за обединение – фиг.18.26., но е таблица от базата от данни. Затова по време на работа системата издава две предупреждаващи съобщения, че изменението е необратимо – фиг. 18.28 и фиг.18.29.


Фиг.18.28. Първо съобщение при заявка за добавяне.



Фиг.18.29. Второ съобщение при заявка за добавяне.

Общата таблица, получена след добавянето и носеща името на началната таблица от базата от данни в случая Klienti, е показана на фиг.18.30.

Фиг.18.30. Резултат от заявка за вмъкване.



Допуска се и използуване на клауза WHERE, отнасяща се за части от добавяната таблица. Нека имаме таблица Table4 с два записа съгласно фиг.18.31.

Фиг.18.31. Таблица за вмъкване по условие.



Желаем към обединената на предишната стъпка таблица Klienti да добавим само единия от тях – фиг. 18.32.

Фиг.18.32. Заявка за вмъкване по условие.



След изпълнение на заявката се получава резултатът, показан на фиг.18.33.

18.33. Резултат от заявка за вмъкване по условие.

При желание за повторно изпълнение на заявка за вмъкване системата издава съобщение и не я изпълнява-фиг.18.34.


Фиг.18.34. Отхвърляне на повтаряща се заявка за вмъкване.

Операторът INSERT позволява да се задават за вмъкване и редове с определени стойности. Тогава синтаксисът му е:

INSERT INTO <име на таблица>

VALUES <списък от стойности>;


Изпозуване на оператор за корекции UPDATE

Операторът за корекции също може да прави единични или групови корекции. Както и при вмъкването изменението в отделни редове става много по-просто в директния режим на Access, както вече беше обяснено в първата част на тази книга. Груповите корекции обаче са твърде мощен апарат и стават наведнъж с помощта на оператора UPDATE на SQL. То е необходимо при поддържането на базата от данни, когато се коригират масово данни или когато се работи в мрежова среда и се актуализира централната база от данни. Синтаксисът на оператора е:

UPDATE <име на таблица>

SET < име на поле= стойност>

WHERE <име на поле> <условие>; - незадължителна клауза

Нека желаем да актуализираме таблица Prodazbi. Една от клиентските фирми се е сляла с друга и новата фирма е приела името, адреса и цялата останала информация на първата фирма. Това изменение може да се внесе чрез групова заявка наведнъж във всички засегнати записи от таблица Prodazbi. Заявката се задава от основния изглед на текущата база от данни чрез последователността от опции: QueriesÞNewÞDesignViewÞOKÞCloseÞViewÞSQLView.Тя е показана на фиг.18.35., а резултатът от работата й на фиг.18.36.




Фиг. 18.35. Заявка за групови корекции.

В този оператор могат да участвуват и аритметични изрази. Допустими са операциите умножение - *, деление - /, събиране - + и изваждане - -. Аргументите могат да бъдат имена на полета или константи. Например в разглежданата предметна област той може да бъде особено полезен при преоценявания на стоките.

Пример: UPDATE Prodazbi

SET EdinichnaCena=EdinichnaCena*0.75;

При изпълнението на оператора UPDATE също излизат съобщения за необратимост на процеса.


Фиг. 18.36. Резултат от заявка за внасяне на корекции.


Изпозуване на оператор за отстраняване DELETE

Операторът за oтстраняване също може да се използува за единични и групови отстранявания на цели редове. Както и при корекциите отстраняването на отделни редове става много по-просто в директния режим на Access, както вече беше обяснено в първата част на тази книга. Груповите отстранявания стават наведнъж с помощта на оператора DELETE на SQL. Те са необходими при поддържането на базата от данни, когато се отстраняват масово данни или когато се работи в мрежова среда и се актуализира централната база от данни.

Синтаксисът на оператора е:

DELETE *


FROM < име на таблица>

WHERE <име на поле> <условие>;

Даже и да бъдат посочени отделни полета, отстраняват се цели редове от таблицата.

Желаем както и преди да актуализираме таблица Prodazbi. Една от клиентските фирми е фалирала и записите за доставки за нея трябва да се отстранят. Заявката за групово отстраняване от таблица Prodazbi се задава от основния изглед на текущата база от данни чрез последователността: QueriesÞNewÞDesignViewÞOKÞCloseÞViewÞSQL View. Тя може да се види на фиг. 18.37. И тук също излизат съобщения за необратимост на процеса. Резултатът от работата на заявката е показан на фиг. 18.38.
Фиг.18.37. Заявка за групово отстраняване на записи от таблица.

Фиг. 18.38.Резултат от заявка за групово отстраняване на записи.
Дефиниране на данните в таблиците

Скаларните типове данни в стандарта SQL-2 са седем групи, дадени в следващата таблица.




Тип

Декларация

Забележка

логически

BOOLEAN

стойности: true, false, unknown

символен

CHAR (дължина)

фиксирана дължина по подразбиране-1

символен

VARCHAR (дължина)

променлива дължина

битов

BIT (дължина)

фиксирана дължина

битов

BIT VARYING (дължина)

променлива дължина

числов точен

NUMERIC (n, m)

n-общ брой позиции без десетичната точка

m-брой позиции след десетичната точка



числов точен

DECIMAL or DEC (n, m)

n-общ брой позиции без десетичната точка

m-брой позиции след десетичната точка



числов точен

INTEGER or INT (дължина)

потребителят декларира максималната стойност

числов точен

SMALLINT

стойност < 32767

числов приблизителен

FLOAT (точност на мантисата)

експоненциално представяне с основа 10

числов приблизителен

REAL

потребителят декларира представянето

числов приблизителен

DOUBLE PRCISION

потребителят декларира представянето

дата

DATE

година, месец, ден

дата

TIME

час, минута, секунда

дата

TIMESTAMP

година, месец, ден, час, минута, секунда

интервал

INTERVAL <начално поле> TO <крайно поле>

допустими полета:

подмножество от:

година, месец, ден, час, минута, секунда


Имената на таблиците (релациите), свойствата (колоните) и изгледите се задават чрез идентификатори , отговарящи на следните условия:



  • да не са по-дълги от 128 символа;

  • да започват с буква;

  • да не съдържат празни позиции.

Стандартът SQL2 дефинира и типовете: CHARACTER LARGE OBJECT (CLOB) – за големи символни низове; BINARY LARGE OBJECT (BLOB) и NATIONAL CHARACTER LARGE OBJECT (NCLOB) – за двоични низове, които не са символи. Тези даннови типове дават възможност да се обработват големи текстови и графични файлове като текстови документи, Web страници, снимки, видео. За обработката им обаче няма предвидени оператори. И те могат само да се прехвърлят като цели единици към потребителя.
Оператори за дефиниране на данните в таблиците

Операторите от езика за дефиниране на данните в таблиците дават възможност за създаване и поддържане на базата от данни като осигураяват свойството „независимост”. Основните оператори за дефиниране на данните са за създаване на: таблица, на домен (област от стойности на променливи) и на виртуална таблица-изглед.


Изпозуване на оператор за създаване на нови таблици

CREATE TABLE

Операторът за създаване на таблици се дава тук за пълнота на изложението. По-лесно и надеждно е създаването на таблиците с помощта на графичните средства Query by Example. Синтаксисът на оператора CREATE TABLE е както следва:

CREATE TABLE <име на таблица>({<списък от свойства тип на данни>

/NOT NULL

/DEFAULT <подразбираща се стойност>

/CONSTRAINT <име на ограничение>

/PRIMARY KEY <име на свойство>

/UNIQUE ({<име на свойство>})

/ REFERENCES ({<име на таблица, външно име>})

/CHECK (<условие за търсене>)

/ON DELETE <условие за цялост>

/ON UPDATE <условие за цялост>;


Тук знаците / и {…} показват съответно незадължителна клауза и множество. За всяко свойство се задават ограниченията и проверките за условие и цялост (ако има такива) и едва след това се преминава към следващото свойство. Ограничението за прост главен ключ PRIMARY KEY допуска за една таблица само един главен ключ. Всеки главен ключ автоматично получава опциите за ненулева стойност и се индексира. Ограниченията в клаузата CONSTRAINT се задават само, ако имаме главни ключове или уникални полета. Уникалните полета получават автоматично ненулева стойност. Ограничението UNIQUE дава указание за съставен главен ключ, като колоните които включва получават автоматично ненулева стойност. Външните главни ключове се задават чрез ограничението REFERENCES.

Условията за цялост осигуряват връзките между родителските таблици и таблиците-наследници при операциите за отстраняване DELETE и корекции UPDATE. В стандарта са дефинирани следните условия:

SET NULL – отстраняване на ред в родителска таблица предизвиква отстраняване на всички, свързани с него редове в таблица-наследник.

CASCADE – отстраняване на ред в родителска таблица предизвиква поставяне на нули в свързаните с него редове от таблицата-наследник.

NO ACTION – не позволява отстраняване на редове от родителска таблица, свързани с редове от таблица-наследник.

SET DEFAULT – отстраняване на ред в родителска таблица предизвиква поставянето по подразбиране на зададена стойност в свързаните с него редове от таблицата-наследник.


Заявката за създаване на нова таблица се задава от основния изглед на текущата база от данни чрез последователността от опции: QueriesÞNewÞDesignViewÞOKÞCloseÞQueryÞSQLSpecificÞDataDefinitionÞOK. Един пример за заявка за създаване на таблица с кадрови данни за разпространителите е показан на фиг.18.39.
Фиг.18.39. Заявка за създаване на нова таблица.

С тази заявка е създадена таблица Table5 с главен ключ полето Ime- фиг.18.40.



Фиг.18.40. Резултат от заявка за създаване на нова таблица.

Когато главният ключ е съставен, той се формира от ключовете на външни таблици (външни ключове), чиито имена като части на съставния главен ключ и като външни имена също трябва да се обявят.

В SQL2 могат да се правят отделни декларации за създаване на домени и ограничения. В декларациите на домени се изнася типа на данните, а в тези на ограничения - проверки за цялост. Синтаксисът на оператор за дефиниране на домен е както следва:

CREATE DOMAIN <име на свойство> AS <тип на данни (дължина)>

CHECK (условие)

DEFAULT <подразбираща се стойност>;

Както се вижда тук се дават някои от ограниченията за цялостност като дължина на полето, допустими стойности на полето, подразбираща се стойност на полето. Когато тези декларации са направени отделно в домените, те могат да се изпуснат в декларацията на таблицата. Предвидени са и оператори за разделяне и внасяне на промени както таблиците, така и в домените съответно: DROP DOMAIN, DROP TABLE и ALTER DOMAIN, ALTER TABLE. Операторът за ограничения, дефинирани отделно от дефинициите на домени и таблици, има синтаксис:

CREATE ASSERTION < име на ограничение>

CHECK <условие>;

За отстраняване на ограниченията е предвиден операторът DROP ASSERTION.

Създаване на виртуални таблици (изгледи)- Views

Създаването на виртуални таблици (изгледи) става с оператора CREATE VIEW, който има синтаксис:

CREATE VIEW<име на изглед> (<списък от имена на свойства>)

AS SELECT <списък от имена на свойства>

FROM <име на таблица>

WHERE <условие>;

Тук операторът SELECT има познатия смисъл и синтаксис. За да отразява измененията в базата от данни, изгледът трябва да отговаря на следните условия:

да има релационна структура;

може да съдържа операции SELECT;

може да съдържа операции за проекция;

може да сдържа операции за обединение;

може да съдържа операции за естествено съединение;

да бъде дефиниран само с една таблица;

да не съдържа предикат DISTINCT;

да не съдържа производни свойства;

да не съдържа подвъпроси с втори, включен в първия SELECT;

да не съдържа агрегиращи или включващи HAVING клаузи.



Пример на заявка за създаване на изглед, отговаряща на тези изисквания, е показан на фиг. 18.41.

Фиг. 18.41. Заявка за създаване на изглед от таблица Klienti.

Видът на прозореца на изгледа, отговарящ на поставеното условие е показан на фиг.18.42.

Фиг.18.42. Изглед от таблица Klienti, отговарящ на условие.



Изгледът може да съдържа и по-сложни конструкции, изградени напр. с операции за съединение – фиг. 18.43.

Фиг. 18.43. Изглед със съединение.

Заявката за създаване на изглед се задава от основния изглед на текущата база от данни чрез последователността от опции: QueriesÞNewÞDesignViewÞOKÞCloseÞQueryÞSQLSpecificÞData DefinitionÞOK.




Сподели с приятели:
1   ...   12   13   14   15   16   17   18   19   20




©obuch.info 2024
отнасят до администрацията

    Начална страница