Хелпикс

Главная

Контакты

Случайная статья





КОМАНДЫ МОДИФИКАЦИИ ДАННЫХ (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)

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.