SQLite

B

bvtvba

Guest
(dịch tiếp và hết mục 21)
Tóm lại, ROWID hay _ROWID_ hay OID thì Sqlite đều hiểu đó là ROWID.

Mối quan hệ ROWID và INTEGER PRIMARY KEY
Tôi nghĩ khi nhìn vào đăc tính của ROWID là chúng ta có thể hiểu được, ROWID hoạt động giống như khóa chính INTEGER PRIMARY KEY. Trên thực tế nếu bạn đặt một cột chứa khóa chính INTEGER PRIMARY KEY, thì giá trị của nó hoàn toàn giống với ROWID.
Giả sử như bạn cố ý thiết định giá trị không phải là các số liên tiếp cho khóa chính INTEGER PRIMARY KEY, thì giá trị này được lưu trữ trên cả hai trường thông tin, cột khóa chính INTEGER PRIMARY KEY và ROWID.
Sau đây ta sẽ tiến hành thực nghiệm.
Tôi sẽ tạo một table chứa hai trường thông tin như dưới đây :
Mã:
create table user (userno integer primary key, name text);
Tiến hành nạp dữ liệu:
Mã:
insert into user values(1, 'Yamada');
insert into user values(6, 'Suzuki');
insert into user values(3, 'Honda');
Kiểm tra dữ liệu:
Mã:
select *, rowid from user;
Bạn cần đăng nhập để thấy đính kèm

Từ kết quả trên, chúng ta lấy ROWID nhưng kết quả hiện thị ra lại là tên của cột khóa chính INTEGER PRIMARY KEY.
Tôi không biết chính xác, có lẽ khi có trường thông tin khóa chính thì ROWID sẽ được đặt là cột thông tin này luôn.
 
T

thanhphong

Guest
22. Có gì khác khi thiết định AUTOINCREMENT và không thiết định AUTOINCREMENT
Mã:
CREATE TABLE TblName(ColmnName INTEGER PRIMARY KEY AUTOINCREMENT, ...);
Đầu tiên tôi tạo table mà không có thiết định AUTOINCREMENT :
Mã:
create table user(id integer primary key, name text);
Bạn cần đăng nhập để thấy đính kèm

Điền dữ liệu vào table:
Mã:
insert into user(name) values('Harada');
insert into user(name) values('Yamada');
insert into user(name) values('Tani');
Bạn cần đăng nhập để thấy đính kèm

Xóa dữ liệu:
Mã:
delete from user where id = 3;
Bạn cần đăng nhập để thấy đính kèm


Chèn dữ liệu mới:
Mã:
insert into user(name) values('Ueda');
Bạn cần đăng nhập để thấy đính kèm

Id tự động tăng lên là 3.

Bây giờ tôi tạo table mà có thiết định AUTOINCREMENT :
Mã:
create table user2(id integer primary key autoincrement, name text);
Bạn cần đăng nhập để thấy đính kèm


Thực hiện chèn dữ liệu :
Mã:
insert into user2(name) values('Harada'); insert into user2(name) values('Yamada'); insert into user2(name) values('Tani');
Bạn cần đăng nhập để thấy đính kèm


Thực hiện xóa dữ liệu :
Mã:
delete from user2 where id = 3;
Bạn cần đăng nhập để thấy đính kèm

Chèn dữ liệu :
Mã:
insert into user2(name) values('Ueda');
Bạn cần đăng nhập để thấy đính kèm


Như vậy khi thiết định AUTOINCREMENT thì ID cũ được tái sử dụng, bây giờ nó tự động tăng ID lên 4.
Nếu không thiết định AUTOINCREMENT, thì ID sẽ tăng dựa vào số lượng data đang có.
 
B

bvtvba

Guest
23. Cách sử dụng Not Null
Trường hợp ta không muốn giá trị Null được nạp vào cơ sở dữ liệu, khi đó ta sẽ thiết định NOT NULL cho trường cơ sở dữ liệu đó.
Cấu trúc:
Mã:
CREATE TABLE TblName(ClmnName NOT NULL, ...);
Nào, bây giờ ta sẽ đi vào thực hành:
Tôi sẽ tạo table mới, trong đó sẽ thiết định trường cơ sở dữ liệu name, không cho nạp giá trị NULL.
Mã:
create table user(name text not null, address text);
Bạn cần đăng nhập để thấy đính kèm

Lưu ý: Với thiết định trên thì trường cơ sở dữ liệu address vẫn cho phép nạp giá trị NULL.
Tiến hành nạp dữ liệu:
Mã:
insert into user values('Honda', 'Tokyo');
insert into user values('Moriyama', null);
Vì trường dữ liệu name không cho nạp NULL, nếu cố tình nạp NULL thì sẽ có lỗi xảy ra.
Mã:
insert into user values(null, 'Osaka');
Bạn cần đăng nhập để thấy đính kèm

NOT NULL được thiết định, cho nên, nếu khi chèn dữ liệu, một trường cơ sở dữ liệu không được nạp giá trị, trường cơ sở dữ liệu này mặc định sẽ nhận giá trị NULL. Nhưng vì NOT NULL đang được thiết định, nên sẽ có lỗi xảy ra.
Mã:
insert into user(address) values('Saitama');
Bạn cần đăng nhập để thấy đính kèm
 
24. Cách sử dụng Unique
Trong một trường dữ liệu, nếu ta muốn ngăn chặn việc các dữ liệu giống nhau lặp đi lặp lại trên cột dữ liệu này, ta sẽ thiết định UNIQUE cho trường dữ liệu này.
Cấu trúc:
Mã:
CREATE TABLE TableName(ColmnName UNIQUE, ...);
Nào hãy đi vào ví dụ thực tế. Tôi đã tạo ra bảng sau, trong đó trường id được ràng buộc DUY NHẤT (unique).
Mã:
create table user(id integer unique, name text);
Bạn cần đăng nhập để thấy đính kèm

Bây giờ ta sẽ thử nạp dữ liệu vào bảng này.
Mã:
insert into user values(1, 'Honda');
insert into user values(2, 'Moriyama');
insert into user values(4, 'Kudou');
Bây giờ tôi sẽ tiếp tục nạp dữ liệu, để coi nó hoạt động ra sao :
Mã:
insert into user values(2, 'Suzuki');
id=2 trước đó đã tồn tại rồi, cho nên bây giờ sẽ xảy ra lỗi.
Bạn cần đăng nhập để thấy đính kèm


Tuy nhiên lưu ý rằng, dù đã thiết định ràng buộc duy nhất (UNIQUE) nhưng nó vẫn cho phép bạn nạp nhiều giá trị NULL.
Mã:
insert into user values(null, 'Okuda');
insert into user values(null, 'Katayama');
Bạn cần đăng nhập để thấy đính kèm

Nếu bạn không muốn điều này xảy ra, hãy sử dụng .
 
Top