Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6. Робота з SQL Server.docx
Скачиваний:
9
Добавлен:
22.11.2019
Размер:
121.61 Кб
Скачать

6. 2. Адміністрування баз даних

В SQL Server бази даних зберігаються у вигляді звичайних файлів на диску. Як мінімум на одну базу даних припадає таких файлів два: *.mdf і *.ldf. В першому зберігаються самі дані, таблиці, індекси та ін., а в другому знаходяться так звані transaction log, в якому зберігається інформація, необхідна для відновлення баз даних.

Створити нову базу даних можна двома способами:

  • використовуючи SQL Server Enterprise Manager (буде описано далі);

  • з використанням мови SQL і оператора CREATE DATABASE.

Розглянемо синтаксис оператора CREATE DATABASE:

CREATE DATABASE <імя бази даних>

[ON

{ [PRIMARY] (NAME = logical_file_name,

FILENAME = 'os_file_name'

[, SIZE = size]

[, MAXSIZE = max_size]

[, FILEGROWTH = growth_increment] )} [,...n]

]

[LOG ON

{ ( NAME = logical_file_name,

FILENAME = 'os_file_name'

[, SIZE = size] )} [,...n]]

[FOR RESTORE]

FILENAME - повний шлях та ім’я файла для розміщення БД, повинен вказувати на локальний диск комп’ютера, на якому встановлено SQL Server.

SIZE - початковий размір кожного файла в мегабайтах.

MAXSIZE - максимальний размір файла в Мб, якщо не вказано – розмір не обмежується.

FILEGROWTH - одиниця збільшення файла, вказується в Мб (за змовчуванням) або у відсотках, значення 0 забороняє збільшення файла. Тепер розглянемо приклад створення бази даних:

CREATE DATABASE SQLBaza1

ON

PRIMARY (NAME=SQLBaza1,

FILENAME='c:\mssql7\data\sqlstep_data.mdf',

SIZE=5,

MAXSIZE=10,

FILEGROWTH=10% )

LOG ON (

NAME=SQLStepLog,

FILENAME='c:\mssql7\data\sqlbaza_log.ldf',

SIZE=1,

MAXSIZE=5,

FILEGROWTH=1)

Щоб перевірити цю команду, необхідно завантажити Query Analyzer - утиліта для виконання SQL-запитів, набрати цей оператор і виконати запит на виконання (клавішею F5 або клікнути мишкою на кнопці з зеленою стрілкою). Внизу, у вікні повідомлень, з’явиться повідомлення про те, що база даних створена успішно (або ні).

Для знищення бази даних використовується оператор:

DROP DATABASE <ім’я бази даних>

6. 3. Типи даних в sql

У версії SQL Server 7.0 була введена підтримка Unicode. Unicode – це 16-розрядний стандарт кодування, розроблений консорціумом Unicode Consortium. За допомогою двох байт в одному наборі символів можна закодувати майже всі символи, які використовуються в різних мовах світу. Наприклад, весь набір китайських ієрогліфів становить 21000 з 65536 можливих в Unicode символів. Оскільки для зберігання одного символа потрібен не один байт, а два, при використанні Unicode для одного і того ж набору символів буде потрібно в два рази більше місця на диску.

Головну роль у створенні таблиці відіграє визначення типів даних для полів таблиці. SQL дозволяє визначити декілька типів даних, включаючи текстові, числові та двійкові. Можна також визначити власні типи даних для використання в таблицях.

Тип даних – це перша характеристика, яку потрібно визначити для поля при створенні таблиці. Тип даних поля визначає тип інформації, яку можна зберігати в цьому полі. Щоб визначити тип даних, після імені поля потрібно вказати відповідне ключове слово. Тип даних для поля таблиці зберігається в якості постійної характеристики, змінити яку вже не можна.

Тип даних: числові цілі

Числові цілі – це один із декількох типів даних, які використовуються для визначення об’єктів, які зберігаються в базі даних. Числа, збережені як цілі, завжди займають одинаковий об’єм пам’яті незалежно від кількості цифр.

Тип INT або INTEGER – це один із трьох можливих цілих типів даних. Додатні і від’ємні цілі числа можуть бути в діапазоні від –231 до +231, тобто від –2147483648 до +2147483647, що становить приблизно 4,3 мільярди чисел. Для кожного числа типу INT в пам’яті виділяється 4 байти, причому 31 біт використовується для збереження модуля числа, а ще один біт – для його знаку.

Тип SMALLINT – це другий цілий тип даних. До нього відносяться значення, які лежать в проміжку від –32768 до +32768. Для кожного числа типу SMALLINT в пам’яті виділяється 2 байти, причому 15 біт використовується для збереження модуля числа, а ще один біт – для його знаку.

До типу TINYINT належать додатні числа в інтервалі від 0 до 255. Для кожного числа цього типу в пам’яті виділяється один байт.

Тип даних: числові з плаваючою крапкою.

Числові дані з плаваючою крапкою – це друга група типів даних. На відміну від цілих, в якості чисел з плаваючою крапкою можна зберігати десяткові дроби.

На жаль, при використанні числових даних з плаваючою крапкою виникають помилки при округленні, оскільки в пам’яті значення зберігаються з точністю до визначеної кількості цифр.

Тип REAL (дійсні) – це перший тип даних з плаваючою крапкою, для збереження яких в пам’яті виділяється 4 байти. Додатні та від’ємні числа можна зберігати як дані типу REAL з точністю до 7 цифр. Дані типу REAL належать інтервалу від (-3,4Е-38) до (+3,4Е+38).

Розглянемо другий тип даних з плаваючою крапкою. Для них виділяється 8 байт, якщо значення параметра n не вказано. Тип FLOAT [(n)] дозволяє зберігати додатні і від’ємні десяткові числа з точністю до 15 цифр. Допустимий інтервал – від (-1,7Е-308) до (+1,7Е+308). Якщо вказати значення n в інтервалі від 1 до 7, то це буде звичайний тип REAL. Якщо ж вказати значення n в інтервалі від 8 до 15, то це буде тип FLOAT [(n)] з такими ж характеристиками, як і у випадку, коли параметр n не вказується.

Типи DECIMAL [ (p [ , s ]) ] та NUMERIC [(p [ , s ] )] на відміну від FLOAT і REAL, дозволяють зберігати десяткові числа точно, без похибок. Допустимий інтервал значень і точність визначаються за допомогою параметрів p і s. Ви можете зберігати значення в інтервалі від (-10Е-38) до (+10Е+38) і використовувати для цього від 2 до 17 байт. Параметр p визначає точність, з якою можна зберегти десяткове число ( тобто, p – це загальна кількість збережених цифр). А параметр s визначає кількість збережених цифр справа від десяткової крапки (s повинно бути менше або рівне p). Якщо не вказати параметри p і s, то їм будуть присвоєні стандартні значення (p=18, s=0).

Текстові типи даних

У полях таблиць часто використовуються текстові типи даних. У порівнянні з числовими, текстові дані дозволяють використовувати більшу кількість символів: букви, числа і спеціальні символи, наприклад, такі як ? або >. При введенні текстових даних, наприклад, в поле таблиці, вони беруться в одинарні або подвійні лапки (‘ або “).

Тип CHAR (n) – це перший тип текстових даних. При збереженні даних цього типу для кожного символу виділяється по одному байту. Число n в круглих дужках визначає розмір пам’яті, який виділяється для текстових даних. Наприклад, якщо для поля таблиці визначений тип CHAR (15), то для кожного значення поля, яке може містити максимум 15 символів, виділяється по 15 байт пам’яті. Якщо ви введете менше ніж 15 символів, то SQL Server добавить пробіли після останнього символа.

Тип NCHAR (n) має практично ті ж характеристики, що і CHAR. Єдина відмінність між ними полягає в тому, що дані типу NCHAR можуть містити не більше 4000 символів Unicode.

Тип VARCHAR(n) дозволяє зберігати дані змінної довжини, які містять до 8000 символів. На відміну від типу CHAR, розмір пам’яті змінюється в залежності від кількості введених символів.

Наприклад, якщо для поля таблиці визначити тип VARCHAR (15), то елементи цього поля можуть містити до 15 символів. Але якщо ви введете меншу кількість символів, то пробіли добавлятися не будуть. Таким чином, подібні елементи поля будуть займати в пам’яті менше 15 байт. Тому, якщо припускається, що в полі будуть використовуватися текстові дані різної довжини, треба використати тип VARCHAR, щоб зекономити місце на диску.

Тип NVARCHAR має практично ті ж характеристики, що і VARCHAR. Єдина відмінність між ними в тому, що дані типу NVARCHAR можуть містити не більше 4000 символів Unicode.

Типи даних для збереження комбінацій дати і часу DATETIME і SMALLDATETIME

Типи даних DATETIME і SMALLDATETIME використовуються для збереження комбінацій дати і часу. При відображенні даних, збережених за допомогою типів DATETIME SMALLDATETIME SQL Server автоматично форматує їх, щоб представити у звичному форматі. Для роботи з даними цих типів можна використовувати також спеціальні функції дати і часу.

Якщо зберігати дату і час за допомогою типів CHAR, VARCHAR чи інших числових типів, то при відображенні вони не будуть автоматично форматуватись.

Тип DATЕTIME— це перший тип даних для представлення дати і часу, який можна використовувати для збереження значень в полях. Цей тип дозволяє зберігати дату і час в діапазоні від 01.01.1753 до 31.12.9999 н.е.

Для збереження значень типу DATETIME виділяється 8 байт. SQL Server використовує перші 4 байти для збереження кількості днів до чи після базової дати, 1 січня 1900 року. Від’ємні числа говорять про те, що подія відбулась до 1 січня 1900 року, а додатні — після цієї дати. В наступних 4 байтах зберігається час, який вимірюється в мілісекундах від початкової точки — 12 годин.

При виборі значень, що зберігаються за допомогою типу DATETIME, вони будуть відтворюватись в стандартному форматі MM DD YYYY hh:ni AM/PM. Наприклад, Sep 23 1949 11:14 PM. Немає значення, в якому порядку буде вказана дата і час; в будь-якому випадку SQL Server розпізнає їх і збереже значення правильно.

При введенні значень типу DATETIME можна використовувати для дати символи верхнього чи нижнього регістру і залишати між місяцем, днем, роком один чи більше “пробілів”. Якщо вивести час без дати, то буде прийнята стандартна дата, 1 січня 1900 року. Якщо ввести дату без часу, то буде прийнято стандартний час, 12:00AM (24:00). Якщо опустити і дату, і час, то буде введено стандартне значення, 1 січня 1900 12:00АМ (1 січня 1900 24:00).

Дату можна вводити декількома способами. SQL Server розпізнає дату і зберігає її. Дату можна вказати в символьному форматі, використовуючи або скорочену, або повну назву місяця. Між днем і роком можна поставити кому або опустити її.

Параметр DATEFORMAT команди SET не використовується, якщо вводиться місяць в символьному форматі. Якщо при установці SQL Server була вибрана English (USA) мова, то стандартний порядок відтворення значень типу DATETIME наступний: місяць, день, рік. Для зміни стандартного порядку відтворення дати в значенні типу DATETIME використовується команда SET DATEFORMAT.

При використанні числового формату значень DATETIME дозволяється використовувати символи: похила лінія (/), дефіс(-) і крапка (.) в якості проміжків між різними одиницями часу.

Тип SMALLDATETIME — це другий тип даних для представлення дати і часу, який можна використовувати для збереження значення в полях. Цей тип дозволяє зберігати дату і час в діапазоні від 01.01.1900 до 06.06.2079 н. е.

Для збереження значення типу SMALLDATETIME виділяється 4 байти. SQL Server використовує 2 байти для збереження числа днів, які пройшли після базової дати, тобто 1 січня 1900 року. В інших двох байтах зберігається час, який вимірюється у хвилинах, які наступили після опівночі. Точність збереження часу в даних типу SMALLDATETIME становить одну хвилину. Тип SMALLDATETIME використовується при збереженні даних в більш вузькому діапазоні і з меншою точністю, в порівнянні з типом DATETIME.

У прикладі для одного поля визначений тип DATETIME, а для другого — SMALLDATETIME. Після створення таблиці в кожне поле були введені мінімальні значення, які відповідають кожному з заданих типів даних.

CREATE TABLE date_ table

(date 1 DATETIME, date 2 SMALLDATETIME)

INSERT INTO date_ table

VALUES (’01-01-1753’, ’01-01-1900’)

SELECT * FROM date_ table

date 1 date 2

---------------------------------------------------------------------------------

1753-01-01 00:00:00.000 1900-01-01 00:00:00

Спеціальні типи даних

В SQL є набір спеціальних типів даних, які використовуються для зберігання інформації. У більшості випадків інформація зберігається з допомогою більш традиційних типів даних, таких як цілі, із плаваючою крапкою і текстові. Дату і час можна зберігати за допомогою типів DATETIME і SMALLDATETIME.

І хоча для збереження 90% інформації достатньо перелічених типів даних, в деяких випадках можуть знадобитися менш традиційні, особливі типи даних. Наприклад, іноді виникає необхідність у збереженні даних, які приймають лише два значення — істинне чи хибне, так чи ні.

Тип ВІТ використовується для зберігання даних, які можуть приймати лише два значення. Для зберігання типу ВІТ виділяється лише один біт. У результаті можна зберегти лише два можливих значення – нуль (0) або одиницю (1). Якщо у поле, для якого визначений тип ВІТ, ввести значення, яке відрізняється від 0 і 1, то буде збережене значення 1. Тип ВІТ не можна використовувати для зберігання елементів NULL. При використанні типу ВІТ з допомогою одного байта можна представити дані, які знаходяться у восьми різноманітних полях таблиці, при чому поля типу ВІТ не обов’язково повинні бути суміжними. Якщо визначити дев’ять стовпців таблиці типу ВІТ, то для зберігання всіх цих даних буде виділено вже 2 байти.

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

Значення лічильника, яке поміщається SQL Server у поле TIMESTAMP, вказує кількість операцій, виконаних SQL Server. Значення, введені у поле TIMESTAMP, зберігаються у форматі VARBINARY (8), а не у форматі DATETIME чи SMALLDATETIME. Для поля TIMESTAMP значення NULL дозволені по замовчуванню. Значення типу TIMESTAMP — це не дата і не час, але воно завжди є унікальним в межах таблиці і бази даних. Тип TIMESTAMP може бути визначеним тільки для одного поля таблиці.

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

Тип UNIQUEIDENTIFIER — це шістнадцятирозрядний глобальний унікальний ідентифікатор (GUID). Головне призначення типу UNIQUEIDENTIFIER — підтримувати унікальність всіх записів при об’єднанні даних з багатьох різноманітних таблиць, які знаходились у різних базах даних.

Для типу UNIQUEIDENTIFIER дозволені тільки операції рівності і порівняння (= і <>) та оператори IS NOT NULL, IS NULL. Більше ніякі операції порівняння та арифметичні операції не дозволені. Для типу UNIQUEIDENTIFIER дозволені всі обмеження на поля і властивості, за винятком IDENTITY. Для кожного ідентифікатора GUID гарантовано унікальне значення.

Тип BINARY (n) використовується для зберігання бітових ланцюжків, розміром до 8000 байт. Ціле число n в дужках означає довжину цих бітових ланцюжків і може знаходитись в інтервалі від 1 до 8000 байт. Таким чином, мінімальний розмір, який дані типу BINARY (n) займають в пам’яті, — 1 байт. Але при цьому можна зберігати бітові ланцюжки, які складаються з одних нулів.

Тип VARBINARY (n) використовується для збереження бітових ланцюжків, довжиною до 8000 байт. Ціле число n в дужках означає довжину ланцюжків і може знаходитись в інтервалі від 1 до 8000 байт. Таким чином, мінімальний розмір, який дані типу VARBINARY (n) займають в пам’яті — 1 байт.

На відміну від типу BINARY, дані типу VARBINARY займають у пам’яті тільки те місце, яке їм необхідне відповідно до їх розмірів.

Типи TEXT і IMAGE використовуються для зберігання великих об’ємів текстових або двійкових даних. Обидва ці типи зберігають більше двох мільярдів байтів даних. Але дуже неекономно заздалегідь виділяти для типів TEXT і IMAGE значний об’єм памяті. Тому заздалегідь виділяється тільки частина цього об’єму. Решту простору розподіляється в динаміці.

Тип TEXT використовується для зберігання великих об’ємів тексту. Переважно у текстовому форматі зберігаються символи, які можна безпосередньо вивести на пристрій відображення. За допомогою типу TEXT можна зберігати від 1 до 2147483647 байт таких даних.

Дані типу TEXT зберігаються у вигляді рядів фіксованої довжини у першопочатково розподіленій для цього області розміром 8 Кбайт. Додаткові області по 8 Кбайт динамічно добавляються та об’єднуються разом. Області по 8 Кбайт є логічно суміжні, але при цьому вони не обов’язково повинні бути фізично суміжними.

Тип NTEXT використовується для зберігання символів у форматі Unicode. Основна різниця між типами TEXT і NTEXT полягає в тому, що для зберігання кожного символу Unicode потрібно 16 біт, чи 2 байти. Це означає, що у полі типу NTEXT можна зберігати тільки половину від максимально можливої кількості символів для типу TEXT, тобто тільки 1073741823.

Тип IMAGE можна використовувати для зберігання довгих ланцюжків двійкових даних, розміром від 1 до 2147483647 байт. Наприклад, в одному-єдиному значенні поля можна зберігати фотокартки працівників, картинки, малюнки. Дані зберігаються у вигляді елементів фіксованої довжини у початково розподіленій для них області пам’яті розміром 8 Кбайт.

Тип MONEY дозволяє зберігати грошові значення. Дані типу MONEY фізично зберігаються у вигляді 2 частин — цілої та дробової, за допомогою двох 4-байтних цілочисельних форматів. Тип MONEY дозволяє зберігати значення в інтервалі від -922337203685477,5808 до +922337203685477,5807. Значення цього типу зберігаються з точністю до десятитисячних частин грошової одиниці.

Тип SMALLMONEY дозволяє зберегти грошові значення у більш вузькому, в порівнянні з типом MONEY, діапазоні: від –214748,3648 до +214748,3647. Дані типу SMALLMONEY зберігаються у вигляді 2 частин — цілої і дробової, та займають в пам’яті 4 байти.

Поняття про атрибути

Для поля можна визначити не лише тип даних, але й ще одну додаткову характеристику - NULL і NOT NULL. Якщо для поля таблиці визначений атрибут NULL, це дозволяє не вказувати при введенні даних даного поля. Якщо ж, навпаки для стовпця визначений атрибут NOT NULL SQL Server не дозволить лишити дане поле пустим під час вставки рядка. Таким чином, атрибути NULL і NOT NULL виконують функцію перевірки допустимості даних. По замовчуванню полю назначається атрибут NOT NULL, який не дозволяє залишати в полі невизначені значення.

Атрибут IDENTYTY. Визначивши для поля цю властивість, необхідно вказати початкове значення і крок його зростання (лічильник).

Атрибут PRIMARY KEY встановлює первинний (внутрішній) ключ.

Атрибут FOREIGN KEY встановлює вторинний (зовнішній) ключ.

Атрибут UNIQUE застосовується для будь-якого поля з метою не дозволити вводити значення, які повторюються. Таке поле не може бути ключем чи складовою частиною ключа.

Атрибут DEFAULT забезпечує автоматичне введення у поле повне значення.

Атрибут CHECK накладає умови на введення даних.

Для різних СУБД формати типів даних можуть дещо відрізнятися. Основні типи даних SQL приведені в табл. 6.1

Таблиця 6.1. Основні типи даних

Тип даних

Характеристика

ІNTEGER

ціле число (до 10 значущих цифр і знак)

SMALLІNT

"коротке ціле" (до 5 значущих цифр і знак)

DECІMAL(p,q)

десяткове число, що має p цифр (0 < p < 16) і знак; за допомогою q задається число цифр праворуч від десяткової крапки (q < p, якщо q = 0, воно може бути опущене);

FLOAT

дійсне число з 15 значущими цифрами і цілочисельним порядком, який визначається типом СУБД;

CHAR(n)

символьний рядок фіксованої довжини з n символів (0 < n < 256);

VARCHAR(n)

символьний рядок змінної довжини, що не перевищує n символів (n > 0 і різне в різних СУБД, але не менше 4096);

DATE

дата у форматі, визначеному спеціальною командою (за замовчуванням mm/dd/yy); поля дати можуть містити тільки реальні дати, що починаються за кілька тисячоліть до н.е. і обмежені п'ятим-десятим тисячоліттям н.е.;

TІME

час у форматі, визначеному спеціальною командою, (за замовчуванням hh.mm.ss);

DATETІME

комбінація дати і часу;

MONEY

гроші у форматі, який визначає символ грошової одиниці ($, руб, ...) і його розташування ( суфікс або префікс), точність дробової частини й умова для показу грошового значення.