КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лекция 79. Язык SQL. Средства манипулирования данными
Создание и удаление таблиц Операторы базы данных Лекция 78. Язык SQL. Средства описания данных Все примеры построены применительно к базе данных publications, содержащей сведения о публикациях (как печатных, так и электронных).
78.1. DDL: Операторы создания схемы базы данных. При описании команд предполагается, что:
78.1.2.1. Создание таблицы: CREATE TABLE <имя_таблицы> (<имя_столбца> <тип_столбца> [NOT NULL] [UNIQUE | PRIMARY KEY] [REFERENCES <имя_мастер_таблицы> [<имя_столбца>]],...)Пользователь обязан указать имя таблицы и список столбцов. Для каждого столбца обязательно указываются его имя и тип (см. таблицу в предыдущем разделе), а также опционально могут быть указаны параметры
Контроль за выполнением указанных условий осуществляет СУБД. Пример: создание базы данных publications: CREATE DATABASE publications; CREATE TABLE authors (au_id INT PRIMARY KEY, author VARCHAR(25) NOT NULL); CREATE TABLE publishers (pub_id INT PRIMARY KEY, publisher VARCHAR(255) NOT NULL,url VARCHAR(255)); CREATE TABLE titles (title_id INT PRIMARY KEY, title VARCHAR(255) NOT NULL, yearpub INT, pub_id INT REFERENCES publishers(pub_id)); CREATE TABLE titleautors (au_id INT REFERENCES authors(au_id), title_id INT REFERENCES titles(title_id)); CREATE TABLE wwwsites (site_id INT PRIMARY KEY, site VARCHAR(255) NOT NULL, url VARCHAR(255)); CREATE TABLE wwwsiteauthors (au_id INT REFERENCES authors(au_id), site_id INT REFERENCES wwwsites(site_id));78.1.2.2. Удаление таблицы: DROP TABLE <имя_таблицы> 78.1.2.3. Модификация таблицы:
78.2. DDL: Операторы создания индексов 78.2.1. Создание индекса: CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы> (<имя_столбца>,...) Эта команда создает индекс с заданным именем для таблицы <имя_таблицы> по столбцам, входящим в список, указанный в скобках. Индекс часто представляет из себя структуру типа B-дерева, но могут использоваться и другие структуры. Создание индексов значительно ускоряет работу с таблицами. В случае указания необязательного параметра UNIQUE СУБД будет проверять каждое значение индекса на уникальность. Очень часто встает вопрос, какие поля необходимо индексировать. Обязательно надо строить индексы для первичных ключей, поскольку по их значениям осуществляется доступ к данным при операциях соединения двух и более таблиц. Также в ответе на этот вопрос поможет анализ наиболее частых запросов к базе данных. Например, для БД publications можно ожидать, что одним из наиболее частых запросов будет выборка всех публикаций данного автора. Для минимизации времени этого запроса необходимо посроить индекс для таблицы authors по именам авторов: CREATE INDEX au_names ON authors (author); 78.2.2. Создание индексов для первичных ключей: CREATE INDEX au_index ON authors (au_id); Первоначальное определение структуры индексов производится разработчиком на стадии создания прикладной системы. В дальнейшем она уточняется администратором системы по результатам анализа ее работы, учета наиболее часто выполняющихся запросов и т.д. 78.2.3. Удаление индекса: DROP INDEX <имя_индекса>
78.3. DDL: Операторы управления правами доступа По соображениям безопасности не каждому пользователю прикладной системы может быть разрешено получать информацию из какой-либо таблицы, а тем более изменять в ней данные. Для определения прав пользователей относительно объектов базы данных (таблицы, представления, индексы) в SQL определена пара команд GRANT и REVOKE. Синтаксис операции передачи прав на таблицу: Права пользователя на уровне таблицы определяются следующими ключевыми словами (как мы увидим чуть позже эти ключевые слова совпадают с командами выборки и изменения данных):
В поле <тип_права_на_таблицу> может быть указано либо ключевое слово ALL или любая комбинация других ключевых слов. Например, предоставим все права на таблицу publishers пользователю andy: GRANT ALL ON publishers TO andy;Пользователю peter предоставим права на извлечение и дбавление записей на эту же таблицу: GRANT SELECT INSERT ON publishers TO peter;В том случае, когда одинаковые права надо предоставить сразу всем пользователям, вместо выполнения команды GRANT для каждого из них, можно вместо имени пользователя указать ключевое слово PUBLIC: Отмена прав осуществляется командой REVOKE: REVOKE <тип_права_на_таблицу> ON <имя_таблицы> [<список_столбцов>] FROM <имя_пользователя>Все ключевые слова данной команды эквивалентны оператору GRANT. Большинство систем поддерживают также команду GRANT для назначения привилегий на базу данных в целом. В этом случае формат команды: GRANT <тип_права_на_базу_данных> ON <имя_базы данных> TO <имя_пользователя>К сожалению, способы задания прав на базу данных различны для разных СУБД, и точную их формулировку нужно уточнять в документации. В качестве примера приведем список прав на базу данных, поддерживаемых СУБД Informix:
Отмена прав на базу данных осуществляется командой: REVOKE <тип_права_на_базу_данных> FROM <имя_пользователя>79.1. DML: Команды модификации данных К этой группе относятся операторы добавления, изменения и удаления записей. 79.1.1. Добавить новую запись в таблицу: INSERT INTO <имя_таблицы> [ (<имя_столбца>,<имя_столбца>,...) ] VALUES (<значение>,<значение>,..)Список столбцов в данной команде не является обязательным параметром. В этом случае должны быть указаны значения для всех полей таблицы в том порядке, как эти столбцы были перечислены в команде CREATE TABLE, например: Пример с указанием списка столбцов: INSERT INTO publishers (publisher,pub_id) VALUES ("Super Computer Publishing",17);79.1.2. Модификация записей: UPDATE <имя_таблицы> SET <имя_столбца>=<значение>,... [WHERE <условие>]Если задано ключевое слово WHERE и условие, то команда UPDATE применяется только к тем записям, для которых оно выполняется. Если условие не задано, UPDATE применяется ко всем записям. Пример: UPDATE publishers SET url="http://www.superpub.com" WHERE pub_id=17;В качестве условия используются логические выражения над константами и полями. В условиях допускаются: · операции сравнения: >, <, >=, <=, =, <>,!= . В SQL эти операции могут применяться не только к числовым значениям, но и к строкам ( "<" означает раньше, а ">" позже в алфавитном порядке) и датам ( "<" раньше и ">" позже в хронологическом порядке). · оперции проверки поля на значение NULL: IS NULL, IS NOT NULL · операции проверки на вхождение в диапазон: BETWEEN и NOT BETWEEN. · операции проверки на вхождение в список: IN и NOT IN · операции проверки на вхождение подстроки: LIKE и NOT LIKE · отдельные операции соединяются связями AND, OR, NOT и группируются с помощью скобок. Подробно все эти ключевые слова будут описаны и проиллюстрированы в параграфе, посвященном оператору SELECT. Здесь мы ограничимся приведением несложного примера: UPDATE publishers SET url="url not defined" WHERE url IS NULL;Эта команда находит в таблице publishers все неопределенные значения столбца url и заменяет их строкой "url not defined".
Дата добавления: 2015-05-09; Просмотров: 1375; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |