Слайд 2
Модель данных
– Определяет абстракцию данных для приложений
– Включает:
Структуры
данных
Операции
Зависимости
Ограничения
Слайд 3
Модель данных «Сущность-связь»
Впервые описана в 1975 г. как
средство высокоуровневого проектирования БД
Инструмент концептуального уровня
Не содержит операций и
поэтому не может использоваться непосредственно
Развитая система зависимостей и ограничений целостности
Слайд 5
Концептуальные модели данных
Иерархическая
Сетевая
Реляционная
Объектно-реляционная
Слайд 6
В 70-х – 80-х годах, когда компьютерные ученые
все еще носили коричневые смокинги и очки с большими,
квадратными оправами, данные хранились бесструктурно в файлах, которые представляли собой текстовый документ с данными, разделенными (обычно) запятыми или табуляциями.
Слайд 7
Иерархическая модель данных
Слайд 9
Реляционная модель
Первые публикации (1969-1971)
Интенсивное развитие теории в 70-х
гг.
Ранние попытки реализации: 1978
Стандарт SQL –1986
Эффективные реализации SQL: 1990
Слайд 10
Эдгар Франк Кодд
Codd, E.F. (1970).
«A Relational Model
of Data
for Large Shared Data Banks».
Communications of
the ACM
Слайд 12
Реляционная модель – структуры данных
Домены: множества, элементы которых
рассматриваются как скалярные значения
Отношения: предикаты, заданные на прямом
произведении (не обязательно разных) доменов
Атрибуты: аргументы отношений
Позиционные или именованные атрибуты?
Слайд 13
Реляционная модель
Домены D1, D2,…,Dn
Атрибуты A1, A2, …, An
Кортежи
t = , ai∈Di
Формально R : D1хD2..
Dn→ {0,1}
или R ⊂D1хD2.. Dn
D1 = {1; 2; 3}; D2 ={a, b}
R⊂ D1хD2 =
{< 1; a >;< 1; b >;< 2; a >;< 2; b >;< 3; a >;< 3; c >}
Слайд 14
Реляционная модель
Похожа на таблицы
Столбцы – атрибуты
Строки – данные
Шапка
таблицы – имена атрибутов
Слайд 15
Еще раз терминология
Домен – множество возможных значений какого-либо
атрибута
Таблица - отношение
Экземпляр– конкретное наполнение базы данных
Конкретное наполнение
таблицы – тело отношения
Совокупность атрибутов отношения – Заголовок отношения (схема)
Заголовок + тело = значение отношения
Строка таблицы называется кортежем
Слайд 16
Заголовок (схема) отношения
Схема отношения - конечное множество
упорядоченных пар вида , где A называется именем
атрибута, а T обозначает имя некоторого базового типа или ранее определенного домена.
По определению требуется, чтобы все имена атрибутов в заголовке отношения были различны.
Количество атрибутов называется арностью (размерностью) отношения.
Слайд 17
Типы данных
Символьный
Битовый
Точные числа
Округленные числа
Денежные
Дата/время
Интервал
Слайд 18
Отношение – это множество
Кортежи отличаются друг от друга
значением своих атрибутов, а не порядковым номером, временем и
пр.
В реляционной БД не может быть двух одинаковых кортежей в одной таблице
Слайд 19
Сущности
Каждая сущность превращается в таблицу. Имя сущности становится
именем таблицы.
Каждый атрибут становится столбцом. Столбцы для необязательных атрибутов
могут содержать неопределенные значения; столбцы для обязательных - не могут.
Компоненты уникального идентификатора сущности превращаются в ключ таблицы.
Слайд 21
Ключ
Возможный ключ: минимальный набор атрибутов, от которого функционально
зависят все остальные (по которому можно определить все остальные)
Первичный
ключ: один из возможных ключей
Ключи естественные и суррогатные
Слайд 22
Связи
Также хранятся в отношении
Схема данного отношения составляется из
ключевых атрибутов объектов, участвующих связи
Слайд 25
Слабые сущности
Адрес
Сотрудник
живет
Адрес
Слайд 26
Связи М:N
Проект
Сотрудник
участвует
Участие в проекте
Слайд 27
Реляционная алгебра –
механизм манипулирования реляционными данными
Все
операции производятся над отношениями, и результатом операции является отношение.
R=f(R1,
R2, … , Rn)
Слайд 28
Реляционная модель: базовые
операции
Ограничение (селекция, фильтрация)
Проекция
Прямое (декартово)
произведение
Соединение: произведение с последующей фильтрацией
Естественное соединение: соединение по равенству
атрибутов
Слайд 29
SQL
Structured Query Language
Structured English Query Language (1983)
Стандарты: 86,
89, 92, 1999
DDL
create table, create view, . .
. , alter table, alter view, . . . , drop table, drop view, . . .
DML
select, insert, delete, update, commit, rollback
Слайд 30
Создание базы данных
CREATE DATABASE db_name;
DROP DATABASE db_name;
USE db_name;
Слайд 31
Создание БД
CREATE DATABASE database_name [options]
Слайд 32
Идентификаторы
идентификатор может иметь длину до 128 символов;
идентификатор должен
начинаться с буквы;
идентификатор не может содержать пробелы.
номер int,
[Фамилия и
Имя] nvarchar(100),
[!@#$%^&*()_-=+ ~`\.,;:'"[]<>] int);
Слайд 33
CREATE DATABASE Sales
ON ( NAME = Sales_dat,
FILENAME = 'C:\tmp\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON ( NAME = Sales_log, FILENAME = 'C:\tmp\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
Слайд 34
О синтаксисе
Команды разделяются знаком «;»
Пакеты команды разделяются словом
«go»
Комментарии:
В одной строке «--»
Многострочные «/* … */»
Слайд 35
Объекты базы данных
Таблицы
Связи между таблицами
Представления
Индексы
Хранимые процедуры
Функции
Триггеры
Слайд 36
Как создать таблицу
CREATE TABLE tb_name (
( column1 ,
column2 , … )
);
Слайд 37
Типы данных
Точные числа
Округленные числа
Символьный
Символьный Юникода
Битовый
Дата/время
Слайд 38
Точные целые
bigint 8 байт
int 4 байта
smallint 2 байта
tinyint
1 байт
Слайд 39
Точные десятичные
decimal[ (p[ ,s] )] и numeric[ (p[
,s] )]
Числа с фиксированной точностью и масштабом.
p
(точность)
Максимальное количество десятичных разрядов числа (как слева, так и справа от десятичной запятой). Точность должна принимать значение от 1 до 38. По умолчанию для точности принимается значение 18.
s (масштаб)
Максимальное количество десятичных разрядов числа справа от десятичной запятой. Масштаб может принимать значение от 0 до p. Масштаб может быть указан только совместно с точностью. По умолчанию масштаб принимает значение 0; поэтому 0 <= s <= p. Максимальный размер хранилища зависит от точности.
Слайд 40
Decimal/Numeric
«Неупакованное» число с плавающей точкой. Ведет себя подобно
строковому столбцу, содержащему цифровое значение.
Термин «неупакованное» означает, что
число хранится в виде строки и при этом для каждого десятичного знака используется один символ.
Разделительный знак десятичных разрядов, а также знак '-' для отрицательных чисел не учитываются в p (но место для них зарезервировано). Если атрибут s равен 0, величины будут представлены без десятичного знака, т.е. без дробной части.
Слайд 41
Decimal/Numeric
Для хранения чисел, строго меньших 1000 с двумя
знаками после запятой используем
decimal(5,2)
Слайд 42
Точные денежные
Типы данных, представляющие денежные (валютные) значения.
Типы
данных money и smallmoney имеют точность до одной десятитысячной
денежной единицы, которую они представляют.
Перед числовым значением может указываться символ валюты, но храниться будет только число.
Слайд 43
Bit - Битовый
bit
Целочисленный тип данных, который может
принимать значения 1 или 0.
Слайд 44
Округленные числа
Float и real
Float – точность
до 15 знаков
- 1,79E+308 — -2,23E-308, 0 и 2,23E-308
— 1,79E+308
8 байтов
real - точность до 7 знаков
- 3,40E + 38 — -1,18E - 38, 0 и 1,18E - 38 — 3,40E + 38
4 байта
Слайд 45
Float/real
Избегайте использования столбцов типов float и real для сравнения с операторами =
и .
Рекомендуется ограничить использование столбцов float и real операциями сравнения
>
или <.
Microsoft SQL Server использует округление вверх.
Слайд 46
Символьные
char [ ( n ) ]
Символьные данные
фиксированной длины, не в Юникоде, с длиной n байт.
Значение n должно находиться в интервале от 1 до 8000. Размер хранения данных этого типа равен n байт.
varchar [ ( n | max ) ] textvarchar(max)
Символьные данные переменной длины, не в Юникоде. n может иметь значение от 1 до 8 000.
max означает, что максимальный размер хранения равен 2^31-1 байт (2 ГБ). Размер хранения равен фактической длине данных плюс два байта.
Не чувствительны к регистру!
Слайд 47
Символьные Unicode
nchar [ ( n ) ]
Символьные
данные фиксированной длины в Юникоде, с длиной n символов.
Значение n должно находиться в интервале от 1 до 4000. Размер хранения данных этого типа равен 2n байт.
nvarchar [ ( n | max ) ]
Символьные данные переменной длины в Юникоде. n может иметь значение от 1 до 4 000.
max означает, что максимальный размер хранения равен 2^31-1 байт (2 ГБ). Размер хранения равен фактической длине данных плюс два байта.
Не чувствительны к регистру!
Слайд 48
Ввод русских букв в таблицу
Тип поля на nvarchar(N)
или nchar(N)
Перед тестом поставить букву N
(N'русский текст')
Слайд 49
Битовые
binary [ ( n ) ]
Битовые данные
фиксированной длины, с длиной n байт. Значение n должно
находиться в интервале от 1 до 8000. Размер хранения данных этого типа равен n байт.
varbinary [ ( n | max) ]
Битовые данные переменной длины. n может иметь значение от 1 до 8 000.
max означает, что максимальный размер хранения равен 2^31-1 байт (2ГБ). Размер хранения равен фактической длине данных плюс два байта.
Чувствительны к регистру!
Слайд 50
Очень большие
ntext, text, и image данные будут удалены
в будущей версии Сервера MicrosoftSQL.
Избегайте использования этих типов
данных
Используйте nvarchar (max), varchar (max), и varbinary (max) вместо этого.
Слайд 51
DATE/TIME
Date - 3 байта
'YYYY-MM-DD’
Time - 5
байт
Время. Интервал от '-838:59:59' до '838:59:59‘ 'HH:MM:SS'
Datetime -
8 байт
'YYYY-MM-DD HH:MM:SS'
Datetimeoffset - 10 байт (+ часовой пояс)
Слайд 52
DATE/TIME
Date and time(8 байт) - Дата и
время с точностью в 3.33 милисекунды.
Smalldatetime(4 байта) -
Дата и время с точностью в 1 секунду.
Слайд 53
DATE/TIME
От 0001-01-01 до 9999-12-31
От 1 января 1
года нашей эры до
31 декабря 9999 года нашей эры.
Слайд 54
Специальные типы данных
hierarchyid - позиция в древовидной иерархии
geometry представляет
данные в Евклидовой (плоской) системе координат.
geography представляет данные в
системе координат круглой земли (координаты широты и долготы в системе GPS).
xml - хранение XML-данных
Слайд 55
Константы
NULL
‘any string‘
N‘текст в Юникоде‘
Числа без кавычек
'1912-10-25 12:24:32 +10:0'
Слайд 56
Определение типов данных атрибутов - строки
Для коротких символьных
значений и строк фиксированной длины следует выбирать тип CHAR.
Например, для поля "единица измерения" со значениями 'кг', 'шт.', 'уп.' (char(3)), для поля "пол" (char(1)) и т.п.
Для символьных строк переменной длины нужно выбирать тип VARCHAR с указанием максимально возможной длины хранимого значения.
Для символов на 3 и более языках nchar или nvarchar
Слайд 57
Определение типов данных атрибутов - числа
Для числовых атрибутов
без сложных расчетов – тип numeric, указывая реально необходимое
количество разрядов.
Номер сотрудника numeric(4) (до 10000 человек)
Зарплата – numeric(8, 2) (до 999999.99 рублей).
Для числовых атрибутов с расчетами числовые типы, которые хранят данные в машинном (двоичном) представлении (int, bigint…).
Это ускорит выполнение расчётов.
Для числовых атрибутов, имеющих ведущие нули, тип CHAR, а не числовой тип, иначе ведущие нули будут потеряны.
Серия и номер паспорта (char(10).
Слайд 58
Определение типов данных атрибутов - прочее
Для хранения дат
нужно выбирать тип DATE или его варианты (DATETIME, например).
Это позволит использовать арифметику дат и не заботиться о правильности вводимых данных: СУБД сама проверит допустимость даты.
Для семантически одинаковых полей разных таблиц нужно выбирать одинаковые типы данных. Например, ФИО сотрудника и ФИО клиента.
Для упрощения типизации данных можно создать специальные типы данных (create type) и использовать их в качестве типов полей таблиц.
Слайд 59
Типы данных, определяемые пользователем
CREATE TYPE mytype
FROM varchar(11) NOT
NULL ;
Слайд 60
Табличный тип
CREATE TYPE Location AS TABLE
( LocationName VARCHAR(50)
, CostRate INT );
Слайд 61
Преобразование типов данных
SELECT '2'+4
Функции CAST и CONVERT
CAST (
expression AS data_type )
CONVERT ( data_type, expression [ ,
style ] )
Слайд 62
Примеры CAST
CAST (expression AS data_type)
SELECT CAST('12' as INT)+45
57
SELECT
CAST(27 as CHAR(2))+'R'
27R
SELECT CAST ( $10.50 as VARCHAR(10) )
10.50
Слайд 63
Примеры CONVERT
CONVERT ( data_type, expression [ , style
] )
CONVERT(VARCHAR(12), GETDATE(), 1)
02/21/15
SELECT CONVERT (bit, 'true')
1
SELECT CONVERT(bit,
'false')
0
Слайд 64
Временные таблицы локальные
CREATE TABLE #TestTable
(
id
INT PRIMARY KEY
)
Таблица будет существовать только во время
выполнения одной сессии, и работать с ней сможете только вы.
БД tempdb
Слайд 65
Временные таблицы глобальные
CREATE TABLE ##TestTable
(
id
INT PRIMARY KEY
)
Таблица будет видна всем. Уничтожается после
закрытия создавшей ее сессии /окончания работы с ней другими пользователями
Слайд 66
Табличные переменные
DECLARE @table_var table(id int);
Автоматически очищаются в конце
функции, хранимой процедуры или пакета, где они были определены
Табличная
переменная не участвует в транзакции.
Не подходят для хранения значительных объёмов данных (>100 строк).
Слайд 67
Передача имени таблицы
DECLARE @SQL varchar(8000),
@table_name varchar(20)='dbo.Employees'
SET @SQL
= 'SELECT * FROM ' + @table_name
exec(@SQL)
Слайд 68
Типы данных, определяемые пользователем
user defined type
CREATE TYPE
mytype
FROM varchar(11) NOT NULL ;
Слайд 69
Табличный тип
В БД объявляется user defined type в
виде таблицы с нужным типом данных. Его можно передавать
в хранимую процедуру как параметр. В хранимой процедуре этот тип будет виден как t-sql таблица, к которой можно делать запросы.
CREATE TYPE newlist AS TABLE(id int NULL)
Слайд 70
Создание таблицы
CREATE TABLE table_name
(
atr1, [atr2,…]
)
Слайд 71
Определение атрибутов таблицы
{ имя столбца }
{
тип данных}
[ значение по умолчанию]
[ список ограничений
]
Слайд 72
Создание таблицы
CREATE TABLE people (
id INT
, name CHAR(20)
,
address VARCHAR(35)
, birthday DATE)
Слайд 73
Задание ограничений
NOT NULL
| [
PRIMARY KEY | UNIQUE ]
| references
|
CHECK ( условие )
Слайд 74
Ненулевые значения
CREATE TABLE people (
id INT
, name CHAR(20)
NOT NULL
, address VARCHAR(35)
, birthday DATE)
Слайд 75
Значение по умолчанию
CREATE TABLE people (
id INT
, name
CHAR(20)
, address VARCHAR(35) DEFAULT ‘Без регистрации’
, birthday DATE)
Слайд 76
Уникальность поля
CREATE TABLE people (
id INT UNIQUE NULL
,
name CHAR(20)
, address VARCHAR(35)
, birthday DATE)
Несколько полей (или их
комбинаций) могут быть уникальны
Уникальное поле может быть NULL
Слайд 77
Первичный ключ
CREATE TABLE people (
id INT PRIMARY
KEY
, name CHAR(20) NOT NULL
, address VARCHAR(35)
, birthday DATE);
PRIMARY
KEY – всегда NOT NULL
PRIMARY KEY – только один в таблице
Слайд 78
Первичный ключ –
несколько атрибутов
CREATE TABLE people (
id INT
UNIQUE
, name CHAR(20)
, address VARCHAR(35)
, birthday DATE
, PRIMARY
KEY (name, birthday))
Слайд 79
Уникальность –
несколько атрибутов
CREATE TABLE people (
id INT
PRIMARY KEY
, name CHAR(20)
, address VARCHAR(35) UNIQUE
, birthday DATE
,
UNIQUE (name, birthday)),
Слайд 80
Вычисляемый столбец
CREATE TABLE t1 (
a int,
b int,
c AS a/b [ PERSISTED [ NOT NULL ]
]);
Слайд 81
Вычисляемый столбец
Если не указано иное, вычисляемые столбцы являются
виртуальными столбцами, которые физически не хранятся.
Их значения вычисляются
заново каждый раз при обращении к ним запроса.
Для физического хранения вычисляемых столбцов в таблицах используется ключевое слово PERSISTED - можно создать на вычисляемом столбце индекс
Слайд 82
Вычисляемый столбец
Если формула связывает два выражения различных типов
данных, то по правилам приоритета типов данных определяется, какой
тип данных имеет меньший приоритет и будет преобразован в тип данных с большим приоритетом.
Если неявное преобразование не поддерживается, возвращается ошибка «Error validating the formula for column column_name.».
Используйте функцию CAST или CONVERT, чтобы устранить конфликт типа данных.
6/4=1 !!!!!
Слайд 83
Вычисляемые столбцы
при создании таблицы
CREATE TABLE t2 (
a
int
, b int
, c int
, x float
, y AS CASE x
WHEN 0 THEN a
WHEN 1 THEN b
ELSE c
END
);
Слайд 84
Вычисляемые столбцы
при создании таблицы
CREATE TABLE people (
id
INT PRIMARY KEY
, birth DATE
, salary INT
, age
as DATEDIFF(YEAR, GETDATE(),birth)
, nalog as CAST(salary as real)*13/100
)
Слайд 85
Атрибут IDENTITY
IDENTITY [ (seed ,increment) ]
Seed - номер
первой строки, вставляемой в таблицу
Increment - «Шаг» после последнего
добавленного
Надо определять либо и начальный номер, и шаг, или ничего. По умолчанию (1,1).
Сброс - DBCC CHECKIDENT ('имя_таблицы', RESEED, новое_стартовое_значение)
Слайд 86
Атрибут IDENTITY
CREATE TABLE animals
(id INT NOT NULL
IDENTITY(10,2)
, name CHAR(30) NOT NULL
, PRIMARY KEY (id));
INSERT INTO
animals (name) VALUES ("dog"),("cat"),("penguin"),("lax"),("whale");
Слайд 87
Проверка ограничений
CREATE TABLE people (
id int PRIMARY
KEY
, name CHAR(20)
, address VARCHAR(35)
, birthday DATE
, beg_date DATE
,
gender CHAR
, CHECK (gender IN (‘F’, ‘M’))
)
CHECK с использованием функций:
(стаж(birthday, beg_date) < возраст(birthday))
Слайд 88
Проверка ограничений
CREATE TABLE people (
id int PRIMARY KEY
,
name CHAR(20)
, address VARCHAR(35)
, birthday DATE
, gender CHAR
,
CONSTRAINT chk_Person CHECK (gender IN (‘F’, ‘M’))
)
Слайд 89
Проверка ограничений
шаблоны LIKE
CREATE TABLE people (
id int
PRIMARY KEY,
name CHAR(20) CHECK (name LIKE ‘[A-Z]%’),
zip CHAR(6) CHECK
(zip LIKE ‘_[1-35][0-9]’),
address VARCHAR(35),
birthday DATE,
gender CHAR
)
Слайд 91
Внешний ключ
CREATE TABLE people (
id INT PRIMARY
KEY
, name CHAR(20) NOT NULL
, address VARCHAR(35)
, birthday DATE);
У
каждого может быть несколько телефонов
Слайд 92
Внешний ключ
CREATE TABLE phone (
id_p int
, type CHAR
CHECK (type IN (‘H’, ‘M’, ‘W’)
, phone_code char(3) DEFAULT
‘812’
, phone_number numeric(7)
)
Слайд 93
Внешний ключ
CREATE TABLE phone (
id_p int REFERENCES people
(id)
, type CHAR CHECK (type IN (‘H’, ‘M’, ‘W’)
,
phone_code char(3) DEFAULT ‘812’
, phone_number char(7)
)
Слайд 94
Внешний ключ
CREATE TABLE phone (
id_p int,
type CHAR CHECK
(type IN (‘H’, ‘M’, ‘W’),
phone_code char(3) DEFAULT ‘812’,
phone_number char(7),
FOREIGN
KEY (id_p) REFERENCES people (id))
Слайд 95
Требования внешнего ключа
Поле, на который ссылается внешний ключ,
должно быть PRIMARY KEY или UNIQUE
Оба поля должны быть
строго одного типа!
Называться поля могут по-разному
Слайд 96
Внешний ключ
FOREIGN KEY (index_col_name, ...)
REFERENCES table_name (index_col_name, ...)
[ON
DELETE
{NO ACTION | SET NULL |CASCADE| SET DEFAULT}]
[ON UPDATE
{NO ACTION | SET NULL |CASCADE| SET DEFAULT}]
Слайд 97
Ссылочная целостность –
стратегии:
NO ACTION - отмена операции
CASCADE
- каскадная модификация
UPDATE(1) UPDATE(2)
DELETE(1) DELETE(2)
SET NULL - отложенная
проверка ограничений – замена несуществующего значения на NULL
SET DEFAULT замена несуществующего значения на значение по умолчанию
Слайд 98
SET NULL | CASCADE
CREATE TABLE phone {
id_p int
REFERENCES people (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
…}
Слайд 99
Внешний ключ –
нереализуемые связи
Нельзя реализовать при
помощи внешнего ключа связи с кардинальностью 1:n или n:m,
обязательные в обе стороны.
Например, связь заказы–строки заказов: заказ не может быть пустым, и заказанный товар должен входить в определённый заказ.
Эта проблема обычно решается так: связь делается необязательной со стороны первичного ключа, а внешний ключ остаётся обязательным. При этом в приложении необходимо предусмотреть правило обработки пустых заказов (например, их удаление).
Слайд 100
Описание ограничений целостности
Если какое-либо ограничение целостности может быть
включено в структуру БД, то его надо реализовать именно
так.
Необходимо обратить особое внимание на поля таблиц, для которых домен определён как список возможных значений. Это ограничение целостности можно реализовать в виде: CHECK(<поле> IN (<список значений>)).
'незаконченное высшее',
'незаконч. высшее',
'н. высш.' и т.д..
Слайд 101
Описание ограничений целостности
Но такой подход имеет следующий недостаток:
добавление нового значения в список потребует изменения схемы отношения.
Можно поступить до-другому: вынести этот список значений в отдельное отношение. Например, список типов образования (начальное, неполное среднее, среднее, средне-специальное, незаконченное высшее, высшее) для таблицы СОТРУДНИКИ.
Таблица ТИПЫ ОБРАЗОВАНИЯ будет состоять из одного поля Название типа, определённого как первичный ключ. Тогда поле Образование таблицы СОТРУДНИКИ станет внешним ключом.
Слайд 102
Внешний ключ –
нереализуемые связи
К необычным конструкциям
данных можно отнести так называемые взаимоисключающие связи, когда подчинённая
сущность связана с одной из двух родительских сущностей. Например, счёт в банке может принадлежать либо физическому лицу, либо юридическому, и не может принадлежать и тому, и другому либо не принадлежать никому.
“you cannot get a job until you have experience, and you cannot get experience until you have a job!”
Слайд 103
Изменение таблицы
Добавляем столбец
ALTER TABLE table_name
ADD column_name datatype
Слайд 104
Изменение таблицы
Удаляем столбец
ALTER TABLE table_name
DROP COLUMN column_name
Слайд 105
Добавление/снятие ограничений
ALTER TABLE people
ADD CHECK (id>0)
ALTER TABLE
people
ADD CONSTRAINT chk_Person CHECK (id>0 AND address='SPb')
ALTER TABLE
people
DROP CONSTRAINT chk_Person
Слайд 106
Изменение таблицы
Изменяем столбец
ALTER TABLE table_name
ALTER COLUMN column_name datatype
Слайд 107
Изменение таблицы
Добавляем первичный ключ
ALTER TABLE employee
ADD CONSTRAINT c1
PRIMARY KEY (id)
id должен быть NOT NULL!
Слайд 108
Изменение таблицы
Добавляем внешний ключ
ALTER TABLE employee
ADD FOREIGN KEY
(dno)
REFERENCES department(dnumber)
Слайд 109
Изменение таблицы
Добавляем ограничение
ALTER TABLE exd WITH NOCHECK
ADD
CONSTRAINT exd_check CHECK (column_a > 1)
Слайд 110
Нельзя изменять следующие столбцы
Столбец с типом данных timestamp.
Вычисляемый столбец
или используемый в вычисляемом столбце.
PRIMARY KEY или [FOREIGN KEY]
REFERENCES.
Используется в ограничениях CHECK или UNIQUE. Однако допустимо изменение длины столбца изменяемой длины, используемого в ограничении CHECK или UNIQUE.
Некоторые изменения типов данных могут повлечь за собой изменения в данных. Например, изменение столбца типа nchar или типа nvarchar на char или varchar может вызвать преобразование символов национальных алфавитов.
Слайд 111
Вставка
INSERT INTO tbl_name (col1, col2)
VALUES ('Character
data1',1), ('Character data2',2), (…);
Будут вставлены либо все строки, либо
ни одной – операция неделима!!!
INSERT INTO Orders (Order_ID, Customer_ID, Order_Date) VALUES (34, 'FRANS', '4/2/2004');
Слайд 112
Вставка
INSERT INTO tbl_name (col1, col2)
VALUES ('Character
data',1), (…)
Можно:
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
Но нельзя:
INSERT INTO tbl_name
(col1,col2) VALUES(col2*2,15);
Слайд 113
Изменение
UPDATE tbl_name
SET col1=expr1 [, col2=expr2 ...]
[WHERE where_definition]
UPDATE Product SET
ListPrice = ListPrice *
2
, MyDate=MyDate+1
WHERE id=158;
Слайд 114
Удаление
DELETE FROM tbl_name
[WHERE where_definition];
Если
не указать условие, то будут удалены все строки таблицы
TRUNCATE
TABLE table_name ;
Слайд 115
Ограничиваем число строк
INSERT | DELETE | UPDATE
[ TOP
(expression) [PERCENT]]
Слайд 116
Удаление таблицы
DROP TABLE имя_таблицы
удаляет и данные, и структуру.