кодесурса

PostgreSQL Insert Record: вставка строк в таблицу, чтобы гарантировать, что значение, введенное в конкретном столбце, должно существовать в ссылочной таблице.

script1adsense2code
script1adsense3code

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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code