PostgreSQL Insert Record: вставка строк в таблицу, чтобы гарантировать, что значение, введенное в конкретном столбце, должно существовать в ссылочной таблице.
11. Напишите инструкцию SQL для вставки строк в таблицу job_history, в которой один столбец job_id содержит те значения, которые существуют в столбце job_id таблицы jobs.
Пример решения:
Код:
Вот код для создания примера таблицы заданий:
CREATE TABLE jobs (
JOB_ID integer NOT NULL UNIQUE PRIMARY KEY,
JOB_TITLE varchar(35) NOT NULL DEFAULT ' ',
MIN_SALARY decimal(6,0) DEFAULT 8000,
MAX_SALARY decimal(6,0) DEFAULT 20000
);
Теперь вставьте две строки в таблицу заданий.
INSERT INTO jobs(JOB_ID,JOB_TITLE) VALUES(1001,'OFFICER');
INSERT INTO jobs(JOB_ID,JOB_TITLE) VALUES(1002,'CLERK');
Вот команда, чтобы увидеть список вставленных строк:
job_id | job_title | min_salary | max_salary -------- + ----------- + ------------ + ------------ 1001 | ОФИЦЕР | 8000 | 20000 1002 | КЛЕРК | 8000 | 20000 (2 ряда)
Вот еще одна таблица:
CREATE TABLE job_history (
EMPLOYEE_ID integer NOT NULL PRIMARY KEY,
JOB_ID integer NOT NULL,
DEPARTMENT_ID integer DEFAULT NULL,
FOREIGN KEY (job_id) REFERENCES jobs(job_id)
);
Теперь вставьте строки в таблицу job_history.
INSERT INTO job_history VALUES(501,1001,60);
Вот команда, чтобы увидеть список вставленных строк:
postgres = # SELECT * FROM job_history; employee_id | job_id | department_id ------------- + -------- + --------------- 501 | 1001 | 60 (1 ряд)
Значение против job_id - 1001, которое существует в столбце job_id таблицы заданий, поэтому никаких проблем не возникает.
Теперь вставьте еще одну строку в таблицу job_history.
INSERT INTO job_history VALUES(502,1003,80);
Вот вывод:
postgres = # INSERT INTO job_history VALUES (502 1003,80); ОШИБКА: вставка или обновление таблицы "job_history" нарушает ограничение внешнего ключа "job_history_job_id_fkey" ДЕТАЛИ: Ключ (job_id) = (1003) отсутствует в таблице «jobs».
Здесь выше, значение против job_id равно 1003, которого нет в столбце job_id таблицы jobs (родительской таблицы), и поэтому дочерняя таблица job_history не может содержать значение job_id, как указано. Здесь отношение первичный ключ - внешний ключ нарушает и показывает вышеуказанное сообщение.
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Предыдущий: Напишите оператор SQL для вставки записей в таблицу стран, чтобы гарантировать, что столбец country_id не будет содержать дублирующихся данных, и он будет автоматически увеличен, а столбец country_name будет заполнен 'N / A', если значение не назначено для этот столбец.
Далее: напишите оператор SQL для вставки строк в таблицы сотрудников, в которых набор столбцов департаментов_данных и менеджеров_данных содержит уникальное значение и это объединенное значение должно существовать в отделах таблиц.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования