4. SQL

advertisement
SQL
Создание базы данных
• CREATE DATABASE
• ALTER DATABASE
• DROP DATABASE
Определение структур базы данных
(DDL)
•
•
•
•
•
•
CREATE TABLE,
ALTER TABLE,
DROP TABLE,
CREATE INDEX,
ALTER INDEX,
DROP INDEX.
Манипулирование данными (DML)
• INSERT,
• UPDATE,
• DELETE.
Выборка данных (DQL)
• SELECT
Идентификаторы
• идентификатор может иметь длину до 128
символов;
• идентификатор должен начинаться с буквы;
• идентификатор не может содержать
пробелы.
Типы данных
• Символьный
• Битовый
• Точные числа
CHAR | VARCHAR
BIT | BIT VARYING
NUMERIC | DECIMAL |
INTEGER | SMALLINT
• Округленные числа
FLOAT | REAL |
DOUBLE PRECISION
• Дата/время DATE | TIME | TIMESTAMP
• Интервал
INTERVAL
Истинно целые типы
•
•
•
•
•
INTEGER
SMALLINT
NUMERIC (p)
«+» или «-»
Примеры литералов типов INTEGER и
SMALLINT: 1826545, 876.
Точные типы, допускающие наличие
дробной части
• Тип NUMERIC. (NUMBER)
NUMERIC
NUMERIC (p) NUMERIC (p, s)
p задает точность значений (количество
цифр),
s – шкалу (число десят. цифр в дробной части)
округление, если s отрицательно
• Тип DECIMAL.
DECIMAL
DECIMAL (p)
DECIMAL (p, s)
• «+» или «-» «.».
Приближенные числовые типы
• Тип REAL
• Тип DOUBLE PRECISION.
Точность значений > точности типа REAL.
• Тип FLOAT.
FLOAT FLOAT (p)
• Примеры литералов приближенных числовых
типов: 123, 123.12, 123E12, 123.12E12.
xEy  x*(10y).
Типы символьных строк
• Тип – CHAR фиксированная длина. (CHARACTER)
CHAR CHAR (x)
длина x
• Тип VARCHAR– переменная длина.
(CHARACTER VARYING , VARCHAR2)
VARCHAR
VARCHAR (x)
длина  x
• Тип CLOB - CHARACTER LARGE OBJECT.
CLOB (z)
Операции с символьными строками.
• || - конкатенация
• SUBSTRING - функция выделения подстроки
SUBSTRING (s, n, m)
строку, номер начальной позиции и длину
• UPPER
LOWER
• CHARACTER_LENGTH, OCTET_LENGTH,
BIT_LENGTH
• POSITION
POSITION (s, s1)
Типы битовых строк
• Тип BIT.
BIT
BIT (x)
• Тип BIT VARYING.
BIT VARYING BIT VARYING (x)
• Тип BLOB (BINARY LARGE OBJECT).
BLOB (z)
• B – двоичные
X – шестнадцатеричные
B’0111001111000111111111’,
X’78FBCD0012FFFFA’.
Типы даты и времени
• Тип DATE.
DATE ’yyyy-mm-dd’, где символы y, m и d десятичные числа.
• Тип TIME.
TIME ’hh:mm-ss:f...f’, где символы h, m, s и f десятичные числа.
• Тип TIMESTAMP (DATETIME).
TIMESTAMP ’yyyy-mm-dd hh:mm-ss:f...f’, где
символы y, m, d, h, m, s и f - десятичные числа.
INTERVAL
• разность между двумя значениями даты или времени.
INTERVAL start (p) [ TO end (q)]
«start» и «end» могут задаваться YEAR, MONTH, DAY,
HOUR, MINUTE и SECOND.
Параметр p задает требуемую точность лидирующего
поля интервала (число десятичных цифр). По
умолчанию p=2.
end = SECOND  q - точность долей секунды.
• INTERVAL YEAR (p) TO MONTH
• INTERVAL DAY,
• INTERVAL DAY TO HOUR,
• INTERVAL DAY (p) TO MINUTE,
• INTERVAL DAY (p) TO SECOND (q)
Булевский тип
• Тип BOOLEAN
TRUE, FALSE и UNKNOWN
трехзначная логика.
• UNKNOWN - NULL
Трехзначная логика
Объекты базы данных(1):
• Tables
Таблицы базы данных, в которых хранятся
собственно данные
• Views
Виртуальные таблицы для отображения
данных из таблиц
• Stored Procedures
Хранимые процедуры
• Triggers Специальные хранимые процедуры,
вызываемые при изменении данных в таблице
• User Defined function Создаваемые пользователем
функции
• Indexes Индексы – дополнительные структуры,
призванные повысить производительность работы с
данными
• User Defined Data Types
Определяемые
пользователем типы данных
Объекты базы данных(2):
• Constraints
Ограничение целостности –
объекты для логической целостности данных
• Users
Пользователи, обладающие доступом
к базе данных
• Rules
Правила базы данных, позволяющие
контролировать логическую целостность
данных
• Roles
Роли, позволяющие объединять
пользователей в группы
• Defaults Умолчания или стандартные
установки базы данных
Создание БД
• CREATE DATABASE database_name options
• options:
[ON [PRIMARY]
[ <определение_файла> [,...n] ]
[,<определение_группы> [,...n] ] ]
[ LOG ON {<определение_файла>[,...n] } ]
TABLESPACE
Создание БД
• <определение_файла>::=
• ([ NAME=логическое_имя_файла,]
• FILENAME='физическое_имя_файла'
• [,SIZE=размер_файла ]
• [,MAXSIZE={max_размер_файла
|UNLIMITED } ]
• [, FILEGROWTH=автом_величина_прироста
] )[,...n]
CREATE DATABASE Archive
ON PRIMARY ( NAME=Arch1,
FILENAME=’c:\user\data\archdat1.mdf’,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch2,
FILENAME=’c:\user\data\archdat2.mdf’,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch3,
FILENAME=’c:\user\data\archdat3.mdf’,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20)
LOG ON
(NAME=Archlog1,
FILENAME=’c:\user\data\archlog1.ldf’,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Archlog2,
FILENAME=’c:\user\data\archlog2.ldf’,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20)
<изменение_базы_данных> ::=
ALTER DATABASE имя_базы_данных
{ ADD FILE <определение_файла>[,...n]
[TO FILEGROUP имя_группы_файлов ]
| ADD LOG FILE <определение_файла>[,...n]
| REMOVE FILE логическое_имя_файла
| ADD FILEGROUP имя_группы_файлов
| REMOVE FILEGROUP имя_группы_файлов
| MODIFY FILE <определение_файла>
| MODIFY FILEGROUP имя_группы_файлов
<свойства_группы_файлов>}
Создание таблицы
• CREATE TABLE table_name {
atr1, [atr2,…]
}
Создание таблицы
• CREATE TABLE people {
name CHAR(20) UNIQUE,
address VARCHAR(35),
birthday DATE}
Определение атрибутов таблицы
•
•
•
•
{ имя столбца }
{ тип данных}
[ значение по умолчанию]
[ список ограничений ]
Значение по умолчанию
• CREATE TABLE people {
name CHAR(20) DEFAULT=‘NONAME’,
address VARCHAR(35),
birthday DATE}
Задание ограничений
•
•
•
•
NOT NULL
| { PRIMARY KEY | UNIQUE }
| references
| CHECK ( условие )
(1)
(2)
(3)
(4)
CREATE TABLE EMP (
EMP_NO EMP_NO PRIMARY KEY,
EMP_NAME VARCHAR(20) DEFAULT 'Incognito' NOT NULL,
EMP_BDATE DATE DEFAULT NULL CHECK (
VALUE >= DATE '1917-10-24'),
(5)
EMP_SAL SALARY,
(6)
DEPT_NO DEPT_NO DEFAULT NULL REFERENCES
DEPT ON DELETE SET NULL,
(7)
PRO_NO PRO_NO DEFAULT NULL,
(8)
FOREIGN KEY PRO_NO REFERENCES PRO (PRO_NO)
ON DELETE SET NULL,
(9)
CONSTRAINT PRO_EMP_NO CHECK
((SELECT COUNT (*) FROM EMP E
WHERE E.PRO_NO = PRO_NO) <= 50));
Первичный ключ
• NOT NULL всегда
• CREATE TABLE people {
name CHAR(20) PRIMARY KEY,
address VARCHAR(35),
birthday DATE}
• CREATE TABLE people {
name CHAR(20),
address VARCHAR(35),
birthday DATE,
PRIMARY KEY (name, birthday)}
Возможный ключ
• NULL или NOT NULL– возможный ключ
• CREATE TABLE people {
name CHAR(20) UNIQUE,
address VARCHAR(35),
birthday DATE}
• CREATE TABLE people {
name CHAR(20),
address VARCHAR(35),
birthday DATE,
UNIQUE (name, birthday)}
Проверка ограничений
• CREATE TABLE people {
name CHAR(20) PRIMARY KEY,
address VARCHAR(35),
birthday DATE,
gender CHAR CHECK (gender IN (‘F’, ‘M’),
}
• CHECK с использованием функций:
стаж < возраст()
Внешний ключ
• REFERENCES table (atr1)
• FOREIGN KEY (atr1, …) REFERENCES table
(t_atr1, …)
• CREATE TABLE phone {
name CHAR (20) REFERENCES people (name),
type CHAR CHECK (type IN (‘H’, ‘M’, ‘W’),
phone_code numeric(3) DEFAULT=‘812’,
phone_number numeric(7)}
Ссылочная целостность –
стратегии:
• Отмена операции
INSERT(1), UPDATE(1), DELETE(2), UPDATE(2)
• Каскадная модификация
UPDATE(2) UPDATE(1)
DELETE(2)  DELETE(1)
• Присвоить значение NULL
• Отложенная проверка ограничений –
замена несуществующего значения на NULL
SET NULL | CASCADE
• CREATE TABLE phone {
name CHAR (20) REFERENCES people (name)
ON DELETE CASCADE
ON UPDATE CASCADE,
…}
•
Удаление таблицы
• DROP TABLE имя_таблицы [RESTRICT |
CASCADE]
• В отличие от DELETE удаляет и данные, и
структуру.
• RESTRICT – запрет на удаление
• CASCADE
Download