Средства определения, изменения определения и отмены определения доменов
Как неоднократно упоминалось выше, при определении столбцов таблицы требуется явно указывать каждого столбца. Для этого можно использовать описанные выше средства . Но в поддерживается и другой механизм— механизм доменов. является долговременно хранимым, именованным объектом схемы базы данных. Домены можно создавать (определять), изменять (изменять определения) и ликвидировать (отменять ). Имена доменов можно использовать при определении столбцов таблиц. Можно считать, что в представляет собой вынесенное за пределы определения индивидуальной таблицы «родовое» , которое можно использовать для определения различных реальных столбцов реальных . В языке обеспечиваются средства , и существующих .
Определение домена
Для в используется оператор . Общий синтаксис этого оператора следующий: 22Начиная с этого места мы будем приводить более или менее точный синтаксис конструкций языка (не злоупотребляя излишествами). Без этого текст был бы менее точным и более объемным. Прописными буквами показываются «терминалы» – ключевые слова языка .
Здесь задает имя создаваемого домена 23Здесь мы в первый раз сталкиваемся с именем объекта базы данных. Не будем углублять ся в детали, но в общем случае имена объектов -ориентированных баз данных имеют вид . Этот подход к именованию объектов базы данных позволяет независимо создавать объекты в разных схемах, не заботясь о том, чтобы эти объекты имели разные простые имена. При использовании в операторе простого имени объекта система должна автоматически уточнить это имя, исходя из идентификатора пользователя, от имени которого выполняется оператор., есть спецификация определяющего типа данных. В необязательных разделах и специфицируются значение домена по умолчанию 24Это значение будет использоваться в качестве значения по умолчанию для любого столбца, определенного на данном домене, для которого не определено собственное значение по умолчанию (см. следующую лекцию). и набор , которые будут применяться к любому столбцу, определенному на этом домене.
Раздел имеет вид
Здесь представляет любое допустимое литеральное значение определяющего типа домена, обозначает , а может задаваться в одной из следующих форм:
Если в операторе значение по умолчанию не специфицируется, считается, что такого значения нет. Однако позже к можно добавить раздел значения по умолчанию с помощью оператора . Кроме того, этот оператор позволяет удалить раздел значения по умолчанию из существующего .
Элемент списка имеет вид
Необязательный раздел позволяет определить имя нового ограничения целостности. Если явное указание имени отсутствует, ограничению назначается имя, автоматически генерируемое системой. Что касается вида условного выражения, служащего собственно , то в стандарте запрещается лишь прямое или косвенное использование в нем домена, в которого входит данное . 27Более подробно мы обсудим допустимые в виды в следующих лекциях. Однако наиболее естественным (и наиболее распространенным) видом является следующий:
CHECK (VALUE IN (list_of_valid_values))
Такое ограничение запрещает появление в любом столбце, определенном на данном домене, любого значения определяющего типа, не входящего в список допустимых значений.
Примеры определений доменов
В дальнейших примерах нам понадобятся нескольких доменов. Приведем их в этом подразделе. В примерах мы будем иметь дело с таблицами служащих ( ), отделов ( ) и проектов ( ). Каждый служащий обладает уникальным номером ( ) и получает ( ). Определим домены и .
CREATE DOMAIN EMP_NO AS INTEGER
CHECK (VALUE BETWEEN 1 AND 10000);
Номера служащих являются целыми числами, поэтому домена есть тип . Кроме того, на значения этого домена устанавливается следующее ограничение: они должны быть больше нуля и не превосходить целое значение 10000.
Домен определим следующим образом:
CREATE DOMAIN SALARY AS NUMERIC (10, 2)
DEFAULT 10000.00
CHECK (VALUE BETWEEN 10000.00 AND 20000000.00)
CONSTRAINT SAL_NOT_NULL CHECK (VALUE IS NOT NULL);
Размер является значением точного числового типа из десяти десятичных цифр, две из которых составляют дробную часть. По умолчанию размер составляет 10000 руб. Установлен диапазон допустимого размера зарплаты от 10000 руб. до 20000000 руб. зарплаты не допускается (на уровне ).
Изменение определения домена
Для характеристик ранее определенного домена используется оператор . Синтаксис этого оператора выглядит следующим образом:
Как видно из синтаксических правил, при изменении определения домена можно выполнить действие по изменению раздела значения по умолчанию либо изменить . Для первого варианта действует следующий синтаксис:
В случае установки нового значения по умолчанию ( ) это значение автоматически применяется ко всем столбцам, определенным на данном домене. Более точно, это значение становится новым значением по умолчанию. Операция не оказывает влияния на состояние существующих строк таблиц базы данных. В случае отмены раздела значения по умолчанию в ( ) существовашее значение домена по умолчанию становится значением по умолчанию каждого столбца, который определен на данном домене и для которого не специфицировано собственное значение по умолчанию.
Действие по изменению определяется следующим синтаксисом:
Действие по добавлению нового определения ( ) приводит к тому, что новое условие добавляется через к существующему . Если к моменту выполнения соответствующего оператора существуют столбцы некоторых таблиц, текущие значения которых противоречат новому ограничению, то СУБД должна отвергнуть этот оператор . Действие по отмене ( ) приводит к исчезновению соответствующей части общего ограничения соответствующего домена, что, естественно, не влияет на существующие значения столбцов имеющихся таблиц.
Примеры изменения определения домена
Немного поупражняемся с доменом . Для изменения значения по умолчанию с 10000 на 11000 руб. нужно выполнить оператор
ALTER DOMAIN SALARY SET DEFAULT 11000.00;
Для отмены значения по умолчанию в домене следует воспользоваться оператором
ALTER DOMAIN SALARY DROP DEFAULT;
Если к требуется добавить ограничение (например, запретить значение зарплаты, равное 15000 руб.), необходимо выполнить оператор
Наконец, если требуется отменить (именованное!) , препятствующее наличию неопределенных значений в столбцах, которые определены на домене , то нужно выполнить оператор
ALTER DOMAIN SALARY DROP CONSTRAINT SAL_NOT_NULL;
Отмена определения домена
Чтобы отменить ранее созданное , нужно воспользоваться оператором в следующем синтаксисе:
Если в операторе указано , и если соответствующий домен использован в определении некоторого столбца, в определении некоторого представления или в определении ограничения целостности (см. следующие лекции), то оператор отвергается. В противном случае ликвидируется.
Если в операторе указано , то оператор выполняется всегда. При этом уничтожаются все представления и ограничения целостности, в определении которых использовалось имя данного домена. Столбцы, определенные на этом домене, автоматически переопределяются следующим образом:
Создание и модификация таблиц
ЛАБОРАТОРНАЯ РАБОТА № 12
Администрирование БД Mysql. Создание доменов и таблиц
Обсуждено и одобрено
на заседании цикловой комиссии
2– 40 01 01 «Программное обеспечение
Протокол № __ от ____________
1.1 Формирование умений администрировать БД, создавать домены и таблицы, накладывать ограничения на столбцы и таблицы.
2.1 Методические рекомендации по выполнению лабораторной работы
2.2 Материальное обеспечение:
– персональный компьютер IBM PC.
Последовательность выполнения работы
3.1 Изучить теоретическое обоснование лабораторной работы
3.2 Создать домены и таблицы в СУБД MySQL, наложить ограничения на столбцы и таблицы
3.3 Составить отчет
3.4 Составить ответы на контрольные вопросы
3.5 Предоставить отчет преподавателю для проверки
Перед тем как создавать таблицы, которые ссылаются на домены необходимо задать описание доменов при помощи команды create domain. В результате ее выполнения создается домен, на который можно ссылаться в командах создания и модификации таблиц. Столбцы, базирующиеся на доменах, наследуют все его характеристики, причем часть из них может быть переопределена в локальных описаниях столбцов.
Синтаксис описания домена:
Name_domain – имя создаваемого домена;
Data_type – тип данных;
Значение по умолчанию присваивается соответствующему атрибуту при создании новой строки таблицы, если его значение не указано явно.
Для полей типа «дата» можно указывать now (тогда будет вводиться текущая дата).
Not null – запрещает ввод пустых значений;
Домены создаются независимо друг от друга, следовательно, check в домене не может ссылаться ни на какой другой домен или столбец таблицы.
Домен может иметь только одну конструкцию check.
Конструкция check не может быть переопределена при описании атрибута таблицы. Если при описании поля таблицы, ссылающегося на домен, имеющий check, указано свое ограничение, то действовать будут оба ограничения.
Create domain month as smallint
Check (value between 1 and 12);
Create domain d_elem as char
Check (value in (‘Au’, ‘Ag’, ‘Pr’, ‘Pd’, ‘Os’));
Create domain pveight as numeric (12,2)
Удаление домена осуществляется командой drop domain, если домен используется в какой-либо таблице, то удалить его нельзя.
Drop domain name_doman;
Управление сервером обычно осуществляется из командной строки. Для входа на сервер используется команда mysql-u root, которая не имеет пароля. Изначально существует единственный пользователь, которому предоставляется право входа.
Таблица 1 – Опции команды mysql
Если на экране выведено окно, представленное на рисунке 1, то вход в базу данных mysql, которая используется для администрирования сервера, осуществлен.
Рисунок 1 – Вход в БД MySql
Наличие в статусной строке иконки светофора с активным зеленым цветом также указывает на то, что сервер запущен (см. рисунок 2).
В ней содержатся 5 таблиц, называемых таблицами привилегий. Для ввода пароля необходимо ввести команды, представленные на рисунке 3.
Рисунок 3 –Установка нового пароля
Если получено приглашение mysql monitor, значит все правильно работает. Можно начинать настраивать таблицы привилегий, вводить новых пользователей, создавать базы данных и таблицы.
Таблицы привилегий используются для предоставления доступа к базам данных и таблицам в них пользователям.
Для просмотра таблиц, необходимо ввести команду, представленную на рисунке 4.
Рисунок 4 – Таблицы привилегий
Кратко рассмотрим функции каждой из таблиц.
Изначально эта таблица содержит пользователя root с паролем, который установлен и именем хоста ‘%’. По умолчанию root может входить с любого хоста, имеет все привилегии и доступ ко всем базам данных. Также в таблице содержится запись для пользователя ‘%’, которую нужно сразу же удалить, так как она предоставляет доступ любому пользователю.
Для добавления нового пользователя нужно выполнить действия, представленные на рисунке 5.
Рисунок 5 – Создание нового пользователя
Db -определяет к каким базам данных, каким пользователям и с каких хостов разрешен доступ. В этой таблице можно предоставлять каждому пользователю доступ к базам данных и назначать привилегии. Для просмотра нужно выполнить команду show columns from db;.
По умолчанию, все привилегии установлены в ‘N’.
Host используется для расширения диапазона доступа в таблице db. К примеру, если доступ к какой-либо базе данных должен быть предоставлен более чем одному хосту, тогда следует оставить пустой колонку host в таблице db, и внести в таблицу host необходимые имена хостов. для просмотра нужно выполнить команду show columns from host;.
Здесь также можно задавать привилегии для доступа к базе данных. Они обычно редко используются без необходимости. Все привилегии доступа нужно задавать в таблице db для каждого пользователя, а в таблице host только перечислить имена хостов. Сервер читает все таблицы, проверяет имя пользователя, пароль, имя хоста, имя базы данных, привилегии. Если в таблице db привилегии select, insert установлены в ‘Y’, а в таблице host в ‘N’, то в итоге пользователь все равно получит ‘Y’.
Эти 3 таблицы являются основными. В новых версиях MySQL, начиная с 3.22 добавлены еще 2 таблицы- tables_priv и columns_priv, которые позволяют задать права доступа к определенной таблице в базе данных и даже к определенной колонке. Они работают подобно таблице db, только ссылаются на таблицы и колонки. Также, начиная с версии 3.22 можно использовать команду GRANT для предоставления доступа к базам данных, таблицам и колонкам таблиц, что избавляет от необходимости вручную модифицировать таблицы db,tables_priv и columns_priv.
Привилегии предоставляемые MySQL представлены в таблице 2.
Таблица 2 — Привилегии, предоставляемые MySQL
Dummy — пользователь, который может входить на сервер без пароля,но только с локального хоста. Все глобальные привилегии устанавливаются в ‘N’ кроме «USAGE»,что позволяет dummy создавать пользователей без привилегий. Права доступа к базам данных должны быть заданы root’ом.
Создание баз данных
Рисунок 6 –Создание базы данных
По умолчанию, root имеет доступ ко всем базам данных и таблицам. Перейти в созданную базу данных можно, используя команду mysql (см. рисунок 7).
Рисунок 7 – Переход в БД
Теперь можно создавать таблицы и вводить информацию.
Создание и модификация таблиц
Для создания таблицы customers в БД data1 необходимо ввести команды, представленные на рисунке 8.
Рисунок 8 – Создание таблицы
Вводить данные в нее можно несколькими способами:
– вручную, используя команду insert into;
– загрузить данные из текстового файла, что является более предпочтительным, особенно если нужно ввести несколько тысяч записей.
– использовать утилиту mysqlimport также для загрузки данных из текстового файла.
Пример ввода данных вручную представлен на рисунке 9.
Рисунок 9 – Ввод данных в таблицу
Аuto_increment в столбце emp_id, означает, что числовое значение этого столбца будет автоматически увеличиваться на единицу с каждой новой записью. Значение в такой столбец вводится один раз для задания точки отсчета, а дальше сервер будет сам подставлять нужные значения.
Синтаксис команды LOAD DATA INFILE.
INTO TABLE tbl_name
Предположим, существует некоторый текстовый файл 123.txt,содержащий 2000 записей, которые нужно внести в таблицу. Нужно создать таблицу, имеющую такую же структуру и такое же число полей, как и файл (а также подходящие типы данных). Предположим, что поля в файле разделены запятыми. Кроме того, файл должен находиться в нужной базе данных. Вводим следующую команду:
LOAD DATA INFILE ‘123.txt’ into table customers fields terminated by ‘,’;
Данные из файла помещаются в таблицу.
5.1 Запустить сервер MySQL. Зарегистрировать своего пользователя в консольном приложении, задать ему права.
5.2 С помощью утилиты Mysqlshow выполнить команду на просмотр структуры и состав таблиц базы Mysql.
5.3 Создать необходимые домены для БД «Заказы», приведенной на рисунке 10.
5.4 Создать базу данных «Заказы», приведенную на рисунке 10 и заполнить ее данными, предварительно, скопировав их в Ms Excel.
Таблица поставщиков (S)
Таблица деталей (P)
Таблица изделий (J)
Таблица поставок (SPJ)
Рисунок 10 – База данных «Заказы»
6.1 Создание нового документа
6.2 Сохранение созданного документа под соответствующим именем в своей рабочей папке
6.3 Демонстрация выполненной работы преподавателю
7.1 Каким способом возможен запуск серверной части СУБД.
7.2 Что такое привилегия. Каково её предназначение.
7.3 Какие основные утилиты входят в состав СУБД, какие функции они выполняют?
1 Дюбуа, Поль. MySQL/ Поль Дюбуа. 3-е изд. М.:Санкт-Петербург, 2007, с. 38-185
Поиск по сайту:
Главная
О нас
Популярное
ТОП
Новые страницы
Случайная страница
Изречения для студентов
Пожаловаться на материал
Обратная связь
FAQ
Домены
Для создания нового домена в базе данных используется оператор
. Синтаксис оператора:
Имя домена должно быть уникальным среди имен доменов базы данных. Имя не
может превышать 31 символа. Создавать домен может администратор и
пользователь с привилегией .
Предложение задает значение по умолчанию — что должно быть
помещено в столбец таблицы, основанный на этом домене, если пользователь
в операторе , добавляющем данные в таблицу, не укажет значение
для этого столбца. Значение по умолчанию не используется при выполнении
оператора изменения данных в таблице . Если в этом операторе
пользователь не укажет значение для конкретного столбца, то это значение
просто не изменяется.
Значением по умолчанию может быть литерал или пустое значение .
Литералом может быть любая самоопределенная константа соответствующего
типа, предварительно определенный литерал или контекстная переменная.
Если значение по умолчанию не устанавливается, то подразумевается пустое
значение NULL. В значении по умолчанию нельзя задавать выражения.
Предложение указывает, что столбцу, основанному на этом
домене, не может присваиваться пустое значение ни в операторе
, ни в операторе . Это предложение является
обязательным, если домен будет использован для создания столбца,
входящего в состав первичного ключа таблицы.
Ограничения домена
Предложение , являясь ограничением домена, задает некоторое
условие, которому должно удовлетворять значение, помещаемое поле,
основанные на этом домене. Предложение неприменимо к доменам типа
.
Условие в предложении также иногда называется предикатом.
Это логическое выражение, которое может возвращать значения
(истина), (ложь) и (неопределенное, неизвестное
значение). Условие считается выполненным, если этот предикат возвращает
значение .
Условие домена может быть достаточно сложным. Полный его синтаксис
подробно описан в документации к СУБД. Рассмотрим примеры:
Значениям такого домена можно присваивать только числа, которые не
меньше 18.
Данное ограничение требует чтобы первые две буквы строкого значения
домена были равны.
Такое ограничение разрешает использовать или только символьные
представления цифр или значение .
Так можно имитировать булевское значение.
В данном ограничении демонстрируется использование подзапроса.
Присваимое значение обязано присутствовать среди значений поля
таблицы . Обратите внимание, это не
полноценная поддержка ссылочной целостности, потому что требуется еще
обработка случаев удаления или изменения записей таблицы .
Такое ограничение требует наличия слова “МИР” в присваиваемом значении,
причем регистр не имеет значения.
Данное ограничение будет проверят что каждое новое значение домена
больше каждого значения поля таблицы .
Данное ограничение проверит что присваиваемое значение домена совпадает
хотя бы с одним значением поля таблицы .
В данном примере обратите внимание на использование ключевого слова
внутри запроса в условии . Ограничение требует
наличия записей в таблице где значение поля
равен присваиваемому значению.
Это условие практически аналогично предыдущему, но требует чтобы такая
строка была ровно одна.
Как видно из примеров, одну и ту же задачу можно решить с помощью разных
синтаксических конструкций и выражений.
Изменение домена
Для изменения характеристик существующего в базе данных домена
используется оператор . Синтаксис оператора:
Имя домена можно изменять, даже если на этом домене основаны столбцы уже
существующих в базе данных таблиц или внутренние переменные хранимых
процедур и триггеров. При этом для каждого столбца и каждой переменной,
основанной на домене, у которого меняется имя, просто изменяется ссылка
на имя базового домена.
Предложение позволяет установить новое значение по
умолчанию.
Предложение удаляет существующее значение по умолчанию.
Значением по умолчанию в этом случае неявно становится пустое значение.
Предложение удаляет существующее ограничение
домена. Если домен не содержит ограничения с таким именем, то
выполнение подобного оператора не вызовет сообщения об ошибке.
Можно также поменять тип данных домена при помощи предложения .
Если в базе данных существуют таблицы, содержащие столбцы, основанные на
данном домене, у которого меняется тип данных, и такие таблицы уже
содержат некоторые данные, то попытка изменения типа данных у домена
может привести к непредсказуемым последствиям.
Предложение устанавливает ограничение для
домена. В этом случае для переменных и столбцах базирующихся на домене
значение не допускается. Предложение D
удаляет ограничение для домена.
Изменить существующий домен может владелец домена (его создатель),
пользователь с привилегиями администратора или пользователь с
привилегией ALTER ANY DOMAIN.
Здесь происходит удаление значения по умолчанию, а затем создается
новое. Чтобы заменить существующее условие домена вначале нужно
выполнить удаление старого условия, после этого добавляется новое
условие. В данном случае требуется равенство первого и второго символа в
строковом данном.
Удаление домена
Для удаления домена используется оператор . Синтаксис
оператора удаления домена:
Нельзя удалить домен, на который ссылаются столбцы существующих таблиц
базы данных или внутренние переменные хранимых процедур и триггеров.
Предварительно нужно удалить все столбцы и переменные, ссылающиеся на
этот домен. Удаление доменов для заполненной данными базы данных не
является хорошей практикой.
Удалить существующий домен может владелец домена (его создатель),
пользователь с административными привилегиями или пользователь с
привилегией .
Например, чтобы удалить домен , нужно выполнить оператор:
Поскольку в базе данных, которая была здесь описана, существуют столбцы,
ссылающиеся на этот домен, такой оператор не может быть выполнен без
сообщений об ошибке. Предварительно нужно удалить во всех таблицах
ссылки на этот домен.

