This tutorial shows you how to delete rows from database without
violating integrity of the remaining data.
Deleting data is closely coupled with data exportation. The same
restrictions are applied, no row will be deleted which is not also
exported. This way you can always restore deleted rows by
re-importing them.
A delete-script contains
DELETE statements for all exported rows which are not associated
with any non-exported row according to the restricted data model.
Additionally tables can be excluded from deletion so that their
rows will never be deleted (see step 2)
ObjectiveDelete all projects which have ended before
2008-01-01. Delete all associated participations too but no role
and no employee.
Step 1. Delete projects
Create a new model. Select
table PROJECT as subject table and enter T.END_DATE<'2008-01-01'
as subject condition.
In order to prevent the deletion of a PROJECT_PARTICIPATION, which
is not associated with an old project but with a role of a
participation in an old project, disable the association from ROLE
to PROJECT_PARTICIPATION. Do the same with the association from
EMPLOYEE to PROJECT_PARTICIPATION.
Disable all associations to EMPLOYEE too. This will reduce the set
of exported employee-rows to those employees who have participated
in an old project.
Open the data export dialog. Enter delete-old-projects.sql as name for
the delete-script and start the exportation.
Jailer has generated a script for the deletion of the two old
projects and the six associated participations, but also for the
deletion of six employees and one role. This role is the role of an
participation in an old project, but not of a remaining one. The
six employees have participated in an old project but in none of
the remaining projects.
Step 2. Prevent employees and roles from being
deleted
Open the data model editor (Tools->Data Model Editor). Edit the
table EMPLOYEE and switch on the check-box "exclude from deletion". Do the same
with table ROLE.
(Since version 6.7 it's also possible to do this via the table's
context menu)
Export Data again.
Employees and roles are now excluded from deletion:
--
generated by Jailer at Wed Fri May 02 12:37:07 CEST
2016 from wisser@desktop
--
-- extraction model: EMPLOYEE where NAME='SCOTT'
(extractionmodel/scott.csv)
-- database URL:
jdbc:db2://localhost/wisser
-- database user: scott
-- Exported Entities: 25
--
DEPARTMENT
2
--
EMPLOYEE
8
--
PROJECT
2
--
PROJECT_PARTICIPATION
6
--
ROLE
3
--
SALARYGRADE
4
--
-- Tabu-tables: { EMPLOYEE, ROLE }
--
-- Deleted Entities: 8
--
DEPARTMENT 0
(-2)
--
PROJECT
2
--
PROJECT_PARTICIPATION
6
-- SALARYGRADE 0
(-4)
Delete from PROJECT_PARTICIPATION Where (PROJECTNO, EMPNO,
START_DATE) in (values (1001, 7369, '2006-01-01'), (1001,
7788, '2006-05-15'), (1001, 7902, '2006-01-01'), (1002, 7782,
'2006-08-22'), (1002, 7876, '2006-08-22'), (1002, 7934,
'2007-01-01'));
Delete from PROJECT Where PROJECTNO in (1001, 1002);
|
|