Tự động tăng là gì?
Tự động tăng là một chức năng hoạt động trên các loại dữ liệu số. Nó tự động tạo các giá trị số liên tiếp mỗi khi bản ghi được chèn vào bảng cho trường được xác định là tăng tự động.
Khi sử dụng tự động tăng?
Trong bài học về chuẩn hóa cơ sở dữ liệu, chúng tôi đã xem xét cách dữ liệu có thể được lưu trữ với mức dự phòng tối thiểu, bằng cách lưu trữ dữ liệu vào nhiều bảng nhỏ, liên quan với nhau bằng khóa chính và khóa ngoài.
Khóa chính phải là duy nhất vì nó xác định duy nhất một hàng trong cơ sở dữ liệu. Nhưng, làm thế nào chúng ta có thể đảm bảo rằng khóa chính luôn luôn là duy nhất? Một trong những giải pháp khả thi là, sử dụng công thức để tạo khóa chính, kiểm tra sự tồn tại của khóa, trong bảng, trước khi thêm dữ liệu. Điều này có thể hoạt động tốt nhưng như bạn có thể thấy cách tiếp cận rất phức tạp và không thể đánh lừa được. Để tránh sự phức tạp như vậy và để đảm bảo rằng khóa chính luôn là duy nhất, chúng ta có thể sử dụng tính năng tăng tự động của MySQL để tạo các khóa chính. Tự động tăng được sử dụng với kiểu dữ liệu INT. Kiểu dữ liệu INT hỗ trợ cả giá trị đã ký và không dấu. Các kiểu dữ liệu chưa ký chỉ có thể chứa các số dương. Để thực hành tốt nhất, nên xác định ràng buộc không dấu trên khóa chính tăng tự động.
Cú pháp tăng tự động
Bây giờ chúng ta hãy xem kịch bản được sử dụng để tạo bảng thể loại phim.
CREATE TABLE `categories` (
`category_id` int(11) AUTO_INCREMENT,
`category_name` varchar(150) DEFAULT NULL,
`remarks` varchar(500) DEFAULT NULL,
PRIMARY KEY (`category_id`)
);
Lưu ý "AUTO_INCREMENT" trên trường category_id. Điều này khiến Id danh mục được tạo tự động mỗi khi một hàng mới được chèn vào bảng. Nó không được cung cấp khi chèn dữ liệu vào bảng, MySQL tạo ra nó.
Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và giá trị này sẽ tăng thêm 1 cho mỗi bản ghi mới
Hãy xem xét nội dung hiện tại của bảng danh mục
SELECT * FROM `categories`;
Việc thực thi đoạn script trên trong bàn làm việc của MySQL đối với myflixdb cho chúng ta các kết quả sau.
category_id | category_name | remarks |
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
Bây giờ chúng ta hãy chèn một danh mục mới vào bảng danh mục.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Việc thực thi đoạn script trên đối với myflixdb trong bàn làm việc của MySQL cho chúng ta các kết quả sau được hiển thị bên dưới.
category_id | category_name | remarks |
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
9 | Cartoons | NULL |
Lưu ý chúng tôi không cung cấp id danh mục. MySQL tự động tạo nó cho chúng tôi vì id danh mục được xác định là tăng tự động.
Nếu bạn muốn lấy id chèn cuối cùng được tạo bởi MySQL, bạn có thể sử dụng hàm LAST_INSERT_ID để làm điều đó.
Đoạn code sau đây sẽ trả về bản ghi cuối cùng được sinh ra.
Thực thi tập lệnh trên sẽ cho số tăng tự động cuối cùng được tạo bởi truy vấn INSERT. Các kết quả được hiển thị dưới đây.
Tóm lược
- Tự động tăng thuộc tính khi được chỉ định trên một cột có kiểu dữ liệu số, tạo số liên tục bất cứ khi nào một hàng mới được thêm vào cơ sở dữ liệu.
- Gia số tự động thường được sử dụng để tạo khóa chính.
- Kiểu dữ liệu được xác định trên Gia số tự động phải đủ lớn để chứa nhiều bản ghi. Xác định TINYINT làm kiểu dữ liệu cho trường tăng tự động giới hạn số lượng bản ghi có thể được thêm vào bảng chỉ còn 255 do bất kỳ giá trị nào vượt quá loại dữ liệu TINYINT sẽ không được chấp nhận.
- Nó được coi là một thực tiễn tốt để chỉ định ràng buộc không dấu trên các khóa chính tăng tự động để tránh có số âm.
- Khi một hàng bị xóa khỏi bảng, id tăng tự động của nó không được sử dụng lại. MySQL tiếp tục tạo ra các số mới liên tục.
- Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và giá trị này sẽ tăng thêm 1 cho mỗi bản ghi mới
- Để để trình tự AUTO_INCREMENT bắt đầu với một giá trị khác, hãy sử dụng AUTO_INCREMENT = 10
Đăng nhận xét