SQL CREATE DATABASE Statement
SQL CREATE DATABASE - оператор создания базы данных. Он нужен для сортировки и упорядочивания некоторых сведений. Например, есть несколько животных, владелец хочет отнести каждое к одной группе, добавить описание. Данные добавляются в таблицу, чтобы иметь возможность выделять некоторые виды, сортировать нужным образом, загружать информацию из существующих таблиц в новые.
Также пользователь хочет добавить список всех имеющихся электрических приборов, для чего создает еще таблицу. Поскольку это не связанные ни каким образом группы, для каждой нужно создать свою базу данных SQL. CREATE DATABASE Animals и CREATE DATABASE Electrical. Каждую можно сделать доступной или закрытой для других пользователей. Если содержит несколько таблиц, некоторые можно сделать видимыми, другие - невидимыми.
Далее, администратор добавляет таблицу наименований корма для животных и добавляет в Animals. Все пользователи, которые имеют доступ к базе Animals, могут только считывать информацию из двух таблиц. И только администратор имеет право вносить правки, удалять или добавлять информацию. При этом юзеры с доступом к Electrical являются доверительными лицами, имеют права администратора: удаляют, добавляют, редактируют записи.
О DDL, DML, DCL
SQL - декларативный язык программирования.
Применяется для создания объектов данных, модификации строк. Представляет собой совокупность операторов, инструкций, вычисляемых функций. Операторы делятся на три типа:
- DDL - определение;
- DML - манипуляция;
- DCL - осуществление административных операций, управление правами.
Для манипуляции данными используются такие команды: SELECT, INSERT, UPDATE, DELETE. Чтобы назначить пользователю или группе некоторые разрешения, используются операторы GRANT, REVOKE, DENY.
Для работы с данными применяется три основные запроса:
- CREATE;
- ALTER;
- DROP.
Create используется для создания таблиц, индексов. Создание баз в SQL - SQL CREATE DATABASE base_name.
Alter изменяет свойства созданного объекта. Например, добавляет, удаляет или изменяет столбец, управляет ограничениями целостности. DROP удаляет ранее существовавший объект.
CREATE
CREATE - универсальный оператор, который используется во многих других СУБД. Он создает объекты базы данных. Это могут быть:
- таблица;
- представление;
- база данных.
Создание таблицы:
CREATE TABLE table_name
В данном случае table_name должно быть уникальным, чтобы не возникало ошибок. Поля назначаются внутри круглых скобок () после имени таблицы.
CREATE TABLE table_name ( arg )
Например,
Таблица под названием Planets наделена такими полями, как ID и OpeningYear, которые принимают только числовые значения. PlanetName - строка на 10 символов. Radius и SunSeason могут быть числами с плавающей точкой. HavingRings является логической переменной и принимает значения true или false.
CREATE VIEW создает представляение. Это такая виртуальная таблица, которая содержит информацию, взятую из других таблиц. При их изменении в родительных таблицах, в представлении они тоже меняются. Манипулирование данными не отличается от того, как это происходит с табличными данными.
Создание базы данных в SQL - CREATE DATABASE base_name.
CREATE DATABASE
Оператор определения данных языка в SQL Server- CREATE DATABASE. Используется для создания базы данных. Он является универсальным и предназначен для многих СУБД. А не только SQL. В POSTGRESQL CREATE DATABASE также создает новую базу данных. Полный синтаксис выглядит так:
С помощью оператора CREATE DATABASE создается база данных с именем db_name. Имя должно быть уникальным, поэтому другой базы данных с таким же названием не должно существовать, в противном случае возникает ошибка выполнения команды.
Можно назначить пароль с помощью команды SQL CREATE DATABASE User Password. Но есть еще вариант.
При помощи SQL CREATE DATABASE Character set utf8 назначается кодировка.
Database_name
При создании базы данных в MS SQL CREATE DATABASE указывается имя. Оно должно соответствовать правилам идентификаторов. Вот основные из них.
- Начинается с символа от A до Z или a до z.
- В имени может использоваться знак подчеркивания, символ @, знак доллара $, решетка #.
- Не должен повторять зарезервированные слова.
- Запрещено использовать символы пробела и специальные символы.
Название может содержать один символ SQL CREATE DATABASE t.
Имя содержит не более 120 символов. Если не указано, формируется путем добавления суффикса к database_name. Таким образом, длина ограничивается 123 символами, чтобы формируемое название не превысило установленные 128 знаков.
CONTAINMENT
Применяется в SQL Server с версии 2012. Отвечает за автономность базы данных. Имеет два значения:
- NONE;
- PARTIAL.
Независимая база данных решает проблему потери такой информации, как логин, пароль при передвижении базы между серверами. В свою очередь автономная база хранит необходимую для работы информацию. Полностью независима от настроек SQL сервера, не завязана на внешних зависимостях. По умолчанию имеет значение NONE. Это означает, что база не является автономной.
Перед тем как назначить CONTAINMENT = PARTIAL, необходимо разрешить использование независимых баз на уровне сервера.
ON и COLLATE
On указывает, что дисковые файлы для хранения разделов определяются явно. Применяется исключительно в связке со списком элементов <filespec>.
PRIMARY <filespec> определяет первичный файл. Если не указан, то в качестве первичного используется первый файл списка в инструкции CREATE DATABASE.
LOG ON <filegroup> указывает, что файлы журналов <filegroup> определяются явно.
COLLATE collation_name отвечает за сортировку базы данных. Если не указано, то параметры сортировки задаются по умолчанию для экземпляра SQL Server. Не может указываться с предложениями FOR ATTACH и FOR ATTACH_REBUILD_LOG. Сортировка независимых баз данных отличается.
WITH options:
- <filestream_options> отвечает за нетранзакционный доступ, имеет три значения: OFF (доступ отключен), READ_ONLY (только чтение), FULL (полный доступ). Имя каталога задается с помощью DIRECTORY_NAME = <directory_name>. Оно должно быть уникальным, проверяется при учете регистра.
- DEFAULT_FULLTEXT_LANGUAGE задается, если база является частично автономной. Это расширенный параметр, поэтому рекомендуется применять только опытным администраторам. С его помощью определяется язык для полнотекстовых индексов. По умолчанию является язык сервера.
- DEFAULT_LANGUAGE определяет язык для созданных имен входа. Присваивается идентификатор в диапазоне 0-32.
- TRANSFORM_NOISE_WORDS служит для подавления сообщений-ошибок, которые возникают из-за того, что пропускаемые слова способствует возврату 0 строк. По умолчанию имеет значение 0, поэтому стоп-слова не преобразуется, что возвращает 0 строк. Задав значение 1, слова преобразуются и пропускаются, поэтому ошибки не возникают.
- В TWO_DIGIT_YEAR_CUTOFF указывается год в диапазоне от 1753 до 9999. По умолчанию временной промежуток для SQL 1950-2049, поэтому вписав значение 30, вернется 2030, но 50 интерпретируется как 1950.
- DB_CHAINING организовывает межбазовый доступ, что обеспечивает возможность обращаться к объектам из другой базы данных.
- С помощью TRUSTWORTHY устанавливается доверенность экземпляра базы данных к содержимому. По умолчанию установлено off, что защищает от уязвимостей при присоединении некоторые баз данных.
<filespec>
Предназначается для управления свойствами файла. Logical_file_name является логическим именем, применяется при обращении к файлу. Должно быть уникальным, соответствовать правилам для идентификаторов.
FILENAME = { 'os_file_name' | 'filestream_path' }
В данном случае переменной filename присваивается имя операционной системы или путь к файлу. Size отвечает за начальный размер, а maxsize - максимальный.
Операторы для базы данных
В новосозданную базу необходимо добавить некоторую информацию. Пример SQL CREATE DATABASE:
Здесь задействованы самые важные выражения языка SQL. На первой строке администратор создает базу данных под названием mydb. Она назначается основной с помощью команды USE mydb.
USE db1;
SELECT COUNT(*) FROM mytable; # selects from db1.mytable
USE db2;
SELECT COUNT(*) FROM mytable;
В этом выражении сначала db1 становится основной, но потом db2.
После этого создается таблица mytable с числовым полем PRIMARY KEY и строкой на 20 символов name. Чтобы создать таблицу, которая будет содержать значение другой таблицы применяется связка операторов AS/SELECT/FROM.
CREATE TABLE new_table_name AS
SELECT column1, column2,...
FROM existing_table_name
WHERE ....;
Здесь видно, что создается таблица под именем new_table_name, перед тем как вставить данные из других таблиц, должны быть выделены столбцы командой SELECT. Здесь выбирается column1 и column2. Определяется родительская таблица, из которой происходит импорт информации.
FROM existing_table_name
После создания и добавления некоторых данных, можно проверить все существующие базы командой SHOW DATABASES.
Чтобы вставить в таблицу новые значения, используется команда INSERT INTO, после слова INTO располагается имя обрабатываемой таблицы. После оператора могут находиться значения приоритетов: LOW_PRIORITY, DELAYED, HIGH_PRIORITY или IGNORE.
Чтобы определить добавляемые переменные, пишется команда VALUES, а в круглых скобках связка значений ( 1, Will ), ( 2, Marry ) и ( 3, Dean ). Если предполагается добавление одного значения вместо ключевого слова VALUES применяется VALUE. Разрешается использовать оператор SET, его иногда проще использовать, ведь не нужно запоминать порядок столбцов. Значения назначаются в форме col = expr.
Затем с помощью команды SELECT выбираются данные для последующей манипуляции их значениями. Избираются такие поля, как id, name из таблицы mytable, id присваивается значение 1. Чтобы изменить или обновить существующие данные, используется UPDATE, переменной name задается значение Willy.
Далее, выбираются данные из таблицы и удаляются. Чтобы полностью уничтожить существующую таблицу, используйте DROP DATABASE имя_таблицы. Но удаляются только те, для которых открыт доступ.
Создание базы данных с файлами и журналом
В данном примере создается база Sales, где первый файл saledat.mdf становится первичным, поскольку не используется ключевое слово PRIMARY. Значения SIZE и MAXSIZE указаны без суффиксов MB или KB, по умолчанию выделяется память в мегабайтах. SIZE - 10 MB, MAXSIZE - 15 MB.
Если нужно указать несколько файлов данных, каждый из них берется в круглые скобки, перечисляется через запятую. Например, так:
Таким образом, созданы три файла с максимальным размером 200 Мб.
Группировка файлов
Если есть несколько файлов и их нужно группировать, это реализуется с помощью оператора FILEGROUP group_name.
В данном случае есть три группы SalesGroup1, SalesGroup2. Они содержат по два файла, каждый из них имеет максимальный размер 50 Мб. Отдельно создан файл журнала Sales_log. Два - SPri1_dat и SPri2_dat не относятся ни к одной из групп, они имеют размер 10 Мб, но под их содержимое выделено 50 Мб.
Создание базы данных, файловых групп
В текущем примере создается база данных FileStreamDB. В ней определяется файловая группа строк, две файловые FILESTREAM. Каждая из них содержит только один файл.
USE master;
GO
-- Get the SQL Server data path.
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
FROM master.sys.master_files
WHERE database_id = 1 AND file_id = 1);
-- Execute the CREATE DATABASE statement.
EXECUTE ('CREATE DATABASE FileStreamDB
ON PRIMARY
(
NAME = FileStreamDB_data
,FILENAME = ''' + @data_path + 'FileStreamDB_data.mdf''
,SIZE = 10MB
,MAXSIZE = 50MB
,FILEGROWTH = 15%
),
FILEGROUP FileStreamPhotos CONTAINS FILESTREAM DEFAULT
(
NAME = FSPhotos
,FILENAME = ''C:\MyFSfolder\Photos''
-- SIZE and FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
, MAXSIZE = 5000 MB
),
(
NAME = FSPhotos2
, FILENAME = ''D:\MyFSfolder\Photos''
, MAXSIZE = 10000 MB
),
FILEGROUP FileStreamResumes CONTAINS FILESTREAM
(
NAME = FileStreamResumes
,FILENAME = ''C:\MyFSfolder\Resumes''
)
LOG ON
(
NAME = FileStream_log
,FILENAME = ''' + @data_path + 'FileStreamDB_log.ldf''
,SIZE = 5MB
,MAXSIZE = 25MB
,FILEGROWTH = 5MB
)'
);
GO
Декларируется переменная @data_path - строка, с выделенным местом на 256 символов.
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
Функция SUBSTRING возвращает часть строки в первом аргументе, остальные две задают длину значения. Второй аргумент обозначает первый символ, третий - последний. В качестве последнего параметра используется выражение CHARINDEX, которое возвращает стартовую позицию первого аргумента. С его помощью происходит поиск строкового выражения physical_name, преобразованного в нижний регистр в файле master.mdf.
Оператор EXECUTE запускает выполнение функции в круглых скобках. Здесь создается переменная FileStreamDB_data, группы FileStreamPhotos и FileStreamResumes.
Файловая группа FileStreamPhotos содержит FILESTREAM data: два файла FSPhotos и FSPhotos2. Вторая группа FileStreamResumes содержит FILESTREAM FileStreamResumes. Также создан журнал FileStream_log максимальным размером 25 Мб.