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