Data Definition Language - позволяет создавать объекты
Код SQL читается программой сверху вниз, слева направо. Команда читается до ;, поэтому вместо пробелов можно также ставить переносы строк, если так удобнее.
Также ключевые слова и типы данных можно писать и заглавными, и прописными буквами, а вот идентификаторы нужно писать чётко, как задавали командами.
Идентификатор — название чего-либо в БД
Команда — некоторое ключевое слово
Оператор — ключевое слово, которое расширяет функционал команды.
Пока что нам нужны ИНДФ:
- Таблица - ИДТ
- Столбца - ИДС
Главные правила:
- Максимальная длина 128 символов
- ИНДФ не начинается с числа
- ИНДФ не содержит пробелов (а если содержит, то пишется только в двойных кавычках)
Important
"" — определяет границы одного ИНДФ
Виды таблиц:
- Исходные (пользовательские)
- Серверные (системные, хранят служебную информацию, пользователей, привилегии и так далее).
- Временные (результирующие, создаются в рамках запроса).
Комментарии создаются двумя путями:
-- Вот так (однострочный)
/*(многострочный)
И вот так
*/
Данные:
Виды данных
- Числовые
- Символьные
Типы данных
- Целочисленные
- С плавающей точкой
- Символьные
- Логические
- Дата/Время
Виды типов данных
- Стандартные(int, float,bool,text)
- Кастомные (money, bigint (10+ цифр), smallint (меньше 10 цифр), name, timestamp)
Некоторые из типов данных:
| ИМЯ | ПСЕВДОНИМ | ЧТО ХРАНИТ? |
|---|---|---|
smallint | int2 | знаковое двухбайтное целое |
integer | int, int4 | знаковое четырёхбайтное целое (примерно 10 цифр максимум) |
bigint | int8 | знаковое целое из 8 байт |
smallserial | serial2 | двухбайтное целое с автоувеличением |
serial | serial4 | четырёхбайтное целое с автоувеличением |
bigserial | serial8 | восьмибайтное целое с автоувеличением |
boolean | bool | логическое значение (true/false) |
bit(N) | битовая строка фиксированной длины N | |
varbit(N) | bit varying(N) | битовая строка переменной длины |
char(N) | character(N) | символьная строка фиксированной длины N, но до 255 символов |
varchar(N) | character varying(N) | символьная строка переменной длины N, можно более 256 символов |
text | Текст, поддерживает самую большую длину (символьная строка переменной длины) | |
real | float4 | число одинарной точности с плавающей точкой (4 байта) |
float | double precision, float8 | число двойной точности с плавающей точкой (8 байт), ограничение задает количество цифр после запятой(точность). |
numeric (p, s) | decimal (p, s) | вещественное число заданной точности |
money | денежная сумма | |
date | календарная дата (год, месяц, день), не имеет ограничений на тип данных | |
time | время суток (без часового пояса) | |
timestamp | дата и время (без часового пояса) | |
uuid | универсальный уникальный идентификатор | |
json | текстовые данные JSON | |
xml | XML-данные |
Ограничение на поле — это ограничение, накладываемое во время объявления типов данных при создании столбцов.
Для символьных это длина
varchar(30) -- 30 максимум
char(40) -- 40 максимальная длина
Если не указать длину, то будет 1!
char=char(1)
С плавающей точкой точность
float(1)
float(3)
Если не ограничивать по дефолту стоит максимальная точность
У целочисленных типов данных нет ограничений на поле, также и на битовые, дата/время.
Команды:
create table - создание таблицы
Общий вид:
create table ИДТ(
ИДС тип_данных ограничения_на_поля... ,
ИДС тип_данных ограничения_на_поля... ,
ИДС тип_данных ограничения_на_поля... ,
ИДС тип_данных ограничения_на_поля...
);
Обращаю внимание!
Запятая после объявления последнего столбца никогда не должна ставиться!
Пример:
create table Employees(
id serial primary key,
surname char(25),
name char(15) not null,
age int check(age > 16)
);
Ограничения на столбец:
null- может быть пустым(содержать null), по умолчаниюnot null- не может быть пустым, должно быть заполненоunique- каждое значение в столбце уникально, не может повторятьсяprimary key- объявление первичного ключа, объединяет в себе unique и not nullcheck- проверка на удовлетворение условию.cascade- это автоматические изменения, внесение, удаление данных, происходящее по связям.indexreferences- и так далее.
Primary key:
- Объявляется внутри строки
id serial primary key - Отдельным столбцом
primary key(ИДС)
Foreign Key:
- Объявляется внутри строки ‘ИДС Тип_данных references ИДТ(ИДС)
- Отдельным столбцом
ИДС references ИДТ(ИДС)
cascade - это автоматическое изменение, внесение, удаление данных, происходящее по связям:
Бывает
- на внесение ‘id serial cascade insert
- на обновление ‘id serial cascade update
- на удаление ‘id serial cascade delete
- Сразу несколько ‘id serial cascade insert, update ...
Check - правило на столбец:
Check - правило на столбец, которое позволяет ограничить какое-либо значение, которое будет вноситься
Общий вид: check (ИДС вид-усл значение)
Пример: check(age > 17)
Виды условий:
- Сравнительные: < > >= <= = !=, где >= и <= — это условия, где значение используется включительно, != — неравенство, ” — одинарные кавычки позволяют искать по символам, например, name = ‘Степан’
alter table - изменение таблицы
Общий вид:
alter table ИДТ оператор
| Действие | Оператор |
|---|---|
| Добавление столбца | add column ИДС тип_данных ограничения |
| Удаление столбца | drop column ИДС |
| Добавление ограничений на столбец | add constraint ИДС ограничения |
| Удаление всех ограничений на столбец | drop constraint ИДС |
| Переименование | rename ИДС to ИДС |
Примеры:
alter table test
add RegistrDate date not null;
alter table test
add constraint RegistrDate unique;
alter table test
drop constraint RegistrDate;
alter table test
drop column RegistrDate;
Нюансы:
- Все новые столбцы будут добавлены в конец таблицы
- Можно добавлять несколько столбцов за 1 раз через запятую
- Если есть хотя бы одна строка данных, то добавить ограничение not null не получится
drop table - удаление таблицы
Общий вид:
drop table ИДС
Оператор команды есть только один - cascade, для удаление связей между таблицами(Foreign Key)
Пример:
drop table test