fbpx
close

Khóa ngoại là gì? Cách tạo khóa ngoại trong phpMyAdmin đơn giản

Tác giả: Đông Tùng Ngày cập nhật: 28/08/2024 Chuyên mục: Kiến thức Hosting
Disclosure
Website Wiki.tino.org được cung cấp bởi Tino Group. Truy cập và sử dụng website đồng nghĩa với việc bạn đồng ý với các điều khoản và điều kiện trong chính sách bảo mật - điều khoản sử dụng nội dung. Wiki.tino.org có thể thay đổi điều khoản sử dụng bất cứ lúc nào. Việc bạn tiếp tục sử dụng Wiki.tino.org sau khi thay đổi có nghĩa là bạn chấp nhận những thay đổi đó.
Why Trust Us
Các bài viết với hàm lượng tri thức cao tại wiki.tino.org được tạo ra bởi các chuyên viên Marketing vững chuyên môn và được kiểm duyệt nghiêm túc theo chính sách biên tập bởi đội ngũ biên tập viên dày dặn kinh nghiệm. Mọi nỗ lực của chúng tôi đều hướng đến mong muốn mang đến cho cộng đồng nguồn thông tin chất lượng, chính xác, khách quan, đồng thời tuân thủ các tiêu chuẩn cao nhất trong báo cáo và xuất bản.

Trong thế giới cơ sở dữ liệu, việc quản lý và liên kết các bảng dữ liệu một cách hiệu quả là vô cùng quan trọng. Khóa ngoại (Foreign Key) chính là công cụ giúp chúng ta thực hiện điều này. Bài viết này sẽ giúp bạn hiểu rõ khái niệm khóa ngoại là gì, cũng như cách tạo khóa ngoại trong phpMyAdmin đơn giản.

Tổng quan về khóa ngoại (Foreign Key)

Khóa ngoại là gì?

Khóa ngoại (Foreign Key) là một ràng buộc (constraint) trong cơ sở dữ liệu quan hệ, dùng để thiết lập mối quan hệ giữa hai bảng. Cụ thể, đây là một hoặc một tập hợp các cột trong một bảng có nhiệm vụ tham chiếu đến khóa chính (Primary Key) của một bảng khác. Điều này giúp đảm bảo rằng giá trị của cột khóa ngoại phải tồn tại trong cột khóa chính của bảng được tham chiếu, qua đó duy trì tính toàn vẹn tham chiếu (referential integrity) trong cơ sở dữ liệu.

khoa-ngoai-la-gi
Khóa ngoại là gì?

Để hiểu rõ hơn, hãy hình dung một ví dụ:

Giả sử chúng ta có hai bảng:

Bảng khach_hang: Chứa thông tin về các khách hàng như mã khách hàng (là khóa chính), tên, địa chỉ,…

Bảng don_hang: Chứa thông tin về các đơn hàng như mã đơn hàng, ngày đặt hàng, mã khách hàng (là khóa ngoại),…

Trong bảng don_hang, trường ma_khach_hang chính là khóa ngoại, tham chiếu đến trường ma_khach_hang (khóa chính) trong bảng khach_hang. Điều này có nghĩa là:

Mỗi đơn hàng phải thuộc về một khách hàng duy nhất. Giá trị của ma_khach_hang trong bảng don_hang phải tồn tại trong bảng khach_hang.

Chúng ta có thể sử dụng khóa ngoại để liên kết hai bảng lại với nhau. Ví dụ, muốn tìm tất cả các đơn hàng của một khách hàng cụ thể, chúng ta chỉ cần tìm kiếm theo giá trị của khóa ngoại trong bảng don_hang.

khoa-ngoai-giup-duy-tri-tinh-toan-ven-tham-chieu-trong-co-so-du-lieu
Khóa ngoại giúp duy trì tính toàn vẹn tham chiếu trong cơ sở dữ liệu

Tại sao cần khóa ngoại khi thao tác với cơ sở dữ liệu?

Đảm bảo tính toàn vẹn tham chiếu

Khóa ngoại giúp đảm bảo rằng mọi giá trị trong trường khóa ngoại phải tồn tại trong trường khóa chính của bảng được tham chiếu. Điều này ngăn chặn việc nhập dữ liệu không hợp lệ hoặc không tồn tại, giúp duy trì tính nhất quán của dữ liệu trong toàn bộ hệ thống. Khi một bản ghi trong bảng chính bị xóa hoặc cập nhật, các bản ghi liên quan trong bảng phụ cũng sẽ được điều chỉnh tương ứng.

Tạo mối quan hệ giữa các bảng

Khóa ngoại giúp xác định mối quan hệ giữa các bảng trong cơ sở dữ liệu. Ví dụ, trong một hệ thống quản lý đơn hàng, bảng “Orders” có thể chứa trường khóa ngoại “EmployeeID” để liên kết với bảng “Employees“. Điều này cho phép người dùng dễ dàng truy xuất thông tin về nhân viên đã xử lý đơn hàng mà không cần phải lưu trữ thông tin nhân viên trong bảng đơn hàng, từ đó tiết kiệm không gian lưu trữ và giảm thiểu sự trùng lặp dữ liệu.

tai-sao-can-khoa-ngoai-khi-thao-tac-voi-co-so-du-lieu
Tại sao cần khóa ngoại khi thao tác với cơ sở dữ liệu?

Tối ưu hóa truy vấn

Khi các bảng được liên kết thông qua khóa ngoại, việc truy vấn dữ liệu từ nhiều bảng trở nên dễ dàng và hiệu quả hơn. Các hệ quản trị cơ sở dữ liệu có thể sử dụng thông tin về mối quan hệ giữa các bảng để tối ưu hóa các truy vấn, giảm thiểu thời gian xử lý và tăng cường hiệu suất. Điều này đặc biệt hữu ích trong các hệ thống lớn, nơi mà hiệu suất truy vấn là yếu tố quan trọng.

Hỗ trợ quản lý cơ sở dữ liệu

Sử dụng khóa ngoại cũng giúp quản lý dữ liệu hiệu quả hơn. Khi có sự thay đổi trong một bảng (ví dụ, xóa một nhân viên), hệ thống có thể tự động cập nhật hoặc xóa các bản ghi liên quan trong bảng khác, nhờ vào các quy tắc ràng buộc mà khóa ngoại thiết lập. Điều này không chỉ giúp duy trì tính nhất quán của dữ liệu mà còn giảm thiểu khả năng xảy ra lỗi do sự thay đổi không đồng bộ giữa các bảng.

Tăng cường bảo mật và kiểm soát truy cập

Khóa ngoại cũng đóng vai trò quan trọng trong việc tăng cường bảo mật và kiểm soát truy cập dữ liệu. Bằng cách thiết lập các ràng buộc khóa ngoại, các nhà quản trị có thể kiểm soát ai có quyền truy cập vào dữ liệu nào và đảm bảo rằng chỉ những người có quyền hợp lệ mới có thể thực hiện các thao tác trên dữ liệu liên quan. Điều này giúp bảo vệ dữ liệu khỏi những thay đổi không mong muốn và đảm bảo rằng chỉ những thông tin chính xác và hợp lệ được lưu trữ trong cơ sở dữ liệu.

Hướng dẫn cách tạo khóa ngoại trong phpMyAdmin

Bài viết sẽ lấy ví dụ về cách tạo khóa ngoại cho bảng Wphe_posts trong database WordPress. Trong một cơ sở dữ liệu của WordPress, bảng Wphe_posts thường lưu trữ thông tin về các bài viết. Để thiết lập khóa ngoại trong phpMyAdmin, bạn cần đảm bảo rằng các cột trong bảng của bạn có kiểu dữ liệu phù hợp và có liên kết với cột của bảng khác. Dưới đây là hướng dẫn chi tiết:

Bước 1: Truy cập phpMyAdmin và chọn cơ sở dữ liệu

Đăng nhập vào phpMyAdmin. Trong danh sách các cơ sở dữ liệu ở cột bên trái, chọn cơ sở dữ liệu mà bạn muốn tạo khóa ngoại.

Bước 2: Xác định bảng và cột cần thiết lập khóa ngoại

Giả sử bạn muốn thiết lập một khóa ngoại cho cột post_author trong bảng Wphe_posts, liên kết với cột ID trong bảng Wphe_users (bảng lưu trữ thông tin người dùng).

  • Trong bảng Wphe_posts, cột post_author thường lưu trữ ID của người dùng (tác giả bài viết).
  • Trong bảng Wphe_users, cột ID là khóa chính và lưu trữ ID của người dùng.

Bước 3: Thiết lập khóa ngoại cho cột post_author

Trong phpMyAdmin, chọn bảng Wphe_posts.

Chọn tab Structure (Cấu trúc) để xem cấu trúc bảng.

cach-tao-khoa-ngoai-trong-phpmyadmin
Cách tạo khóa ngoại trong phpMyAdmin

Sau đó, nhấp vào liên kết Relation View (Hiển thị quan hệ).

cach-tao-khoa-ngoai-trong-phpmyadmin
Cách tạo khóa ngoại trong phpMyAdmin

Ở phần Foreign Key Constraint (Các ràng buộc khóa ngoại), bạn chọn:

  • Column (Cột): Chọn post_author.
  • Chọn bảng Wphe_users và cột ID.

Tiếp theo, chọn các hành động tại ON DELETE (khi xóa) và ON UPDATE (khi cập nhật) theo nhu cầu, chẳng hạn như:

  • CASCADE: Khi người dùng bị xóa, tất cả các bài viết của họ cũng sẽ bị xóa.
  • RESTRICT: Ngăn việc xóa người dùng nếu họ vẫn còn bài viết.
  • SET NULL: Thiết lập giá trị NULL cho cột khóa ngoại nếu hàng tham chiếu bị xóa hoặc cập nhật.
  • NO ACTION: Không thực hiện hành động nào.
cach-tao-khoa-ngoai-trong-phpmyadmin
Cách tạo khóa ngoại trong phpMyAdmin

Giải thích:

Khóa ngoại post_author trong bảng Wphe_posts liên kết với cột ID trong bảng Wphe_users, giúp xác định tác giả của mỗi bài viết. Khi bạn thiết lập khóa ngoại, bạn đảm bảo rằng mỗi giá trị trong post_author phải tồn tại trong cột ID của bảng Wphe_users.

Nhấp vào Ghi lại để lưu lại thiết lập khóa ngoại.

Bước 4: Kiểm tra và xác nhận khóa ngoại

Quay lại tab Structure (Cấu trúc) của bảng Wphe_posts để kiểm tra xem khóa ngoại đã được thiết lập thành công hay chưa. Khóa ngoại sẽ xuất hiện dưới phần Indexes (Chỉ mục) hoặc bạn có thể thấy biểu tượng liên kết cho biết sự liên kết giữa các bảng.

cach-tao-khoa-ngoai-trong-phpmyadmin
Cách tạo khóa ngoại trong phpMyAdmin

Để xóa khóa ngoại, bạn nhấn nút Xóa.

Bạn có thể lặp lại các bước tương tự để thiết lập khóa ngoại giữa các cột khác và các bảng khác trong cơ sở dữ liệu WordPress, đảm bảo tính toàn vẹn dữ liệu.

Kết luận

Tóm lại, việc thiết lập khóa ngoại trong cơ sở dữ liệu giúp đảm bảo tính toàn vẹn dữ liệu và hỗ trợ các thao tác liên quan đến mối quan hệ giữa các bảng. Sử dụng phpMyAdmin, bạn có thể dễ dàng thiết lập và quản lý các mối quan hệ này, đảm bảo hệ thống cơ sở dữ liệu của bạn hoạt động ổn định và hiệu quả. Chúc bạn thành công!

Những câu hỏi thường gặp

Có thể thiết lập nhiều khóa ngoại trong một bảng không?

Có, bạn có thể thiết lập nhiều khóa ngoại trong một bảng miễn là mỗi cột khóa ngoại liên kết với một cột khóa chính hoặc một cột có chỉ mục duy nhất trong các bảng khác.

Khóa ngoại có ảnh hưởng đến hiệu suất của cơ sở dữ liệu không?

Khóa ngoại giúp duy trì tính toàn vẹn dữ liệu, nhưng nếu có quá nhiều khóa ngoại, hoặc các thao tác xóa/cập nhật phức tạp, điều này có thể ảnh hưởng đến hiệu suất cơ sở dữ liệu. Tuy nhiên, lợi ích về tính toàn vẹn dữ liệu thường vượt trội so với chi phí hiệu suất.

Có thể tạo khóa ngoại giữa các cơ sở dữ liệu khác nhau không?

Không, khóa ngoại chỉ có thể được tạo giữa các bảng trong cùng một cơ sở dữ liệu. Nếu bạn cần tạo mối quan hệ giữa các bảng từ các cơ sở dữ liệu khác nhau, bạn sẽ phải quản lý mối quan hệ đó thông qua ứng dụng hoặc truy vấn SQL tùy chỉnh.

Tại sao tôi không thấy tùy chọn để tạo khóa ngoại trong phpMyAdmin?

Kiểm tra xem bảng của bạn có sử dụng kiểu bảng InnoDB không, vì chỉ có InnoDB mới hỗ trợ khóa ngoại.

Đảm bảo rằng cột bạn muốn dùng làm khóa ngoại và cột tham chiếu có cùng kiểu dữ liệu.

Cột tham chiếu phải là khóa chính hoặc có chỉ mục duy nhất.

Đông Tùng

Senior Technology Writer

Là cử nhân Quản trị kinh doanh của Trường Đại học Tài chính - Marketing, Tùng bắt đầu làm việc tại Tino Group từ năm 2021 ở vị trí Content Marketing để thỏa mãn niềm đam mê viết lách của bản thân. Sở hữu khả năng sáng tạo đặc biệt, anh cùng đội ngũ của mình đã tạo nên những chiến dịch quảng cáo độc đáo cùng vô số bài viết hữu ích về nhiều chủ đề khác nhau. Sự tỉ mỉ, kiên trì và tinh thần sáng tạo của Tùng đã góp phần lớn vào thành công của Tino Group trong lĩnh vực marketing trực tuyến.

Xem thêm bài viết

Bài viết liên quan

Xem nhiều

giá tốt, chất lượng cao mình rất hài lòng
chất lượng dịch vụ tốt lắm...á
chất lượng dịch vụ rất tốt.
giá tốt, chất lượng cao mình rất hài lòng
Dịch vụ chăm sóc khách hàng tốt
Dùng rất oke nha mọi người
Dịch vụ chăm sóc khách hàng tốt, mình rất hài lòng về dịch vụ của TINOHOST
Đã mua rất nhiều tên miền tại Tinohost. Chất lượng tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
tuyệt vời chăm sóc khách hàng quá tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
Quá tốt - Quá xuất sắc và tuyệt
Hỗ trợ nhiệt tình. dịch vụ chất lượng
Đội ngũ support rất nhiệt tình.
Sử dụng dịch vụ của bạn Tinohost 2 3 năm nay chưa khi nào phải thất vọng.
host dùng chất lượng, miền giá rẻ
dịch vụ hỗ trợ rất nhanh, tốc độ hosting tốt
Hộ trợ tốt, nhanh. Tuyệt vời 🥰
tuyệt vời, dịch vụ cực tốt và hỗ trợ siêu nhanh
Làm việc nhanh chóng, giá thành hợp lí.
Hosting rẻ và nhanh thích hợp cho học sinh sinh viên như mình
dịch vu tốt ! Sẽ sử dụng thưởng xuyên !
Mỗi lần cần gì, nhắn Tino là được hỗ trợ ngay. Nên một đứa không biết gì về web như mình cũng tạo được blog. Cơ bản mình chỉ lo viết, mọi thứ có anh IT của Tino lo hết.
Nhìn chung thì Tino xứng đáng là một trong những nhà cung cấp host giá rẻ #1 tại VN. Bên này support khá nhanh và nhiệt tình nên quá trình sử dụng diễn ra tương đối trơn tru.
Chất lượng quá ok so với mức giá. Các SME có thể tham khảo để dựng web nhé.
uy tín chất lượng chuẩn cho 5 sao
Dịch vụ nhanh chóng thanh toán tiện lợi
Dịch vụ nhanh chóng, giá cả hợp lý
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
Dịch vụ tốt, giá cả hợp lý👍
Rất hay, rất tốt, rất hữu ích
Hỗ trợ rất nhanh và nhiệt tình
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
dịch vụ tốt, thanh toán nhanh chống
Hài lòng dịch vụ của tinohost
Sau khi sử dụng dịch vụ của TinoHost. Mình thấy website load nhanh hơn hẳn so với sử dụng ở nhà cung cấp cũ. Giá cả do mình đc mua với giá sale 99% của TinoHost nên rất là rẻ. Gói mình mua là gòi Hosting Bussiness 20GB. Thông số cấu hình cao nên web load khá mượt
Chúc TinoHost phát triển!
domain rẻ, có nhiều gói hữu ích thích hợp cho sinh viên
Hài lòng về dịch vụ và tư vấn
Dịch vụ tốt . Support nhiệt tình
Chất lượng OK
Nhanh chóng
dịch vụ rất tốt
Nhân viên support nhanh, hỗ trợ nhiệt tình, giao dịch tự động nên khá tiện
Đã dùng nhiều dịch vụ tại Tinohost, chất lượng tốt, rất hài lòng ...😀
Sự dụng rất hài lòng với các dịch vụ của tinohost
Dịch vụ tốt, uy tín chất lượng
Tino dịch vụ quá tuyệt vời
Giá rẻ, dịch vụ tốt, hỗ trợ nhanh chóng
dịch vụ rất tốt rất tuyệt vời
Giá hợp lý cho người mới dùng
Mình thấy Tinohost có giao diện thân thiện, dễ đăng ký sử dụng cho người mới tập tành làm web như mình. Hosting hỗ trợ có nhiều lựa chọn về dung lượng và giá cả! Thanh toán qua momo thuận tiện. Recommended!
wed quá ok làm việc nhanh ngọn
Dịch vụ tốt. Khá hài lòng vì support nhiệt tình
Dịch vụ quá tuyệt vời danh cho các bạn
Xin cảm ơn đội ngủ kỹ thuật. Các bạn rất chuyên nghiệp và thân thiện. Tôi sẽ giới thiệu các bạn cho bạn bè của mình.
Dịch vụ hỗ trợ tốt, ổn định, thanh toán dễ dàng.
Mình từng dùng VPS bên Vietel IDC, hay gặp lỗi vặt và bảo trì liên tục. Nhưng Tino thì rất ok
dùng tốt, nhanh, dễ sử dụng
Giao diện đẹp mắt, dễ sử dụng
Đề nghị xem lại vấn đề phục vụ khách hàng (livchat)!
Good. Tốc độ cao. Tùy chỉnh nhiều trên shared hosting.
hosting ngon, giá luôn rẻ, tôi làm code nhưng rất thích sài host tino
Tino cung cấp host rất chuyên nghiệp. Đội ngũ kỹ thuật hỗ trợ rất tận tâm và nhiệt tình. Mình sẽ tiếp tục ủng hộ Tino 🥰.
Rất tuyệt vời🙆🙆🙆🙆🙆🙆🙆🙆🙆
Xét về tầm giá thì TinoHost rất đáng để mua và sử dụng lâu dài.
Dịch vụ chất lượng, ủng hộ 1 năm nay rồi
tuyệt vời quá đi,tuyệt vời quá đi
Tốc độ ổn định, tư vấn nhiệt tình
mới tham gia, mong mọi người hỗ trợ thêm
Tốc độ khá tốt với gói rẻ nhất 9k
Giao dịch nhanh,support nhanh và tận tình,chuyển miền nhanh,Hosting Ok
mua sản phẩm dịch vụ tinhot rất tốt tặng ad 5tr ** luon nè🥰🥰🥰
tinohost
một truong những nơi bán hosting rẻ, chất lượng dành cho anh em nào cần để làm web
mua tại : tinohost.com
mình đã mua 2 tên miền + hosting của Tino Host . quả nhiên hiệu quả SEO cải thiện đáng kể và chứng chỉ bảo mật HTTPS miễn phí của Tino Host cũng ko kém phần quang trọng cho việc SEO website của mình
Tino host là một trong nhà cung cấp tốt nhất mình từng sử dụng. Với ưu đãi khuyến mại nhiều, giá thành rẻ kèm theo đó là sự support tuyệt vời của các admin. Nếu ai chưa lựa chọn được nhà cung cấp cho bản thân mình thì Tinohost sẽ là câu trả lời tốt nhất.
dịch vụ tốt, đội ngũ support nhiệt tình, cảm ơn #tinohost
Uy tín, chất lượng, nhân viên hỗ trợ nhiệt tình
mua 2 domain tại tinohost dùng rất chất lượng
Đã mua 02 domain và hosting tại TinoHost, hài lòng cách tư vấn và chăm sóc khách hàng của TinoHost :)
Giá rẻ cấu hình mạnh, black friday là sự bùng nổ của Tino
Hay web bán tài nguyên rất ngon
dịch vụ tốt, mua luôn host chất lượng cao của công ty nhân dịp blackfriday, cảm ơn #tinohost
Dịch vụ rất tốt, nhân viên tận tình.
Hỗ trợ nhiệt tình nhất trong các nhà cung cấp mih từng dùng. Không những server mạnh, ưu đãi có 1 không 2 mà còn nhiều plugin pro bản quyền đính kèm nữa. Quyết định gắn bó "Lifetime" với tino 😁
Dịch vụ tốt hỗ trợ nhanh chóng
Thích cách tư vấn tận tình và nhanh gọn của Tino mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
mình có mua 2 tên msiền của tino, mình rât thích cách tư vấn và chăm sóc khách hàng tại đây. Ngoài ra giá domain khá rẻ, phù hợp cho mọi người. 5 sao
Dịch vụ tốt, support nhiệt tình
tinohost tuyệt vời giá cả hợp lý
domain mua rất rẻ :))))
tốt, chất lượng, hostingok
Hosting tốt, giá cả cạnh tranh
Tuyệt vời , Hosting quá ổn
Chất lượng lắm ạ. Domain mua rẻ nhất thị trường
Dịch vụ tốt và chất lượng
Chất lượng lắm ạ. Domain mua rẻ nhất thị trường
Tino Host dùng quá ngon đi !💥💥💥💥💥
Tôi đã mua domain và hosting của các nhà cung cấp khác rồi, nhưng thực sự thấy không tốt bằng Tino, ngoài ra còn hỗ trợ rất tốt. Cảm ơn tino nhiều!
Next Reviews
CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO
Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn,  Phường Bến Nghé, Q. 1, TP. Hồ Chí Minh

Văn phòng kinh doanh: Số 42 Trần Phú, Phường 4, Quận 5, TP HCM
GPKD số 0315679836 do Sở KH và ĐT TP Hồ Chí Minh cấp
Hotline: 0364 333 333
Góp ý/Phản ánh dịch vụ: 0933 000 886