Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Ый способ заполнения базы данных – используем команду INSERT



Самый универсальный и гибкий способ создания данных состоит в использовании SQL-команды INSERT. Формат у нее такой:

INSERT INTO ИмяТаблицы [(СписокСтолбцовТаблицы)]

VALUES (СписокЗначений);

В квадратных скобках указываются необязательные элементы команды. Если в этой команде пропустить СписокСтолбцовТаблицы, то имеются в виду ВСЕ столбцы, и именно в таком порядке, в каком они были определены при создании таблицы.

SQL-команды нужно набирать в окне SQL statement. Для выполнения команд нужно выбрать меню Query – Execute или кнопку  на панели инструментов или нажать Ctrl+Enter.

Можно набрать несколько команд и выполнить их все вместе, или выделить отдельную команду (как для копирования) и выполнить только ее.

Текст SQL-команд, который также называют SQL-сценарием, можно (и нужно! ) сохранять в файл. По умолчанию тип файла sql.

Заполним таблицу Предприятия:

# выберем базу данных

USE kontora;

# добавим строки

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Альфа', 'Москва');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Бета', 'Казань');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Гамма', 'Париж');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Дельта', 'Лондон');

INSERT INTO k_firm (firm_name, firm_addr)

VALUES('Омега', 'Токио');

 

# посмотрим результат

SELECT * FROM k_firm;

Обратите внимание, что мы не задавали значения для столбца firm _ num, поскольку этот столбец имеет свойство Auto increment, и сервер его заполняет сам, натуральными числами.

Заполним Отдел

INSERT INTO k_dept (dept_short_name, dept_full_name)

VALUES('Sales', 'Отдел продаж');

INSERT INTO k_dept (dept_short_name, dept_full_name)

VALUES('Mart', 'Отдел маркетинга');

INSERT INTO k_dept (dept_short_name, dept_full_name)

VALUES('Cust', 'Отдел гарантийного обслуживания');

 

SELECT * FROM k_dept;

Заполним таблицу Сотрудник. Обратите внимание, что в этой таблице можно указывать только такой номер отдела, который существует в таблице Отдел! (Оставить это поле пустым тоже можно.)

INSERT INTO k_staff (staff_name, K_dept_dept_num, staff_hiredate, staff_post)

VALUES('Иванов', 1, '1999-01-01', 'Менеджер');

INSERT INTO k_staff (staff_name, K_dept_dept_num, staff_hiredate, staff_post)

VALUES('Петров', 2, '2010-10-13', 'Менеджер');

INSERT INTO k_staff (staff_name, K_dept_dept_num, staff_hiredate, staff_post)

VALUES('Сидоров', 3, '2005-12-01', 'Менеджер');

INSERT INTO k_staff (staff_name, staff_hiredate, staff_post)

VALUES('Семенов', '1990-01-01', 'Директор');

INSERT INTO k_staff (staff_name, K_dept_dept_num, staff_hiredate, staff_post)

VALUES('Григорьев', 3, '2008-12-19', 'Программист');

SELECT * FROM k_staff;

Что же будет, если указать несуществующий номер отдела?

INSERT INTO k_staff

(staff_name, K_dept_dept_num, staff_hiredate, staff_post)

VALUES('Смит', 10, '2013-01-01', 'Консультант');

Будет получена следующая ошибка:

Error code: 1452

Cannot add or update a child row: a foreign key constraint fails (`kontora`, `k_staff`, CONSTRAINT `fk_staff_k_dept` FOREIGN KEY (`k_dept_dept_num`) REFERENCES `k_dept` (`dept_num`) …

Заполним таблицу Договор

INSERT INTO k_contract

(contract_type, k_firm_firm_num, k_staff_staff_num, contract_date) VALUES('A', 1, 1, '2011-11-01');

INSERT INTO k_contract

(contract_type, k_firm_firm_num, k_staff_staff_num, contract_date) VALUES('B', 1, 2, '2011-10-01');

INSERT INTO k_contract

(contract_type, k_firm_firm_num, k_staff_staff_num, contract_date) VALUES('C', 1, 1, '2011-09-01');

INSERT INTO k_contract

(contract_type, k_firm_firm_num, k_staff_staff_num, contract_date) VALUES('A', 2, 2, '2011-11-15');

INSERT INTO k_contract

(contract_type, k_firm_firm_num, k_staff_staff_num, contract_date) VALUES('B', 2, 2, '2011-08-01');

INSERT INTO k_contract 

(contract_type, k_firm_firm_num, k_staff_staff_num, contract_date) VALUES('C', 3, 1, '2011-07-15');

INSERT INTO k_contract

(contract_type, k_firm_firm_num, k_staff_staff_num, contract_date) VALUES('A', 4, 1, '2011-11-12');

 

SELECT * FROM k_contract;

Заполним таблицу Счет

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(1, '2011-11-12', '2011-12-12', 1000);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(1, '2011-12-12', '2012-01-12', 2000);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(1, '2012-01-12', '2012-02-12', 2000);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(2, '2011-12-12', '2012-01-12', 6000);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(2, '2012-01-12', '2012-02-12', 2000);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(3, '2012-01-12', '2012-02-12', 2500);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(4, '2011-12-12', '2012-01-12', 1500);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(5, '2011-12-12', '2012-01-12', 1200);

INSERT INTO k_bill

(k_contract_contract_num, bill_date, bill_term, bill_sum)

VALUES(5, '2012-01-12', '2012-02-12', 10000);

 

SELECT * FROM k_bill;

И остальные таблицы:

SELECT * FROM k_payment;

SELECT * FROM k_price;

'У' означает услугу, 'Т' – товар.

SELECT * FROM k_protokol;

Кроме команды добавления данных INSERT, есть полезные команды изменения данных UPDATE и удаления данных DELETE.

 

Формат команды UPDATE:

UPDATE [INTO] ИмяТаблицы SET ИмяСтолбца=НовоеЗначение

[WHERE Условие];

Квадратные скобки означают необязательную часть команды. Если условия нет, то изменяются ВСЕ строки заданной таблицы.

Применим эту команду на практике. Если вы обратили внимание, в таблице Отдел остался незаполненным столбец k _ staff _ staff _ num, означающий номер сотрудника – руководителя отдела.

UPDATE k_dept SET k_staff_staff_num=2

WHERE dept_short_name='Mart';

UPDATE k_dept SET k_staff_staff_num=3

WHERE dept_short_name='Cust';

UPDATE k_dept SET k_staff_staff_num=1

WHERE dept_short_name='Sales';

Результат:

Формат команды DELETE:

DELETE [FROM] имя_таблицы [WHERE условие];

Квадратные скобки означают необязательную часть команды. Если условия нет, то удаляются ВСЕ строки заданной таблицы.

Пример: удаляем фирму с номером 5:

DELETE FROM k_firm WHERE firm_num=5;

Результат успешный. А что будет, если попробовать удалить фирму с номером 1? У этой фирмы есть подчиненные строки в таблице Договор.

Ошибка:

Error Code 1451

Cannot delete or update a parent row: a foreign key constraint fails (`kontora`, `k_contract`, CONSTRAINT `fk_contract_k_firm` FOREIGN KEY (`k_firm_firm_num`) REFERENCES `k_firm` (`firm_num`) …


Поделиться:



Последнее изменение этой страницы: 2019-06-19; Просмотров: 609; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь