You are on page 1of 17

: -

: 2+2+2


(constraints and triggers)

( )
.
SQL
(integrity constraints) .
(

).

,
.
: , .

/ (assertions) .2


S R, 2
S.
CREATE TABLE
SQL.
: PRIMARY KEY
UNIQUE.
, , UNIQUE .
CREATE TABLE:
-

- PRIMARY KEY
.

.

PRIMARY KEY (title, year)


1: .
name.

CREATE TABLE MovieStar (


name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
gender CHAR(1),
birthdate DATE
);
CREATE TABLE MovieStar (
name CHAR(30),
address VARCHAR(255),
gender CHAR(1),
birthdate DATE,
PRIMARY KEY (name)
);


2: UNIQUE
. name.
CREATE TABLE MovieStar (
name CHAR(30) UNIQUE,
address VARCHAR(255),
gender CHAR(1),
birthdate DATE
);
CREATE TABLE MovieStar (
name CHAR(30),
address VARCHAR(255),
gender CHAR(1),
birthdate DATE,
UNIQUE (name)
);


PRIMARY KEY
NULL , UNIQUE
NULL
.
UNIQUE ,
.
UNIQUE
. ,

CREATE UNIQUE INDEX keyMovie ON Movie(title,year);



( ),
.
6


SQL e
.
Studio(name, address, presC#)
MovieExec(name, address, cert#, netWorth)
presC#
cert# MovieExec.
presC# Studio cert#
MovieExec


.
2
-
REFERENCES <table> (<attribute>)
CREATE TABLE
- CREATE TABLE

7
FOREIGN KEY (<attributes>) REFERENCES <table> (<attributes>)


3: name
presC# Studio. cert#
MovieExec.
Studio(name, address, presC#)
MovieExec(name, address, cert#, netWorth)

CREATE TABLE Studio (


name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC# INT REFERENCES MovieExec(cert#)
);
CREATE TABLE Studio (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC# INT,
FOREIGN KEY (presc#) REFERENCES MovieExec(cert#)
);


Studio :
presC# cert#
MovieExec.
presC# NULL NULL
MovieExec cert#. cert#
NULL .
3 :
1. (default
)
- Studio presC#
MovieExec .
- cert# MovieExec,
presC# .
2.
- cert# MovieExec, presC#
Studio.
- cert# MovieExec c1 c2,
presC# presC# Studio c1 c2.
3. NULL
- cert# MovieExec,
9
presC# presC# NULL.



. ON DELETE
ON UPDATE SET NULL CASCADE.
4:
cert#
presC#, presC# NULL. cert#
presC#, presC# .
Studio(name, address, presC#)
MovieExec(name, address, cert#, netWorth)
CREATE TABLE Studio (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC# INT REFERENCES MovieExec(cert#)
ON DELETE SET NULL
ON UPDATE CASCADE
);

10

a
.
NOT NULL
5: presC# Studio
NULL
Studio(name, address, presC#)
MovieExec(name, address, cert#, netWorth)
CREATE TABLE Studio (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC# INT REFERENCES MovieExec(cert#) NOT NULL
);
Studio name
address, NULL presC#.
ON DELETE SET NULL
NULL presC#.
11

a
(CHECK )
CHECK
. CHECK
WHERE
.
6:
6
Studio(name, address, presC#)
MovieExec(name, address, cert#, netWorth)
CREATE TABLE Studio (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC# INT REFERENCES MovieExec(cert#)
CHECK (presC# >= 100000)
);

12

a
(CHECK )

7: F M
MovieStar (name, address, gender, birthdate)
CREATE TABLE MovieStar (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
gender CHAR(1) CHEC (gender IN (F, M)),
birthdate DATE
);

13

8: presC#
Studio(name, address, presC#)
cert#
MovieExec(name, address, cert#, netWorth)

CREATE TABLE Studio (


name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presC# INT CHECK
(presC# IN (SELECT cert# FROM MovieExec))
);
presC#
cert# .
cert# presC#
CHECK .
14

a
(CHECK )
CREATE TABLE

.

9: M
Ms.

MovieStar (name, address, gender, birthdate)


CREATE TABLE MovieStar (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
gender CHAR(1),
birthdate DATE,
CHECK (gender = F OR name NOT LIKE Ms.%)
);

15

a
, ,
, .
.
CONSTRAINT.
10:
CREATE TABLE MovieStar (
name CHAR(30) CONSTRAINT NameIsKey PRIMARY KEY,
address VARCHAR(255),
gender CHAR(1) CONSTRAINT NoAndro CHEC (gender IN (F, M)),
birthdate DATE
);

CREATE TABLE MovieStar (
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
gender CHAR(1) CHEC (gender IN (F, M)),
birthdate DATE
CONSTRAINT RightTitle CHECK (gender = F OR name NOT LIKE
16
Ms.%)
);


ALTER TABLE MovieStar DROP CONSTRAINT NameIsKey;
ALTER TABLE MovieStar DROP CONSTRAINT NoAndro;
ALTER TABLE MovieStar DROP CONSTRAINT RightTitle;


ALTER TABLE MovieStar ADD CONSTRAINT NameIsKey PRIMARY KEY (name);
ALTER TABLE MovieStar ADD CONSTRAINT NoAndro CHEC (gender IN (F, M);
ALTER TABLE MovieStar ADD CONSTRAINT RightTitle
CHECK (gender = F OR name NOT LIKE Ms.%);

17

You might also like