Bùi Tấn Lực
- 22
- 22/09/2025
FOREIGN KEY (Khóa ngoại ) trong MySQL dùng để tham chiếu khóa ngoại của một bảng con đến khóa chính của bảng cha, chi tiết như nào hãy cùng chúng tôi phân tích:
FOREIGN KEY (Khóa ngoại ) trong MySQL
Chức năng của FOREIGN KEY (Khóa ngoại ) trong MySQL
FOREIGN KEY (Khóa ngoại ) trong MySQL dùng để tham chiếu khóa ngoại của một bảng con đến khóa chính của bảng cha, nó ràng buộc nếu có giá trị ở bảng khóa ngoại thì bên khóa chính không thể xóa được.
Code FOREIGN KEY (Khóa ngoại ) trong MySQL
FOREIGN KEY (Khóa ngoại ) lúc CREATE TABLE trong MySQL
Khóa chính: Tạo tb_lop học có khóa chính là id
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'IhNRcn9n'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// CREATE TABLE `tb_lophoc`
echo "<b>CREATE TABLE `tb_lophoc`</b><br>";
$sql ="CREATE TABLE `tb_lophoc` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`ten` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
";
//Cột id: kiểu int giới hạn 11 ký tự, không cho phép null, PRIMARY KEY là tạo khóa chính, AUTO_INCREMENT là tự động tăng dần sau mỗi lần thêm một hàng
// Cột ten: kiểu chữ varchar giới hạn 255 ký tự, kiểu utf-8, cho phép null
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể tạo bảng: ' . mysql_error());
}else{
echo "Tạo tb_lophoc thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Khóa ngoại: Tạo tb_hocsinh có khóa ngoại là idlophoc tham chiếu tới khóa chính id trong tb_lophoc
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'IhNRcn9n'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// CREATE TABLE `tb_hocsinh`
echo "<b>CREATE TABLE `tb_hocsinh`</b><br>";
$sql ="CREATE TABLE `tb_hocsinh` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`ten` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`idlophoc` int(11) NOT NULL,
FOREIGN KEY (idlophoc) REFERENCES tb_lophoc(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
";
//Cột id: kiểu int giới hạn 11 ký tự, không cho phép null, PRIMARY KEY là tạo khóa chính, AUTO_INCREMENT là tự động tăng dần sau mỗi lần thêm một hàng
// Cột ten: kiểu chữ varchar giới hạn 255 ký tự, kiểu utf-8, cho phép null
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể tạo bảng: ' . mysql_error());
}else{
echo "Tạo tb_hocsinh thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
FOREIGN KEY (Khóa ngoại ) lúc CREATE TABLE trong MySQL
Tạo khóa ngoại không có đặt tên khóa ngoại, tb_hocsinh và tb_lophoc đã có, mình đặt tên khóa ngoại là KN_idlophoc:
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'IhNRcn9n'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// ALTER TABLE `tb_hocsinh`
echo "<b>ALTER TABLE `tb_hocsinh`</b><br>";
$sql ="ALTER TABLE tb_hocsinh ADD FOREIGN KEY (idlophoc) REFERENCES tb_lophoc(id);";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể ALTER TABLE: ' . mysql_error());
}else{
echo "ALTER TABLE tb_hocsinh thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Tạo khóa ngoại có đặt tên khóa ngoại, tb_hocsinh và tb_lophoc đã có:
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'IhNRcn9n'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// ALTER TABLE `tb_hocsinh`
echo "<b>ALTER TABLE `tb_hocsinh`</b><br>";
$sql ="ALTER TABLE tb_hocsinh ADD CONSTRAINT KN_idlophoc FOREIGN KEY (idlophoc) REFERENCES tb_lophoc(id);";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể ALTER TABLE: ' . mysql_error());
}else{
echo "ALTER TABLE tb_hocsinh thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Xóa tên khóa ngoại KN_idlophoc vừa đặt, nhiều phpmyadmin không cho xóa qua code:
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'IhNRcn9n'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// ALTER TABLE `tb_hocsinh`
echo "<b>ALTER TABLE `tb_hocsinh`</b><br>";
$sql ="ALTER TABLE tb_hocsinh DROP FOREIGN KEY KN_idlophoc";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể ALTER TABLE: ' . mysql_error());
}else{
echo "ALTER TABLE tb_hocsinh thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Lời kết
Cảm ơn các bạn đã tham khảo bài viết FOREIGN KEY (Khóa ngoại ) trong MySQL.
Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.
- 0 Bình luận

Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *