DB2 - Các hạn chế
Chương này mô tả các ràng buộc khác nhau trong cơ sở dữ liệu.
Giới thiệu
Để thực thi tính toàn vẹn của cơ sở dữ liệu, một tập hợp các quy tắc được xác định, được gọi là các ràng buộc. Các ràng buộc cho phép hoặc cấm các giá trị trong cột.
Trong các hoạt động cơ sở dữ liệu Thời gian thực, dữ liệu phải được thêm vào với một số hạn chế nhất định. Ví dụ: trong cơ sở dữ liệu bán hàng, id bán hàng hoặc id giao dịch phải là duy nhất. Các loại ràng buộc là:
- CÓ GIÁ TRỊ
- Unique
- Khóa chính
- Khóa ngoại
- Check
- Informational
Các ràng buộc chỉ được liên kết với các bảng. Chúng chỉ được áp dụng cho các bảng cụ thể. Chúng được xác định và áp dụng cho bảng tại thời điểm tạo bảng.
Giải thích về từng ràng buộc:
CÓ GIÁ TRỊ
Đó là một quy tắc để cấm các giá trị null từ một hoặc nhiều cột trong bảng.
Syntax:
db2 create table <table_name>(col_name col_type not null,..)
Example: [Để tạo một bảng bán hàng, với bốn cột (id, itemname, qty, price), thêm các ràng buộc “not null” vào tất cả các cột để tránh tạo bất kỳ ô trống nào trong bảng.]
db2 create table shopper.sales(id bigint not null, itemname
varchar(40) not null, qty int not null,price double not null)
Chèn giá trị NOT NULL vào bảng
Bạn có thể chèn các giá trị vào bảng như hình dưới đây:
Example: [Truy vấn LỖI]
db2 insert into shopper.sales(id,itemname,qty)
values(1,'raagi',12)
Output: [Truy vấn đúng]
DB21034E The command was processed as an SQL statement because
it was not a
valid Command Line Processor command. During SQL processing
it returned:
SQL0407N Assignment of a NULL value to a NOT NULL column
"TBSPACEID=5,
TABLEID=4, COLNO=3" is not allowed. SQLSTATE=23502
Example: [Truy vấn đúng]
db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)
db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)
Output:
DB20000I The SQL command completed successfully.
Ràng buộc duy nhất
Sử dụng các ràng buộc này, bạn có thể đặt giá trị của các cột duy nhất. Đối với điều này, các ràng buộc duy nhất được khai báo với ràng buộc “not null” tại thời điểm tạo bảng.
Syntax:
db2 create table <tab_name>(<col> <col_type> not null unique, ...)
Example:
db2 create table shopper.sales1(id bigint not null unique,
itemname varchar(40) not null, qty int not null,price
double not null)
Chèn các giá trị vào bảng
Example: Để chèn bốn hàng khác nhau với các id duy nhất là 1, 2, 3 và 4.
db2 insert into shopper.sales1(id, itemname, qty, price)
values(1, 'sweet', 100, 89)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(2, 'choco', 50, 60)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'butter', 30, 40)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(4, 'milk', 1000, 12)
Example: Để chèn một hàng mới với giá trị "id" 3
db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'cheese', 60, 80)
Output: khi bạn cố gắng chèn một hàng mới với giá trị id đã tồn tại, nó sẽ hiển thị kết quả sau:
DB21034E The command was processed as an SQL statement
because it was not a
valid Command Line Processor command. During
SQL processing it returned:
SQL0803N One or more values in the INSERT statement,
UPDATE statement, or foreign key update caused by a
DELETE statement are not valid because the primary key,
unique constraint or unique index identified by "1" constrains
table "SHOPPER.SALES1" from having duplicate values for the
index key. SQLSTATE=23505
Khóa chính
Tương tự như các ràng buộc duy nhất, bạn có thể sử dụng một ràng buộc “khóa chính” và một ràng buộc “khóa ngoại” để khai báo mối quan hệ giữa nhiều bảng.
Syntax:
db2 create table <tab_name>(
,.., primary key ())
Example: Để tạo bảng "salesboys" với "sid" làm khóa chính
db2 create table shopper.salesboys(sid int not null, name
varchar(40) not null, salary double not null, constraint
pk_boy_id primary key (sid))
Khóa ngoại
Khóa ngoại là một tập hợp các cột trong bảng được yêu cầu phải khớp với ít nhất một khóa chính của một hàng trong bảng khác. Nó là một ràng buộc tham chiếu hoặc ràng buộc toàn vẹn tham chiếu. Đó là một quy tắc logic về các giá trị trong nhiều cột trong một hoặc nhiều bảng. Nó cho phép mối quan hệ bắt buộc giữa các bảng.
Trước đó, bạn đã tạo một bảng có tên “shopper.salesboys”. Đối với bảng này, khóa chính là "sid". Bây giờ bạn đang tạo một bảng mới có thông tin cá nhân của cậu bé bán hàng với các giản đồ khác nhau có tên là “nhân viên” và bảng có tên là “cậu bán hàng”. Trong trường hợp này, “sid” là khóa ngoại.
Syntax:
db2 create table <tab_name>(<col> <col_type>,constraint
<const_name> foreign key (<col_name>)
reference <ref_table> (<ref_col>)
Example: [Để tạo một bảng có tên 'salesboys' với cột khóa ngoại 'sid']
db2 create table employee.salesboys(
sid int,
name varchar(30) not null,
phone int not null,
constraint fk_boy_id
foreign key (sid)
references shopper.salesboys (sid)
on delete restrict
)
Example: [Chèn giá trị vào bảng khóa chính “shopper.salesboys”]
db2 insert into shopper.salesboys values(100,'raju',20000.00),
(101,'kiran',15000.00),
(102,'radha',10000.00),
(103,'wali',20000.00),
(104,'rayan',15000.00)
Example: [Chèn giá trị vào bảng khóa ngoại “worker.salesboys” [không có lỗi]]
db2 insert into employee.salesboys values(100,'raju',98998976),
(101,'kiran',98911176),
(102,'radha',943245176),
(103,'wali',89857330),
(104,'rayan',89851130)
Nếu bạn đã nhập một số không xác định, không được lưu trữ trong bảng “shopper.salesboys”, nó sẽ hiển thị cho bạn lỗi SQL.
Example: [thực thi lỗi]
db2 insert into employee.salesboys values(105,'rayan',89851130)
Output:
DB21034E The command was processed as an SQL statement because it
was not a valid Command Line Processor command. During SQL
processing it returned: SQL0530N The insert or update value of
the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any
value of the parent key of the parent table. SQLSTATE=23503
Kiểm tra ràng buộc
Bạn cần sử dụng ràng buộc này để thêm các hạn chế có điều kiện cho một cột cụ thể trong bảng.
Syntax:
db2 create table
(
primary key (
), constraint
check (condition or condition) )
Example: [To create emp1 table with constraints values]
db2 create table empl
(id smallint not null,
name varchar(9),
dept smallint check (dept between 10 and 100),
job char(5) check (job in ('sales', 'mgr', 'clerk')),
hiredate date,
salary decimal(7,2),
comm decimal(7,2),
primary key (id),
constraint yearsal check (year(hiredate) > 1986 or salary > 40500)
)
Inserting values
You can insert values into a table as shown below:
db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' ,
40000.00, 1000.00)
Dropping the constraint
Let us see the syntaxes for dropping various constraints.
Dropping UNIQUE constraint
Syntax:
db2 alter table <tab_name> drop unique <const_name>
Dropping primary key
Syntax:
db2 alter table <tab_name> drop primary key
Dropping check constraint
Syntax:
db2 alter table <tab_name> drop check <check_const_name>
Dropping foreign key
Syntax:
db2 alter table <tab_name> drop foreigh key <foreign_key_name>