btvn.vn
Tìm kiếm Đăng nhập

SQL tạo bảng và khai báo khóa

Lưu trên thiết bị này
Giới thiệu các hệ cơ sở dữ liệu · Chọn bài khác

Định nghĩa cấu trúc trước khi thêm bản ghi

Ví dụ dưới đây dùng cú pháp **SQLite** để tạo hai bảng hư cấu. `TEXT` lưu mã và tên dưới dạng văn bản; mã là khóa chính nên không được trùng. Bảng **BanNhac** đặt `MaTacGia` làm khóa ngoài tham chiếu bảng **TacGia**. ```sql CREATE TABLE TacGia ( MaTacGia TEXT PRIMARY KEY, TenTacGia TEXT NOT NULL ); CREATE TABLE BanNhac ( MaBai TEXT PRIMARY KEY, TenBai TEXT NOT NULL, MaTacGia TEXT NOT NULL, FOREIGN KEY (MaTacGia) REFERENCES TacGia(MaTacGia) ); ``` `CREATE TABLE` thuộc nhóm **DDL**: lệnh tạo cấu trúc, chưa tự thêm tác giả hay bản nhạc. `PRIMARY KEY` phân biệt các hàng trong mỗi bảng; `FOREIGN KEY ... REFERENCES ...` nêu quan hệ giữa hai bảng. Hệ QTCSDL chỉ kiểm quan hệ ấy khi ràng buộc khóa ngoài được bật và thực thi.

Đọc cấu trúc từ câu lệnh

Nếu sau đó thêm tác giả `T01` rồi thêm bản nhạc `K01` có `MaTacGia = 'T01'`, mã tác giả của K01 tìm được ở bảng TacGia. Nếu dùng `T99` khi chưa có tác giả tương ứng, hệ có bật ràng buộc khóa ngoài sẽ từ chối bản ghi ấy. SGK minh họa `CREATE DATABASE` và `ALTER TABLE`; không phải hệ QTCSDL nào cũng dùng cùng cú pháp cho hai lệnh này. Ví dụ trên khai báo khóa ngay khi tạo bảng, phù hợp cách chạy thử bằng SQLite và vẫn giữ đúng ý **tạo bảng, định kiểu, định khóa** của bài.

Bài luyện

Trong ví dụ, `MaBai TEXT PRIMARY KEY` có ý nghĩa nào?
Chọn một đáp án

Bài luyện

Dòng `FOREIGN KEY (MaTacGia) REFERENCES TacGia(MaTacGia)` nối hai bảng bằng cách nào?
Chọn một đáp án

Bài luyện

Chạy hai lệnh CREATE TABLE trên, nhưng chưa thêm dữ liệu. Kết luận nào đúng?
Chọn một đáp án

Đang học