|
|||
КОМАНДЫ МОДИФИКАЦИИ ДАННЫХ (DML)1.3. КОМАНДЫ МОДИФИКАЦИИ ДАННЫХ (DML) Оболочки проектирования содержат средства визуального внесения данных в таблицы. Например, в dbForge Studio это делается с помощью кон- текстного меню таблицы, пункта «Редактировать таблицу», вкладка «Данные»:
С помощью нижней панели можно добавлять, удалять записи и перемещаться по ним. Сохранение данных происходит не сразу, а после закрытия окна. Но в процессе ввода данные проверяются на соответствие ограничениям. Например, внесем неправильный телефонный номер. В этом случае об ошибке будет сообщено следующим образом: Рис. 22. Сообщение о нарушении ограничения.
Естественно, добавление записей (особенно массовое) может проводиться с помощью команд SQL, которые объединены в один сценарий. Итак, сценарий внесения данных в базу для MS SQL Server может быть таким:
USE proba GO
-- вставка записей в таблицу Students insert into Students (FIOStudent,NumGroup) VALUES ('Иванов Иван Иванович',901); -- и другие записи GO
-- вставка записей в таблицу Departments insert into Departments (TitleDepartment,PhoneDepartment) VALUES ('Кафедра математики','234-11-45'); -- и другие записи GO
-- вставка записей в таблицу Teachers insert into Teachers (FIOTeacher,idDepartment ) VALUES ('Федосеев Александр Иванович', 6); -- и другие записи GO
-- вставка записей в таблицу Subjects insert into Subjects (TitleSubject) VALUES ('Математический анализ'); -- и другие записи GO -- вставка записей в таблицу Sessions insert into Sessions (NumGroup,NumSemestr, Zach_Exam,idSubject, idTeacher) VALUES (901,1, 'зачет', 2,18); -- и другие записи GO
-- вставка записей в таблицу Marks insert into Marks(idMark,LowBalls,HighBalls) VALUES (5, 86, 100); -- и другие записи GO
Отметим, что свойство счетчика в MS SQL Server для поля фиксирует все операции с таблицей, поэтому, к примеру, несмотря на отсутствие записей в таблице, новый номер может быть отличен от 1. Оператор GO, который используется в скрипте, специфичен для MS SQL Server и разделяет скрипт на неделимые блоки, которые выполнятся полностью или не выполнятся вообще. Удобнее всего выполнять этот сценарий блоками, чтобы между ними можно было бы убедиться в корректности использования значений в полях внешнего ключа. Команды вставки для MySQL не отличаются от приведенного выше кода (за исключением команды GO). Также внимательно следует отнестись к ключевым полям при установке связи внешнего ключа. Сценарий для PostgreSQL имеет следующий вид. Отсутствие полей- счетчиков требует указывать ключевые поля во всех записях. -- сценарий вставки записей в таблицы базы данных insert into "Students" ("idStudent", "FIOStudent","NumGroup") VALUES (1,'Иванов Иван Иванович',901); -- и другие записи
При нарушениях тех или иных ограничений оператор вставки не срабатывает. Так, повторная вставка записи или вставка записи с уже существующим первичным ключом будет запрещена. Например, повторно осуществляем вставку записи: insert into Marks(idMark,LowBalls,HighBalls) VALUES (5, 86, 100); команда выполнена не будет. Мы увидим сообщение об ошибке: MS SQL Server: Ошибка: (53,1): Нарушено "PK_Marks" ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект "dbo.Marks". Повторяющееся значение ключа: (5).
PostgreSQL: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "pk_mark" SQL-состояние: 23505 Подробности: Ключ "("idMark")=(5)" уже существует.
MySQL: Duplicate entry '5' for key 1
При вставке записи с нарушением ограничения внешнего ключа также будет выведено сообщение об ошибке. Например, мы пытаемся вставить строку в таблицу сессии, в которой код преподавателя равен 100: insert into Sessions (NumGroup, NumSemestr, Zach_Exam, idSubject,idTeacher) VALUES (905,1, 'экзамен', 3,100);
Сообщение об ошибке в этом случае будет таким: MS SQL Server: Ошибка: (53,63): Конфликт инструкции INSERT с ограничением FOREIGN KEY "FK_Sessions_Teachers_idTeacher". Конфликт произошел в базе данных "proba", таблица "dbo.Teachers", column 'idTeacher'.
PostgreSQL: ОШИБКА: INSERT или UPDATE в таблице "Sessions" нарушает ограничение внешнего ключа "fk_sess_tea" SQL-состояние: 23503 Подробности: Ключ (idTeacher)=(100) отсутствует в таблице "Teachers".
MySQL: Cannot add or update a child row: a foreign key constraint fails (`decanat/sessions`, CONSTRAINT `FK_sessions_teachers_idTeacher` FOREIGN KEY (`idTeacher`) REFERENCES `teachers` (`idTeacher`) ON DELETE NO ACTION ON UPDATE NO ACTION)
|
|||
|