Bùi Tấn Lực
- 19
- 24/09/2025
Chỉ mục UNIQUE trong MySQL dùng để ràng buộc giá trị truyền vào không cho phép trùng với giá trị cột trong bảng nhưng giá trị NULL thì được, chi tiết như nào hãy cùng chúng tôi phân tích:
Chỉ mục UNIQUE trong MySQL
Chức năng của Chỉ mục UNIQUE trong MySQL
Chỉ mục UNIQUE trong MySQL dùng để ràng buộc giá trị truyền vào không cho phép trùng với giá trị cột trong bảng nhưng giá trị NULL thì được, bạn có thể tạo nhiều tên chỉ mục, mỗi tên chỉ mục có thể là một cột hoặc nhiều cột.
Chỉ mục UNIQUE khi tạo bảng trong MySQL
Chỉ mục UNIQUE một cột khi tạo bảng trong MySQL
Giá trị của cột cccd mới thêm vào không được trùng với giá trị có trong bảng, NULL thì đượ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"');
// CREATE TABLE `tb_congdan`
echo "<b>CREATE TABLE `tb_congdan`</b><br>";
$sql ="CREATE TABLE `tb_congdan` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`ten` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`cccd` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci UNIQUE
) 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_congdan thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
CREATE TABLE `tb_congdan`
Tạo tb_congdan thành công!
Chỉ mục UNIQUE nhiều cột khi tạo bảng trong MySQL
Giá trị của cột cccd và cột email mới thêm vào không được cùng nhau trùng với giá trị có trong bảng, nếu một trong 2 cột trùng thì được, hoặc NULL thì đượ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"');
// CREATE TABLE `tb_congdan`
echo "<b>CREATE TABLE `tb_congdan`</b><br>";
$sql ="CREATE TABLE `tb_congdan` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`ten` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`cccd` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci,
`email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci,
UNIQUE (cccd, email)
) 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_congdan thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
CREATE TABLE `tb_congdan`
Tạo tb_congdan thành công!
Chỉ mục UNIQUE Sau khi tạo bảng (ALTER TABLE) trong MySQL
Chỉ mục UNIQUE một cột sau khi tạo bảng (ALTER TABLE) trong MySQL
<?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_congdan`
echo "<b>ALTER TABLE `tb_congdan`</b><br>";
$sql ="ALTER TABLE tb_congdan
ADD CONSTRAINT U_cccd UNIQUE (cccd)";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể ALTER TABLE: ' . mysql_error());
}else{
echo "ALTER TABLE tb_congdan thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
ALTER TABLE `tb_congdan`
ALTER TABLE tb_congdan thành công!
Chỉ mục UNIQUE nhiều cột sau khi tạo bảng (ALTER TABLE) trong MySQL
<?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_congdan`
echo "<b>ALTER TABLE `tb_congdan`</b><br>";
$sql ="ALTER TABLE tb_congdan
ADD CONSTRAINT U_cccdemail UNIQUE (cccd,email)";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể ALTER TABLE: ' . mysql_error());
}else{
echo "ALTER TABLE tb_congdan thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
ALTER TABLE `tb_congdan`
ALTER TABLE tb_congdan thành công!
Xóa tên chỉ mục UNIQUE trong MySQL
<?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_congdan`
echo "<b>ALTER TABLE `tb_congdan`</b><br>";
$sql ="ALTER TABLE tb_congdan
DROP INDEX U_cccdemail";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể ALTER TABLE: ' . mysql_error());
}else{
echo "ALTER TABLE tb_congdan thành công!";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
ALTER TABLE `tb_congdan`
ALTER TABLE tb_congdan thành công!
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Chỉ mục UNIQUE 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 *