Bạn có thể tạo và sửa đổi 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 truy vấn định nghĩa dữ liệu và cách sử dụng truy vấn để 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 như 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 chỉ đơn thuần 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 bỏ 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 truy vấn định nghĩa dữ liệu để sửa đổi đối tượng cơ sở dữ liệu có thể gặp 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 bạn gây ra lỗi, 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 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 mình. Nếu bạn không chịu trách nhiệm duy trì cơ sở dữ liệu mà bạn đang sử 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 của 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 CREATE |
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 CREATE TABLE. Lệnh CREATE TABLE 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 CREATE TABLE là lệnh CREATE TABLE 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 cá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 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ự trong năm. Để sử dụng truy vấn định nghĩa dữ liệu để tạo bảng, hãy làm như sau:
Lưu ý: Trước tiên, có thể bạn cần phải bật 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 &, bấm vào Thiết kế Truy vấn.
-
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , hãy bấm Định nghĩa Dữ liệu.
Lưới thiết kế bị ẩn và tab đối tượng dạng xem SQL được hiển thị.
-
Nhập câu lệnh SQL sau:
CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price 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 thả (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ỳ một trong những điều sau đây:
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ề điều kiện của mỗi ô tô. Bạn có thể thực hiện thao tác sau đây:
-
Trên tab Tạo , trong nhóm Macro &, bấm vào Thiết kế Truy vấn.
-
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , hãy bấm Định nghĩa Dữ liệu.
Lưới thiết kế bị ẩn và tab đối tượng dạng xem SQL được hiển thị.
-
Nhập câu lệnh SQL sau:
ALTER TABLE Cars ADD COLUMN Condition 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 CREATE INDEX. Lệnh CREATE INDEX 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 CREATE INDEX, tên chỉ mục, đối số ON, tên của bảng có chứa các trường bạn muốn lập chỉ mục và danh sách các trường được đưa vào chỉ mục.
-
Đối số DESC sẽ tạo chỉ mục theo thứ tự giảm dần, có thể hữu ích nếu bạn thường xuyên chạy các truy vấn tìm kiếm giá trị hàng đầu cho 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 các trường được lập chỉ mục làm khóa chính của bảng.
-
Đối số 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 — nghĩa là không cho phép giá trị null.
Giả sử bạn có một bảng có tên Là ô tô với các trường lưu trữ tên, năm, giá cả và điều kiện của những chiếc xe đã 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 bao gồm trường năm trong truy vấn. Bạn có thể tạo chỉ mục trên trường Năm để 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 &, bấm vào Thiết kế Truy vấn.
-
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , hãy bấm Định nghĩa Dữ liệu.
Lưới thiết kế bị ẩn và tab đối tượng dạng xem SQL được hiển thị.
-
Nhập câu lệnh SQL sau:
CREATE INDEX YearIndex ON Cars (Year)
-
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à một 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 không cho trường bị ràng buộc chấp nhận giá trị trùng lặp với giá trị hiện có cho trường đó.
Mối quan hệ là một loại ràng buộc tham chiếu đến các 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 có thể chèn giá trị trong trường bị ràng buộc hay kết hợp trường hay không. Bạn không sử dụng một từ khóa đặc biệt để cho biết 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à một loại để tạo ràng buộc trên nhiều trường.
Ràng buộc trường đơn
Mệnh đề CONSTRAINT trường đơn ngay sau định nghĩa của trường mà mệnh đề đó ràng buộc và có cú pháp sau đây:
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 có tên Là ô tô với các trường lưu trữ tên, năm, giá cả và điều kiện của những chiếc xe đã qua sử dụng mà bạn đang cân nhắc mua. Ngoài ra, giả sử bạn thường xuyên quên nhập giá trị cho tình trạng của 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 bạn để trống trường bằng cách sử dụng thủ tục sau đây:
-
Trên tab Tạo , trong nhóm Macro &, bấm vào Thiết kế Truy vấn.
-
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , hãy bấm Định nghĩa Dữ liệu.
Lưới thiết kế bị ẩn và tab đối tượng dạng xem SQL được hiển thị.
-
Nhập câu lệnh SQL sau:
ALTER TABLE Cars ALTER COLUMN Condition 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ử rằng sau một thời gian, bạn nhận thấy rằng có nhiều giá trị tương tự nhau trong trường Điều kiện nên giống nhau. Ví dụ, một số trong những chiếc xe có giá trị Điều kiện của người nghèo và những người khác có một giá trị xấu.
Lưu ý: Nếu bạn muốn làm theo các thủ tục còn lại, hãy thêm một số dữ liệu giả vào bảng Cars mà bạn đã tạo trong các bước trước.
Sau khi bạn dọn dẹp các giá trị để các giá trị nhất quán hơn, bạn có thể tạo một bảng có tên là CarCondition, với một trường có tên là Điều kiện, chứa tất cả các giá trị mà bạn muốn sử dụng cho điều kiện của ô tô:
-
Trên tab Tạo , trong nhóm Macro &, bấm vào Thiết kế Truy vấn.
-
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , hãy bấm Định nghĩa Dữ liệu.
Lưới thiết kế bị ẩn và tab đối tượng dạng xem SQL được hiển thị.
-
Nhập câu lệnh SQL sau:
CREATE TABLE CarCondition (Điều kiện 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 Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY
-
Để chèn các giá trị từ trường Điều kiện của bảng Cars 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 SELECT ĐIỀU KIỆN KHÁC BIỆT TỪ Xe ô tô;
Lưu ý: Câu lệnh SQL trong bước này là một câu 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 chèn bất kỳ giá trị mới nào vào trường Điều kiện của bảng Ô tô khớp với giá trị của trường Điều kiện trong bảng CarCondition, bạn có thể tạo mối quan hệ giữa CarCondition và Cars trên trường có tên là Điều kiện, bằng cách sử dụng quy trình sau đây:
-
Trên tab Tạo , trong nhóm Macro &, bấm vào Thiết kế Truy vấn.
-
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , hãy bấm Định nghĩa Dữ liệu.
Lưới thiết kế bị ẩn và tab đối tượng dạng xem SQL được hiển thị.
-
Nhập câu lệnh SQL sau:
ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)
-
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 cân nhắc 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 Cars có cùng một bộ giá trị cho Tên, Năm, Điều kiện và Giá cả. 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 &, bấm vào Thiết kế Truy vấn.
-
Trên tab Thiết kế , trong nhóm Kiểu Truy vấn , hãy bấm Định nghĩa Dữ liệu.
Lưới thiết kế bị ẩn và tab đối tượng dạng xem SQL được hiển thị.
-
Nhập câu lệnh SQL sau:
ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (name, year, condition, price)
-
Trên tab Thiết kế, trong nhóm Kết quả, bấm Chạy.