Bạn có thể tạo và sửa đổi các bảng, ràng buộc, chỉ mục và mối quan hệ trong Access bằng cách viết truy vấn định nghĩa dữ liệu trong dạng xem SQL. Bài viết này giải thích các truy vấn định nghĩa dữ liệu và cách sử dụng chúng để tạo bảng, ràng buộc, chỉ mục và mối quan hệ. Bài viết này cũng có thể giúp bạn quyết định khi nào nên sử dụng truy vấn định nghĩa dữ liệu.
Trong bài viết này
Tổng quan
Không giống các truy vấn Access khác, truy vấn định nghĩa dữ liệu không truy xuất dữ liệu. Thay vào đó, truy vấn định nghĩa dữ liệu sử dụng Ngôn ngữ Định nghĩa Dữ liệu để tạo, sửa đổi hoặc xóa các đối tượng cơ sở dữ liệu.
Lưu ý
Ngôn ngữ Định nghĩa Dữ liệu (DDL) là một phần của Ngôn ngữ truy vấn có cấu trúc (SQL).
Truy vấn định nghĩa dữ liệu có thể rất thuận tiện. Bạn có thể thường xuyên xóa và tạo lại các phần của sơ đồ cơ sở dữ liệu của mình chỉ bằng cách chạy một số truy vấn. Hãy cân nhắc sử dụng truy vấn định nghĩa dữ liệu nếu bạn đã quen thuộc với câu lệnh SQL và dự định xóa và tạo lại các bảng, ràng buộc, chỉ mục hoặc mối quan hệ cụ thể.
Cảnh báo
Việc sử dụng các truy vấn định nghĩa dữ liệu để sửa đổi đối tượng cơ sở dữ liệu có thể gây rủi ro, vì các hành động không đi kèm với hộp thoại xác nhận. Nếu nhầm lẫn, bạn có thể mất dữ liệu hoặc vô tình thay đổi thiết kế của bảng. Hãy cẩn thận khi bạn sử dụng một truy vấn định nghĩa dữ liệu để sửa đổi các đối tượng trong cơ sở dữ liệu của bạn. Nếu bạn không chịu trách nhiệm duy trì cơ sở dữ liệu mà bạn đang dùng, bạn nên tham khảo ý kiến người quản trị cơ sở dữ liệu trước khi chạy truy vấn định nghĩa dữ liệu.
Quan trọng
Tạo bản sao lưu bất kỳ bảng nào liên quan trước khi bạn chạy truy vấn định nghĩa dữ liệu.
Từ khóa DDL
| Từ khóa | Sử dụng |
|---|---|
| CREATE | Tạo chỉ mục hoặc bảng chưa tồn tại. |
| ALTER | Sửa đổi bảng hoặc cột hiện có. |
| DROP | Xóa bảng, cột hoặc ràng buộc hiện có. |
| ADD | Thêm cột hoặc ràng buộc vào bảng. |
| COLUMN | Sử dụng với ADD, ALTER hoặc DROP |
| CONSTRAINT | Sử dụng với ADD, ALTER hoặc DROP |
| INDEX | Sử dụng với TẠO |
| TABLE | Sử dụng với ALTER, CREATE hoặc DROP |
Tạo hoặc sửa đổi bảng
Để tạo bảng, bạn sử dụng lệnh TẠO BẢNG. Lệnh TẠO BẢNG có cú pháp sau đây:
CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])
Các thành phần bắt buộc duy nhất của lệnh TẠO BẢNG là chính lệnh TẠO BẢNG và tên bảng nhưng thông thường bạn sẽ muốn xác định một số trường hoặc khía cạnh khác của bảng. Hãy xem xét ví dụ đơn giản này.
Giả sử bạn muốn tạo một bảng để lưu trữ tên, năm và giá của những chiếc xe đã qua sử dụng mà bạn đang cân nhắc mua. Bạn muốn cho phép tối đa 30 ký tự cho tên và 4 ký tự cho năm. Để sử dụng truy vấn định nghĩa dữ liệu nhằm tạo bảng, hãy thực hiện như sau:
Lưu ý
Trước tiên, có thể bạn cần phải cho phép nội dung của cơ sở dữ liệu để chạy truy vấn định nghĩa dữ liệu:
- Trên Thanh Thông báo, bấm Cho phép Nội dung.
Tạo bảng
- Trên tab Tạo , trong nhóm Macro & Mã, bấm Thiết kế Truy vấn.
- Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , bấm Định nghĩa Dữ liệu.
Lưới thiết kế được ẩn và tab đối tượng dạng xem SQL được hiển thị. - Nhập câu lệnh SQL sau đây:
CREATE TABLE Xe (Tên TEXT(30), Year TEXT(4), Giá CURRENCY) - Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Sửa đổi bảng
Để sửa đổi bảng, bạn sử dụng lệnh ALTER TABLE. Bạn có thể sử dụng lệnh ALTER TABLE để thêm, sửa đổi hoặc bỏ (loại bỏ) cột hoặc ràng buộc. Lệnh ALTER TABLE có cú pháp sau đây:
ALTER TABLE table_name predicate
trong đó vị từ có thể là bất kỳ trong số các thành phần sau:
ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]
ADD CONSTRAINT multifield_constraint
ALTER COLUMN field type[(size)]
DROP COLUMN field
DROP CONSTRAINT constraint
Giả sử bạn muốn thêm một trường văn bản 10 ký tự để lưu trữ thông tin về tình trạng của từng chiếc xe. Bạn có thể thực hiện thao tác sau đây:
- Trên tab Tạo , trong nhóm Macro & Mã, bấm Thiết kế Truy vấn.
- Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , bấm Định nghĩa Dữ liệu.
Lưới thiết kế được ẩn và tab đối tượng dạng xem SQL được hiển thị. - Nhập câu lệnh SQL sau đây:
ALTER TABLE Ô tô THÊM CỘT Điều kiện TEXT(10) - Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Tạo chỉ mục
Để tạo chỉ mục trên bảng hiện có, bạn sử dụng lệnh TẠO INDEX. Lệnh TẠO CHỈ MỤC có cú pháp sau đây:
CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]
Các thành phần bắt buộc duy nhất là lệnh TẠO INDEX, tên của chỉ mục, đối số ON, tên của bảng có chứa các trường mà bạn muốn lập chỉ mục và danh sách các trường được đưa vào chỉ mục.
- Tham đối DESC giúp tạo chỉ mục theo thứ tự giảm dần, điều này có thể hữu ích nếu bạn thường xuyên chạy truy vấn tìm kiếm các giá trị trên cùng của trường đã được lập chỉ mục hoặc sắp xếp trường được lập chỉ mục theo thứ tự giảm dần. Theo mặc định, chỉ mục được tạo theo thứ tự tăng dần.
- Tham đối WITH PRIMARY thiết lập những trường được đánh chỉ mục làm khóa chính của bảng.
- Tham đối WITH DISALLOW NULL khiến chỉ mục yêu cầu nhập giá trị cho trường được lập chỉ mục — tức là giá trị null không được phép.
Giả sử bạn có một bảng tên là Ô tô với các trường lưu trữ tên, năm, giá và tình trạng của ô tô đã qua sử dụng mà bạn đang cân nhắc mua. Cũng giả sử bảng đã trở nên lớn và bạn thường xuyên đưa trường năm vào các truy vấn. Bạn có thể tạo chỉ mục trên trường Year để giúp truy vấn của bạn trả về kết quả nhanh hơn bằng cách sử dụng quy trình sau đây:
- Trên tab Tạo , trong nhóm Macro & Mã, bấm Thiết kế Truy vấn.
- Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , bấm Định nghĩa Dữ liệu.
Lưới thiết kế được ẩn và tab đối tượng dạng xem SQL được hiển thị. - Nhập câu lệnh SQL sau đây:
TẠO CHỈ MỤC YearIndex ON Cars (Năm) - Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Tạo ràng buộc hoặc mối quan hệ
Ràng buộc thiết lập điều kiện lô-gic mà trường hoặc tổ hợp trường phải đáp ứng khi chèn giá trị. Ví dụ: ràng buộc UNIQUE ngăn trường ràng buộc không cho trường ràng buộc chấp nhận giá trị sẽ trùng lặp với giá trị hiện có của trường.
Mối quan hệ là một loại ràng buộc tham chiếu đến giá trị của một trường hoặc tổ hợp trường trong một bảng khác để xác định xem một giá trị có thể được chèn vào trường ràng buộc hoặc tổ hợp trường hay không. Bạn không sử dụng một từ khóa đặc biệt để chỉ ra rằng ràng buộc là một mối quan hệ.
Để tạo ràng buộc, bạn sử dụng mệnh đề CONSTRAINT trong lệnh CREATE TABLE hoặc ALTER TABLE. Có hai loại mệnh đề CONSTRAINT: một loại để tạo ràng buộc trên một trường duy nhất và loại khác để tạo ràng buộc trên nhiều trường.
Ràng buộc trường duy nhất
Mệnh đề CONSTRAINT trường đơn theo ngay sau định nghĩa của trường mà mệnh đề đó ràng buộc và có cú pháp như sau:
CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Giả sử bạn có một bảng tên là Ô tô với các trường lưu trữ tên, năm, giá và tình trạng của ô tô đã qua sử dụng mà bạn đang cân nhắc mua. Cũng giả sử bạn thường xuyên quên nhập giá trị cho tình trạng xe và bạn luôn muốn ghi lại thông tin này. Bạn có thể tạo ràng buộc trên trường Điều kiện để ngăn không cho bạn để trống trường bằng cách sử dụng quy trình sau đây:
- Trên tab Tạo , trong nhóm Macro & Mã, bấm Thiết kế Truy vấn.
- Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , bấm Định nghĩa Dữ liệu.
Lưới thiết kế được ẩn và tab đối tượng dạng xem SQL được hiển thị. - Nhập câu lệnh SQL sau đây:
ALTER TABLE Ô tô ALTER COLUMN Điều kiện TEXT CONSTRAINT ConditionRequired NOT NULL - Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Bây giờ giả sử, sau một lúc, bạn nhận thấy có nhiều giá trị tương tự trong trường Điều kiện mà lẽ ra phải giống nhau. Ví dụ, một số xe có giá trị Điều kiện là kém và những xe khác có giá trị là xấu.
Lưu ý
Nếu bạn muốn làm theo các quy trình còn lại, hãy thêm một số dữ liệu giả vào bảng Ô tô mà bạn đã tạo ở các bước trước đó.
Sau khi bạn dọn dẹp các giá trị để chúng thống nhất hơn, bạn có thể tạo ra một bảng có tên là CarCondition, với một trường, được đặt tên là Condition, chứa tất cả các giá trị bạn muốn sử dụng cho tình trạng của ô tô:
Trên tab Tạo , trong nhóm Macro & Mã, bấm Thiết kế Truy vấn.
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , bấm Định nghĩa Dữ liệu.
Lưới thiết kế được ẩn và tab đối tượng dạng xem SQL được hiển thị.Nhập câu lệnh SQL sau đây:
CREATE TABLE CarCondition (Condition TEXT(10))Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Tạo khóa chính cho bảng bằng cách sử dụng câu lệnh ALTER TABLE:
ALTER TABLE CarCondition ALTER COLUMN Điều kiện VĂN BẢN RÀNG BUỘC CarConditionPK KHÓA CHÍNHĐể chèn các giá trị từ trường Điều kiện của bảng Ô tô vào bảng CarCondition mới, hãy nhập SQL sau đây vào tab đối tượng dạng xem SQL:
INSERT INTO CarCondition CHỌN TÌNH TRẠNG KHÁC BIỆT TỪ XE;Lưu ý
Câu lệnh SQL trong bước này là một truy vấn chắp thêm. Không giống như truy vấn định nghĩa dữ liệu, truy vấn chắp thêm kết thúc bằng dấu chấm phẩy.
Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Tạo mối quan hệ bằng cách sử dụng ràng buộc
Để yêu cầu mọi giá trị mới được chèn vào trường Tình trạng của bảng Ô tô khớp với giá trị của trường Tình trạng trong bảng Tình trạng, bạn có thể tạo mối quan hệ giữa Tình trạng xe và ô tô trên trường có tên là Tình trạng, bằng cách sử dụng quy trình sau đây:
- Trên tab Tạo , trong nhóm Macro & Mã, bấm Thiết kế Truy vấn.
- Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , bấm Định nghĩa Dữ liệu.
Lưới thiết kế được ẩn và tab đối tượng dạng xem SQL được hiển thị. - Nhập câu lệnh SQL sau đây:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Điều kiện) - Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.
Ràng buộc nhiều trường
Chỉ có thể sử dụng mệnh đề CONSTRAINT nhiều trường bên ngoài mệnh đề định nghĩa trường và có cú pháp sau đây:
CONSTRAINT constraint_name
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
UNIQUE (unique1[, unique2[, ...]]) |
NOT NULL (notnull1[, notnull2[, ...]]) |
FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])
REFERENCES foreign_table
[(fk_field1[, fk_field2[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}
Hãy xem xét một ví dụ khác sử dụng bảng Cars. Giả sử bạn muốn đảm bảo rằng không có hai bản ghi nào trong bảng Ô tô có cùng một bộ giá trị về Tên, Năm, Tình trạng và Giá. Bạn có thể tạo ràng buộc UNIQUE áp dụng cho các trường này bằng cách sử dụng quy trình sau đây:
- Trên tab Tạo , trong nhóm Macro & Mã, bấm Thiết kế Truy vấn.
- Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , bấm Định nghĩa Dữ liệu.
Lưới thiết kế được ẩn và tab đối tượng dạng xem SQL được hiển thị. - Nhập câu lệnh SQL sau đây:
ALTER TABLE Ô tô THÊM RÀNG BUỘC NoDupes UNIQUE (tên, năm, tình trạng, giá) - Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.