Tăng tự động là gì?
Tự động tăng là một chức năng hoạt động trên các kiểu dữ liệu số. Nó tự động tạo các giá trị số tuần tự mỗi khi bản ghi được chèn vào bảng cho một trường được xác định là tự động tăng.
Khi nào sử dụng tăng tự động?
Trong bài học về chuẩn hóa cơ sở dữ liệu, chúng ta đã xem xét cách dữ liệu có thể được lưu trữ với mức dư thừa tối thiểu, bằng cách lưu trữ dữ liệu vào nhiều bảng nhỏ, liên quan đến nhau bằng cách sử dụ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 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, công thức này sẽ 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 này phức tạp và không hiệu quả. Để 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 Gia tăng tự động của MySQL để tạo 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ị có dấu và không dấu. Các kiểu dữ liệu không có dấu chỉ có thể chứa các số dương. Cách tốt nhất là bạn 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 dần tự động
Bây giờ chúng ta hãy xem kịch bản được sử dụng để tạo bảng danh mục 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 làm cho 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 sẽ tạo ra nó.
Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và nó sẽ tăng lên 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`;
Thực thi tập lệnh trên trong MySQL workbench với myflixdb cho chúng ta 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');
Thực thi tập lệnh trên đối với myflixdb trong bàn làm việc MySQL cho chúng ta 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 ý rằng 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 định nghĩa 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 đó. Tập lệnh hiển thị bên dưới lấy id cuối cùng đã được tạo.
SELECT LAST_INSERT_ID();
Việc thực thi tập lệnh trên 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
- Thuộc tính tự động tăng khi được chỉ định trên cột có kiểu dữ liệu số, sẽ tạo số tuần tự bất cứ khi nào một hàng mới được thêm vào cơ sở dữ liệu.
- 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. Việc 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ỉ ở 255 vì bất kỳ giá trị nào vượt quá giá trị đó sẽ không được kiểu dữ liệu TINYINT 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 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 dần tự động của hàng đó sẽ không được sử dụng lại. MySQL tiếp tục tạo ra các số mới một cách tuần tự.
- Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và nó sẽ tăng lên 1 cho mỗi bản ghi mới
- Để cho phép trình tự AUTO_INCREMENT bắt đầu bằng một giá trị khác, hãy sử dụng AUTO_INCREMENT = 10