

Taulut luodaan CREATE TABLE komennolla.
CREATE TABLE Tyontekija (
TyontekijaID INTEGER,
Etunimi VARCHAR(32),
Sukunimi VARCHAR(64),
Palkka DOUBLE,
Syntymaaika DATE,
Osasto INTEGER,
)
CHAR [(pit)]VARCHAR [(pit)]NUMERIC [(pit., [desim.osa])]DECIMAL [(pit., [desim.osa])]INTEGERSMALLINTFLOAT [(pit.)]REALDOUBLE PRECISIONBIT [(pit.)]BIT VARYING (pit.)DATETIME [(pit.)]TIMESTAMP [(pit.)]TIME WITH TIME ZONE (pit.)TIMESTAMP WITH TIME ZONE (pit.)
CREATE TABLE Tyontekija (
TyontekijaID INTEGER NOT NULL,
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Palkka DOUBLE NOT NULL,
Syntymaaika DATE NOT NULL,
Osasto INTEGER NOT NULL
)
CREATE TABLE Tyontekija (
TyontekijaID INTEGER NOT NULL,
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Palkka DOUBLE NOT NULL,
Syntymaaika DATE NOT NULL,
Osasto INTEGER NOT NULL,
CONSTRAINT Tyontekija_PK
PRIMARY KEY (TyontekijaID)
)
CREATE TABLE Tyontekija (
TyontekijaID INTEGER NOT NULL,
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Palkka DOUBLE NOT NULL,
Syntymaaika DATE NOT NULL,
Osasto INTEGER NOT NULL,
CONSTRAINT Tyontekija_PK
PRIMARY KEY (TyontekijaID),
CONSTRAINT T_Osasto
FOREIGN KEY (Osasto)
REFERENCES Osasto (OsastoID)
)
Taulut, joihin halutaan viitata, täytyy luoda ennen viittauksia
CREATE TABLE Tyontekija (
TyontekijaID INTEGER NOT NULL,
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Palkka DOUBLE NOT NULL,
Syntymaaika DATE NOT NULL,
Osasto INTEGER NOT NULL,
CONSTRAINT Tyontekija_PK
PRIMARY KEY (TyontekijaID),
CONSTRAINT T_Osasto
FOREIGN KEY (Osasto)
REFERENCES Osasto (OsastoID)
ON DELETE NO ACTION
ON UPDATE CASCADE
)
CREATE TABLE Tyontekija (
TyontekijaID INTEGER NOT NULL,
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Palkka DOUBLE NOT NULL DEFAULT 10000,
Syntymaaika DATE NOT NULL DEFAULT '1.1.1970',
Osasto INTEGER NOT NULL DEFAULT 1,
CONSTRAINT Tyontekija_PK
PRIMARY KEY (TyontekijaID),
CONSTRAINT T_Osasto
FOREIGN KEY (Osasto)
REFERENCES Osasto (OsastoID)
ON DELETE NO ACTION
ON UPDATE CASCADE
)
CREATE TABLE Osasto (
OsastoID INTEGER NOT NULL,
OsastoNimi VARCHAR(32) NOT NULL,
CONSTRAINT Osasto_PK
PRIMARY KEY (OsastoID)
);
CREATE TABLE Tyontekija (
TyontekijaID INTEGER NOT NULL,
Etunimi VARCHAR(32) NOT NULL,
Sukunimi VARCHAR(64) NOT NULL,
Palkka DOUBLE NOT NULL DEFAULT 10000,
Syntymaaika DATE NOT NULL DEFAULT '1.1.1970',
Osasto INTEGER NOT NULL DEFAULT 1,
CONSTRAINT Tyontekija_PK
PRIMARY KEY (TyontekijaID),
CONSTRAINT T_FK_Osasto
FOREIGN KEY (Osasto)
REFERENCES Osasto (OsastoID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);
CREATE TABLE Puhelinnumero (
Tyontekija INTEGER NOT NULL,
Puhelinnumero VARCHAR(32) NOT NULL,
CONSTRAINT Puhelinnumero_PK
PRIMARY KEY (Tyontekija,Puhelinnumero),
CONSTRAINT Puh_FK_Tyontekija
FOREIGN KEY (Tyontekija)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Lapsi (
Huoltaja INTEGER NOT NULL,
Syntymaaika DATE NOT NULL,
CONSTRAINT Lapsi_PK
PRIMARY KEY (Huoltaja, Syntymaaika),
CONSTRAINT Lapsi_FK_Huoltaja
FOREIGN KEY (Huoltaja)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Toimittaja (
ToimittajaID INTEGER NOT NULL,
ToimittajaNimi VARCHAR(64) NOT NULL,
CONSTRAINT Toimittaja_PK
PRIMARY KEY (ToimittajaID)
);
CREATE TABLE Osa (
OsaID INTEGER NOT NULL,
OsaNimi VARCHAR(64) NOT NULL,
CONSTRAINT Osa_PK
PRIMARY KEY (OsaID)
);
CREATE TABLE Koostuu (
K_OsaID INTEGER NOT NULL,
OsaID INTEGER NOT NULL,
Lukumaara SMALLINT NOT NULL,
CONSTRAINT Koostuu_PK
PRIMARY KEY (K_OsaID, OsaID),
CONSTRAINT Koostuu_FK_1
FOREIGN KEY (K_OsaID)
REFERENCES Osa (OsaID)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT Koostuu_FK_2
FOREIGN KEY (OsaID)
REFERENCES Osa (OsaID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Projekti (
ProjektiID INTEGER NOT NULL,
ProjektiNimi VARCHAR(64) NOT NULL,
Projektipaallikko INTEGER NOT NULL,
CONSTRAINT Projekti_PK
PRIMARY KEY (ProjektiID),
CONSTRAINT Projekti_FK_P
FOREIGN KEY (Projektipaallikko)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);
CREATE TABLE Tekee (
TyontekijaID INTEGER NOT NULL,
ProjektiID INTEGER NOT NULL,
CONSTRAINT Tekee_PK
PRIMARY KEY (TyontekijaID, ProjektiID),
CONSTRAINT Tekee_FK_1
FOREIGN KEY (TyontekijaID)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT Tekee_FK_2
FOREIGN KEY (ProjektiID)
REFERENCES Projekti (ProjektiID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);
CREATE TABLE Toimittaa (
ToimittajaID INTEGER NOT NULL,
OsaID INTEGER NOT NULL,
CONSTRAINT Toimittaa_PK
PRIMARY KEY (ToimittajaID, OsaID),
CONSTRAINT Toimittaa_FK_1
FOREIGN KEY (ToimittajaID)
REFERENCES Toimittaja (ToimittajaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT Tekee_FK_2
FOREIGN KEY (OsaID)
REFERENCES Osa (OsaID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);
CREATE TABLE Osan_toimitus (
ProjektiID INTEGER NOT NULL,
ToimittajaID INTEGER NOT NULL,
OsaID INTEGER NOT NULL,
Lukumaara SMALLINT NOT NULL,
CONSTRAINT OsaT_PK
PRIMARY KEY (ProjektiID, ToimittajaID, OsaID),
CONSTRAINT OSaT_FK_1
FOREIGN KEY (ToimittajaID)
REFERENCES Toimittaja (ToimittajaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT OsaT_FK_2
FOREIGN KEY (OsaID)
REFERENCES Osa (OsaID)
ON DELETE NO ACTION
ON UPDATE CASCADE,
CONSTRAINT OsaT_FK_3
FOREIGN KEY (ProjektiID)
REFERENCES Projekti (ProjektiID)
ON DELETE NO ACTION
ON UPDATE CASCADE
);
CREATE INDEX
CREATE UNIQUE INDEX IDX_Osastonimi ON Osasto (OsastoNimi);
CREATE INDEX IDX_Sukunimi ON Tyontekija (Sukunimi);
CREATE INDEX IDX_Etunimi ON Tyontekija (Etunimi);
CREATE INDEX IDX_Huoltaja ON Lapsi (Huoltaja);
CREATE INDEX IDX_ProjektiNimi ON Projekti (ProjektiNimi);
CREATE INDEX IDX_OsaNimi ON Osa (OsaNimi);
CREATE INDEX IDX_ToimittajaNimi ON Toimittaja (ToimittajaNimi);
DROP INDEX IDX_Osastonimi;
DROP INDEX IDX_Sukunimi;
DROP INDEX IDX_Etunimi;
DROP INDEX IDX_Huoltaja;
DROP INDEX IDX_ProjektiNimi;
DROP INDEX IDX_OsaNimi;
DROP INDEX IDX_ToimittajaNimi;
ALTER TABLE
ALTER TABLE Oppilaat
ADD Foobar VARCHAR(10)
ALTER TABLE Oppilaat
ADD CONSTRAINT Oppilaat_postinrofk FOREIGN KEY (postinumero)
REFERENCES Postinumerot
ON DELETE NO ACTION
ON UPDATE CASCADES
ALTER TABLE Oppilaat
DROP CONSTRAINT Oppilaat_postinrofk
GRANT
REVOKE
GRANT SELECT ON Oppilaat TO Petri, Esko
GRANT INSERT, UPDATE ON Oppilaat TO Petri
GRANT ALL ON Oppilaat TO Tommi
WITH GRANT OPTION
REVOKE ALL ON Oppilaat FROM Petri, Esko
COMMIT
ROLLBACK
CREATE TRIGGER
Seuraavassa esimerkissä on luotu IBM:n DB2:een herättimillä sama toiminta, kuin saataisiin aikaan normaalisti viite-eheysmäärittelyillä. Vrt. Lapsi-taulun määrittely aiemmin
Käytetty SQL-syntaksi ei noudata standardia vaan on DB2:en oma versio herättimien määrittelystä. Määrittelyn perusperiaate tulee kuitenkin selväksi. Viite-eheysmääritys pitää poistaa ennen kuin voi luoda sen korvaavan herättimen.
ALTER TABLE Lapsi
DROP CONSTRAINT Lapsi_FK_Huoltaja;
CREATE TRIGGER Paivita_Lapsi
AFTER UPDATE ON Tyontekija
REFERENCING NEW AS N OLD AS O
FOR EACH ROW MODE DB2SQL
UPDATE Lapsi SET Huoltaja = N.TyontekijaID WHERE Huoltaja = O.TyontekijaID;
CREATE TRIGGER Poista_Lapsi
AFTER DELETE ON Tyontekija
REFERENCING OLD AS O
FOR EACH ROW MODE DB2SQL
DELETE FROM Lapsi WHERE Huoltaja = O.TyontekijaID;
CREATE TRIGGER Varmista_Lapsi_u
NO CASCADE BEFORE UPDATE ON Lapsi
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
WHEN (N.Huoltaja NOT IN ( SELECT TyontekijaID FROM Tyontekija ) )
SIGNAL SQLSTATE '75000' ('The update value of the Huoltaja in Lapsi is no equal to any value of the parent key of the parent table');
CREATE TRIGGER Varmista_Lapsi_i
NO CASCADE BEFORE INSERT ON Lapsi
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
WHEN (N.Huoltaja NOT IN ( SELECT TyontekijaID FROM Tyontekija ) )
SIGNAL SQLSTATE '75001' ('The insert value of the Huoltaja in Lapsi is no equal to any value of the parent key of the parent table');
DROP TRIGGER Paivita_Lapsi;
DROP TRIGGER Poista_Lapsi;
DROP TRIGGER Varmista_Lapsi_u;
DROP TRIGGER Varmista_Lapsi_i;
ALTER TABLE Lapsi
ADD CONSTRAINT Lapsi_FK_Huoltaja
FOREIGN KEY (Huoltaja)
REFERENCES Tyontekija (TyontekijaID)
ON DELETE CASCADE
ON UPDATE CASCADE;
CREATE PROCEDURE