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>