Создание определяемых пользователем функций (компонент database engine)create user-defined functions (database engine)
Содержание:
- SQL CREATE INDEX
- SQL Учебник
- Создание таблицы в базе данных с помощью PHP (PDO)
- SQL Учебник
- SQL References
- Исходные данные
- SQL Create Table example
- Создание структуры базы данных Корабли
- SQL Пример ALTER TABLE
- Список заданий
- Создание table в Management Studio
- Типы данных в MySQL
- SQL Ограничения
- Пишем SQL запрос для создания таблицы базы данных
- SQL Учебник
- SQL Create Database statement
- SQL Учебник
- Предусловия
- Работа в сервисе sql fiddle
- Синтаксис для Oracle
- SQL Справочник
- Create Table Foreign Key Syntax
- Синтаксис для MySQL
- SQL Учебник
- SQL Учебник
- Создание таблицы базы данных
SQL CREATE INDEX
Команда используется для создания индексов в таблицах (позволяет дублировать значения).
Индексы используются для быстрого извлечения данных из базы данных.
Пользователи не могут видеть индексы, они просто используются для ускорения поиска/запросов.
Следующий SQL создает индекс с именем «idx_lastname» в столбце «LastName» таблицы «Persons»:
CREATE INDEX idx_lastname
ON Persons (LastName);
Если вы хотите создать индекс для комбинации столбцов, вы можете перечислить имена столбцов в круглых скобках, разделенных запятыми:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
Примечание: Синтаксис создания индексов различается в разных базах данных. Поэтому: проверьте синтаксис для создания индексов в вашей базе данных.
Примечание: Обновление таблицы с индексами занимает больше времени,
чем обновление таблицы без них (поскольку индексы также нуждаются в обновлении).
Поэтому создавайте индексы только для тех столбцов, по которым будет часто выполняться поиск.
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Создание таблицы в базе данных с помощью PHP (PDO)
<?php
$server = «localhost»;
$user = «root»;
$password = «MySafePass4!»;
$db_name = «Bookstore»;
try {
// Открываем соединение
$db = new PDO(«mysql:host=$server;dbname=$db_name», $user, $password);
// Создание исключения при ошибке
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Запрос на создание таблицы
$sql = «CREATE TABLE books(«.
«id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,».
«title VARCHAR(50) NOT NULL,».
«author VARCHAR(50) NOT NULL,».
«genre SET(‘Драма’,’Роман’,’Повесть’,’Рассказ’,’Поэма’),».
«price DECIMAL(15,2),».
«edition TINYINT UNSIGNED DEFAULT ‘1’ NOT NULL».
«isbn VARCHAR(50),».
«page_num SMALLINT UNSIGNED,».
«publish_year SMALLINT(4),».
«creation_date TIMESTAMP);»;
// Выполняем запрос
$db->exec($sql);
echo «Таблица успешно создана!»;
}
catch(PDOException $e) {
echo «Ошибка при создании таблицы в базе данных: » . $e->getMessage();
}
// Закрываем соединение
$db = null;
?>
1 |
<?php $server=»localhost»; $user=»root»; $password=»MySafePass4!»; $db_name=»Bookstore»; try{ // Открываем соединение $db=newPDO(«mysql:host=$server;dbname=$db_name»,$user,$password); // Создание исключения при ошибке $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // Запрос на создание таблицы $sql=»CREATE TABLE books(«. «id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,». «title VARCHAR(50) NOT NULL,». «author VARCHAR(50) NOT NULL,». «genre SET(‘Драма’,’Роман’,’Повесть’,’Рассказ’,’Поэма’),». «price DECIMAL(15,2),». «edition TINYINT UNSIGNED DEFAULT ‘1’ NOT NULL». «isbn VARCHAR(50),». «page_num SMALLINT UNSIGNED,». «publish_year SMALLINT(4),». «creation_date TIMESTAMP);»; // Выполняем запрос $db->exec($sql); echo»Таблица успешно создана!»; } catch(PDOException$e){ echo»Ошибка при создании таблицы в базе данных: «.$e->getMessage(); } // Закрываем соединение $db=null; ?> |
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
SQL References
SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL Quick Ref
Исходные данные
База создана, поэтому можно подумать о её структуре. Планируется создание двух таблиц:
1. Goods – table с информацией о товарах. Будет содержать несколько столбцов:
— ProductId. Представляет собой идентификатор товара. Значение не должно быть NULL. Также здесь будет первичный ключ;
— Category. Это ссылка на категорию товара. Не NULL. Если товар не распределён в нужную категорию, ему присваивается категория по умолчанию («Не указана», «Не определена»);
— ProductName. В этом столбце будет наименование товара. Не NULL;
— Price. Речь идёт о стоимости. Если цена ещё не определена, возможен NULL.
2. Categories — вторая table. В ней будет описание категорий реализуемых товаров, представленное двумя столбцами:
— CategoryId. Представляет собой идентификатор категории. Не NULL, первичный ключ;
— CategoryName. Название категории, не NULL.
Для того чтобы нельзя было внести товар с несуществующей категорией, будет добавлено ограничение внешнего ключа.
SQL Create Table example
Let’s take a look at the definition of our two tables:
First, we’ll define the city table.
1 |
— Table: city CREATETABLEcity ( idintNOTNULLIDENTITY(1,1), city_namechar(128)NOTNULL, latdecimal(9,6)NOTNULL, longdecimal(9,6)NOTNULL, country_idintNOTNULL, CONSTRAINTcity_pkPRIMARYKEY(id) ); |
Please notice a few things:
- NOT NULL -> This is a property telling us that this column can’t be empty (must be defined)
-
IDENTITY(1, 1) -> is also a property of the column telling us that this value shall be generated
automatically, starting from 1 and increasing by 1 for each new record -
CONSTRAINT city_pk PRIMARY KEY (id) -> This is not a column, but the rule, telling us that column id shall
contain only UNIQUE values. So only 1 city can have id =5
1 |
— Table: country CREATETABLEcountry ( idintNOTNULLIDENTITY(1,1), country_namechar(128)NOTNULL, country_name_engchar(128)NOTNULL, country_codechar(8)NOTNULL, CONSTRAINTcountry_ak_1UNIQUE(country_name), CONSTRAINTcountry_ak_2UNIQUE(country_name_eng), CONSTRAINTcountry_ak_3UNIQUE(country_code), CONSTRAINTcountry_pkPRIMARYKEY(id) ); |
Here we have 1 new CONSTRAINT and that is the UNIQUE constraining. This one tells us that this value must be UNIQUE
within this table. E.g. CONSTRAINT country_ak_1 UNIQUE (country_name) defines that we can’t store 2
countries with the same name.
The last part of the script is the definition of foreign keys. We have only 1 such key and it relates city and
country table (city.county_id = country.id).
1 |
— foreign keys ALTERTABLEcityADDCONSTRAINTcity_country FOREIGNKEY(country_id) REFERENCEScountry (id);
|
Keys (primary and foreign) are too complex and shall be covered in a separate article. After executing these
commands, the status of our database is as in the picture below:
Создание структуры базы данных Корабли
Предлагаем рассмотреть sql запросы примеры, предназначенные для решения рядовых задач по выборке данных из базы данных .
Задание: Создать базу данных , используя СУБД MySQL (phpMyAdmin) либо другие возможные для работы с SQL, СУБД
Задание: В созданной базе данных , добавить таблицы, согласно схеме:
Важно: При заполнении таблиц следует обязательно учесть, что сначала заполняются главные таблицы!!! В нашем случае это таблицы и. И только потом данные вставляются в подчиненные таблицы
Иначе возникнет ошибка!
Важно: При вставке поля типа Дата и время (date and time) чаще всего используется формат (для mySQL и некоторых других СУБД)
Задание: Заполните таблицы данными (согласно изображениям таблиц ниже), либо используя возможности СУБД, либо при помощи запроса INSERT
Таблица Классы: |
Таблица Сражения: |
Таблица Корабли: |
Таблица Результаты: |
SQL Пример ALTER TABLE
Посмотрите на таблицу «Persons»:
ID | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Теперь мы хотим добавить столбец с именем «DateOfBirth» в таблицу «Persons».
Мы используем следующую инструкцию SQL:
ALTER TABLE Persons
ADD DateOfBirth date;
Обратите внимание, что новый столбец «DateOfBirth» имеет тип date и будет содержать дату.
Тип данных указывает, какой тип данных может содержать столбец.
Для получения полного описания всех типов данных, доступных в MS Access, MySQL и SQL Server,
перейдите к нашему полному Справочнику типов данных. Таблица «Persons» теперь будет выглядеть так:
Таблица «Persons» теперь будет выглядеть так:
ID | LastName | FirstName | Address | City | DateOfBirth |
---|---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes | |
2 | Svendson | Tove | Borgvn 23 | Sandnes | |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Список заданий
# | Задание | Сложность | ||
---|---|---|---|---|
1 | Вывести классы всех кораблей США. Вывод: страна, класс | 1 | ||
2 | Перечислить названия всех кораблей, имеющихся в базе. Упорядочить их по алфавиту | 1 | ||
3 | Перечислить все сражения и их даты, упорядочить по дате | 1 | ||
4 | Найти все корабли (из таблицы ), имена классов которых заканчиваются на букву «о». Упорядочить по названию | 1.1 | ||
5 | Найти все корабли, имена классов которых заканчиваются на букву «о», но не «го» | 1.1 | ||
6 | Найти все корабли, название которых начинается на букву «М» | 1.1 | ||
7 | Вывести максимальное число орудий | 1.2 | ||
8 | Вывести минимальный калибр | 1.2 | ||
9 | Вывести средний показатель водоизмещения, используя функцию | 1.2 | ||
10 | Удалить сведения о классах кораблей в таблице , у которых число орудий равно 1 | 2 | ||
11 | Удалить из таблицы Сражения битву, которая произошла 12.12.1924 | 2 | ||
12 | Удалить сведения о корабле, который был спущен на воду в 1872 году | 2 | ||
13 | Измените результат битвы, в которой участвовал корабль Киришима, на «Поврежден» | 3 | ||
14 | В таблице Корабли измените название корабля «Мирури» на «Мисури» | 3 | ||
15 | Установите число орудий для класса «Мото» равный 3 | 3 | ||
16 |
По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли с известным годом спуска на воду). Вывести названия кораблей и водоизмещение Показать решение:
|
4 | ||
17 | Укажите название корабля, участвовавшего в Битве А | 4 | ||
18 |
Определить названия всех кораблей из таблицы , которые удовлетворяют, по крайней мере, комбинации любых четырех критериев из следующего списка: число орудий = 8, калибр = 15, водоизмещение = 32000, тип = bb, год спуска = 1915, класс = Конго, страна = США Показать решение:
|
4 |
Создание table в Management Studio
Когда структура ясна, можно приступать к созданию:
1) откройте контейнер «Базы данных»;
2) откройте только что созданную тестовую БД;
3) щёлкните правой кнопкой мыши по категории «Таблицы» и выберите пункт «Таблица».
В результате будет открыт специальный конструктор таблиц с тремя колонками:
• имя столбца;
• тип данных (подробнее о типах данных читайте здесь);
• значения NULL (если да – ставим галочку).
Колонки заполняются с учётом спроектированной ранее структуры для table Categories.
Далее определяем первичный ключ (primary key), щелкая по требуемому столбцу правой кнопкой мыши (у нас это CategoryId). Также выбираем пункт «Задать первичный ключ».
Теперь надо обеспечить, чтобы в столбце автоматически генерировался уникальный ID-записи. Для этого идентификатору надо задать свойство IDENTITY. Делается путём включения пункта «Спецификация идентификатора».
Теперь пользователь может сохранить table (правая кнопка мыши -> «Сохранить» либо известное сочетание «Ctrl+S»). Останется ввести название таблицы и нажать «OK».
На очереди таблица Goods. Здесь осуществляются те же действия с той лишь разницей, что для столбца Category дополнительно задаётся дефолтное значение и создаётся ограничение внешнего ключа. Для этого в свойствах соответствующего столбца в значении по умолчанию пишем 1.
А для создания FOREIGN KEY щёлкните правой кнопкой мыши в любой области конструктора и выберите пункт «Отношения…».
Далее жмём кнопку «Добавить».
Теперь зададим спецификацию таблиц и столбцов:
В открывшемся окне указываем:
• таблицу первичного ключа – Categories;
• таблицу внешнего ключа – это текущая таблица, которая пока не создана, поэтому отображается в качестве Table_1. Тут следует выбирать столбец Category из текущей таблицы — именно он и станет выполнять роль внешнего ключа (сопоставление будет CategoryId = Category);
• имя связи — название ограничения. Можно написать FK_Category.
Останется определить правила обновления и удаления. Правило обновления оставляем как есть (изменять идентификатор — не лучшая идея). А чтобы при удалении категории всем товарам присваивалось дефолтное значение, определим правило удаления как «Присвоить значение по умолчанию».
Останется сохранить созданную (created) таблицу, назвав её Goods. Может появиться предупреждающее сообщение — оно не должно вас смутить.
Созданные таблицы станут видны в обозревателе объектов.
Теперь с ними можно работать и добавлять данные, используя инструкцию INSERT.
Типы данных в MySQL
В следующей таблице приведены наиболее часто используемые типы данных, поддерживаемые MySQL.
INT | Хранит числовые значения в диапазоне от -2147483648 до 2147483647. |
DECIMAL | Хранит десятичные значения. |
CHAR | Хранит строки фиксированной длины с максимальным размером 255 символов. |
VARCHAR | Хранит строки переменной длины с максимальным размером 65 535 символов. |
TEXT | Хранит строки с максимальным размером 65 535 символов. |
DATE | Сохраняет значения даты в формате ГГГГ-ММ-ДД. |
DATETIME | Сохраняет объединенные значения даты/времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС. |
TIMESTAMP | Хранит значения меток времени. Значения TIMESTAMP хранятся в виде количества секунд с начала эпохи Unix (1970-01-01 00:00:01 UTC). |
Существует несколько дополнительных ограничений (также называемых модификаторами), которые установлены для столбцов таблицы в предыдущем выражении. Ограничения определяют правила, касающиеся значений, разрешенных в столбцах.
- Ограничение NOT NULL гарантирует, что поле не может принять значение NULL.
- Ограничение PRIMARY KEY помечает соответствующее поле как первичный ключ таблицы.
- Атрибут AUTO_INCREMENT является расширением MySQL для стандартного SQL, который сообщает MySQL, что нужно автоматически присваивать значение этому полю, если оно не указано, путем увеличения предыдущего значения на 1. Доступно только для числовых полей.
- Ограничение UNIQUE гарантирует, что каждая строка для столбца должна иметь уникальное значение.
Вы узнаете больше об ограничениях MySQL в следующих статьях.
блок 3
SQL Ограничения
SQL ограничения используются для указания правил для данных в таблице.
Ограничения используются для ограничения типа данных, которые могут быть помещены в таблицу.
Это обеспечивает точность и достоверность данных в таблице.
Если существует какое-либо нарушение между ограничением и действием данных, действие прерывается.
Ограничения могут быть на уровне столбцов или таблиц.
Ограничения уровня столбца применяются к столбцу, а ограничения уровня таблицы ко всей таблице.
В SQL обычно используются следующие ограничения:
- NOT NULL — Гарантирует, что столбец не может иметь нулевое значение
- UNIQUE — Гарантирует, что все значения в столбце будут разными
-
PRIMARY KEY — Комбинация NOT NULL и UNIQUE.
Уникально идентифицирует каждую строку в таблице - FOREIGN KEY — Однозначно идентифицирует строку/запись в другой таблице
- CHECK — Гарантирует, что все значения в столбце удовлетворяют определенному условию
- DEFAULT — Задает значение по умолчанию для столбца, если значение не указано
- INDEX — Используется для быстрого создания и извлечения данных из базы данных
Пишем SQL запрос для создания таблицы базы данных
Суммируем все исходные данные и получаем такой SQL запрос:
/*Таблица пользователей clients*/ create table clients ( /*client_id будет первичный ключ (обязательно целое число) с автоинкрементом (+1), который никогда не будет равен нулю*/ client_id integer not null auto_increment primary key, client_customer varchar(13), /*имя */ client_surclient varchar(22), /*фамилия */ client_login varchar(21), /*логин*/ client_passwd varchar(7), /*пароль*/ client_email varchar(44) /*email*/ client_telefon varchar(26) /*телефон*/ );
Примечание: SQL запрос для создания таблицы создаем в текстовом редакторе типа Notepad++. В скобках ограничиваем длину поля, может быть от 1 до 255.
Итоги статьи
- В этой статье мы познакомились с первым оператором SQL языка CREATE TABLE
- Создали SQL запрос для создания одной (первой) таблицы базы данных с первичным ключом.
WebOnTo.ru
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
SQL Create Database statement
After installing and opening Microsoft SQL Server Management Studio, our screen looks something like this:
It doesn’t look fun at all. We’ll make it more fun by creating a new database. After clicking on the New Query, the new window opens and we’re able to type something in. It looks like on the picture below:
Before typing anything, we should be sure we’re typing it in the right way. T-SQL is a language and as such it has its’ words – set of rules on how to write different commands.
Luckily, one of these commands is the SQL Create Database command. You can see the full T-SQL Create Database syntax
on Microsoft pages.
I’ll simplify it a lot and go only with the most basic form. In order to create a new database on our server, we
need to use the following command:
1 | CREATEDATABASEdatabase_name; |
Where we’ll use the desired name instead of the database_name.
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Предусловия
Перед началом работы у вас должен быть установлен как сам MS SQL Server, так и SSMS. Версию сервера следует выбирать, исходя из технических характеристик своего компьютера и установленной операционной системы. В статье используется MS SQL Server 2017 Express.
Также таблицы (tables) не могут существовать без базы данных. Поэтому, прежде чем приступить к созданию таблиц, следует создать пустую БД. Это делается очень просто – достаточно запустить среду SSMS и выполнить несколько простых действий:
1) кликаем правой кнопкой мыши по контейнеру «Базы данных» и выбираем «Создать базу данных»;
2) в появившемся поле прописываем имя БД;
3) нажимаем «ОК».
Работа в сервисе sql fiddle
Онлайн проверка sql запросов возможна при помощи сервиса sqlFiddle.
Самый простой способ организации работы состоит из следующих этапов:
- В верхней части рабочей области сервиса выбираем язык: SQLite(WebSQL);
Открывшаяся рабочая область разделена визуально на 3 окна: левое — для кода создания таблиц и заполнения их данными, правое — для кода запросов, нижнее — для отображения результатов запросов. - В левое окно помещается код для создания таблиц и вставки в них данных (пример кода расположен ниже). Затем щелкается кнопка «Build Schema».
После того как схема построена (об этом сигнализирует надпись на зеленом фоне «Schema Ready»), в правое окошко вставляется код запроса и щелкается кнопка Run SQL.
Еще пример:
Теперь некоторые пункты рассмотрим подробнее.Создание таблиц:
Пример: создайте сразу три таблицы (teachers, lessons и courses); добавьте по нескольку значений в каждую таблицу.
* для тех, кто незнаком с синтаксисом — просто скопировать полностью код и вставить в левое окошко сервиса
* урок по созданию таблиц в языке SQL далее
/*teachers*/ CREATE TABLE `teachers` ( `id` INT(11) NOT NULL, `name` VARCHAR(25) NOT NULL, `code` INT(11), `zarplata` INT(11), `premia` INT(11), PRIMARY KEY (`id`) ); INSERT INTO teachers VALUES (1, 'Иванов',1,10000,500), (2, 'Петров',1,15000,1000) ,(3, 'Сидоров',1,14000,800), (4,'Боброва',1,11000,800); /*lessons*/ CREATE TABLE `lessons` ( `id` INT(11) NOT NULL, `tid` INT(11), `course` VARCHAR(25), `date` VARCHAR(25), PRIMARY KEY (`id`) ); INSERT INTO lessons VALUES (1,1, 'php','2015-05-04'), (2,1, 'xml','2016-13-12'); /*courses*/ CREATE TABLE `courses` ( `id` INT(11) NOT NULL, `tid` INT(11), `title` VARCHAR(25), `length` INT(11), PRIMARY KEY (`id`) ); INSERT INTO courses VALUES (1,1, 'php',54), (2,1, 'xml',72), (3,2, 'sql',25); |
В результате получим таблицы с данными:
Отправка запроса:
Для того чтобы протестировать работоспособность сервиса, добавьте в правое окошко код запроса.
Пример: при помощи запроса выберите все данные из таблицы teachers, касаемые учителя с фамилией Иванов
SELECT * FROM `teachers` WHERE `name` = 'Иванов'; |
На дальнейших уроках SQL будет использоваться та же схема, поэтому необходимо будет просто копировать схему и вставлять в левое окно сервиса.
Онлайн визуализации схемы базы данных
Для онлайн визуализации схемы базы данных можно воспользоваться сервисом https://dbdesigner.net/:
- Создать свой аккаунт (войти в него, если уже есть).
- Щелкнуть по кнопке Go to Application.
- Меню Schema -> Import.
- Скопировать и вставить в появившееся окно код создания и заполнения таблиц базы данных
Далее к уроку 0 Язык sql создание таблиц
Синтаксис для Oracle
В Oracle код немного сложнее.
Вам нужно будет создать поле автоинкремента с объектом SEQUENCE (этот объект генерирует числовую последовательность).
Используйте следующий синтаксис CREATE SEQUENCE:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;
Приведенный выше код создает объект последовательности под названием «seq_person», который начинается с 1 и будет увеличиваться на 1.
Он также будет кэшировать до 10 значений для повышения производительности.
Параметр «CACHE» указывает, сколько значений последовательности будет храниться в памяти для более быстрого доступа.
Чтобы вставить новую запись в таблицу «Persons»,
нам придется использовать функцию «nextval» (эта функция извлекает следующее значение из последовательности «seq_person»):
INSERT INTO Persons (Personid,FirstName,LastName)
VALUES (seq_person.nextval,’Lars’,’Monsen’);
Приведенная выше инструкция SQL вставит новую запись в таблицу «Persons».
Столбецу «Personid» будет присвоен следующий номер из последовательности «seq_person».
Столбец «FirstName» будет иметь значение «Lars», а столбец «LastName»- «Monsen».
SQL Справочник
SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
Create Table Foreign Key Syntax
Like the primary key definition, you can declare a foreign key both inline and out of line in the SQL Create Table command.
Inline foreign keys are declared like this:
You use the word REFERENCES, then the name of the table that the foreign key refers to, then within brackets you specify the column that the foreign key links to.
The other method of adding a foreign key using the CREATE TABLE command is the out of line method.
You need to start with the word CONSTRAINT, then the name of the foreign key. The name needs to be unique across the database, so I like to start with the term “fk”, then the two tables I am referring to.
Then, you specify the words FOREIGN KEY, then the name of the other table within brackets. Then you add the word REFERENCES, then within brackets, you specify the column name from the table you’re referring to (which is probably the primary key).
Синтаксис для MySQL
Следующая инструкция SQL определяет, что столбец «Personid»,
который должен быть полем первичного ключа с автоматическим приращением в поле первичного ключа в таблице «Persons»:
CREATE TABLE Persons
(
Personid int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (Personid)
);
MySQL использует ключевое слово AUTO_INCREMENT для выполнения функции автоматического приращения.
По умолчанию начальное значение для AUTO_INCREMENT равно 1, и оно будет увеличиваться на 1 для каждой новой записи.
Чтобы последовательность AUTO_INCREMENT начиналась с другого значения, используйте следующую инструкцию SQL:
ALTER TABLE Persons AUTO_INCREMENT=100;
Чтобы вставить новую запись в таблицу «Persons»,
нам не нужно будет указывать значение для столбца «Personid» (уникальное значение будет добавлено автоматически):
INSERT INTO Persons (FirstName,LastName)
VALUES (‘Lars’,’Monsen’);
Приведенная выше инструкция SQL вставит новую запись в таблицу «Persons».
Столбцу «Personid» будет присваивается уникальное значение.
Столбец «FirstName» будет иметь значение «Lars», а столбец «LastName»- «Monsen».
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Создание таблицы базы данных
Вспоминаем, что реляционная таблица базы данных должна иметь уникальные:
- Уникальное имя;
- Столбцы (атрибуты);
- Первичный ключ.
- Строки (записи);
Для начала, мы создаем, только таблицу и не заполняем её данными.
По-хорошему, общий вид таблицы с уникальными именами строк и столбцов задается при создании концептуальной модели БД. Мы для примера создадим простенькую таблицу БД и обойдемся без концептуальной модели.
В этой статье создадим таблицу БД с покупателями. Покупатели взяты для примера.
Чем идентифицируется покупатель? Решаем, что каждый покупатель идентифицируется следующими данными:
- Имя;
- Фамилия;
- Логин;
- Пароль;
- Email;
- телефон.
Помним, что в таблице обязательно нужно задать первичный ключ.
Синтаксис оператора такой:
CREATE TABLE имя таблицы (столбец 1, тип столбца (пробел) параметр столбца (пробел), столбец 2, тип столбца (пробел) параметр столбца (пробел), столбец 3, тип столбца (пробел) параметр столбца (пробел), и т.д.)
В нашем варианте, имя таблицы: clients. Даем данным покупателей обозначения столбцов:
- Имя: пусть будет client_customer;
- Фамилия: client_subclient;
- Логин: client_login;
- Пароль: client_password;
- eMail: client_mail;
- Телефон: client_telefon.
Думаем, какой тип данных будет храниться в этих столбцах, и выбираем типы данных CHAR(длина поля постоянно) или VARCHAR(длинна поля переменное). В нашем случае подходит тип данных VARCHAR.
Особое внимание уделяем первичному ключу. Делаем первичным ключом id покупателя
В параметрах ключа задаем, что это первичный ключ, он не может быть нулём и что для следующей записи увеличивается на единицу. Последнее свойство называется автоинкремент. Смотрим подсказку в справочнике (ссылка выше) и получаем столбец с первичным ключом:
client_id integer not null auto_increment primary key