Hướng dẫn auto_increment mysql - auto_increment mysql

Đáng lẽ ra bài này tôi trình bày ở bài tạo khóa chính Primary Key nhưng thiết nghĩ để các bạn dễ tìm kiếm thì tôi sẽ chia nhỏ nó ra làm một bài riêng để trình bày cho chi tiết hơn. AUTO_INCREMENT là một chức năng khá quan trọng trong việc phân tích và tối ưu cơ sở dữ liệu, chi tiết thì bạn đọc ở phần dưới đây.

Hướng dẫn auto_increment mysql - auto_increment mysql

Hướng dẫn auto_increment mysql - auto_increment mysql

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

1. AUTO_INCREMENT là gì?

AUTO_INCREMENT nói nôm na có nghĩa là tăng tự động, có nghĩa là nếu bạn thiết lập một field nào đó là tăng tự động thì khi bạn thêm record mới bạn không cần phải truyền data cho nó và nó sẽ tự lấy giá trị lớn nhất tăng lên 1. Tuy nhiên không phải lúc nào nó cũng lấy giá trị lớn nhất mà sẽ tuân theo những tính chất sau đây:

  • AUTO_INCREMENT chỉ thiết lập được cho kiểu INT và mỗi bảng chỉ có một field duy nhất, nghĩa là nếu bạn thiết lập 2 fields là AUTO_INCREMENT thì sẽ bị lỗi ngay.
  • Khi bạn thêm dữ liệu nếu bạn có truyền data thì nó sẽ lấy data đó thay vì tăng tự động, ngược lại nó sẽ lấy giá trị lớn nhất hiện tại và tăng lên 1(giá trị lớn nhất này lưu trong config của table chứ không phải là id lớn nhất trong các records).
  • Khi bạn xóa một record thì sẽ bị khuyết mất một giá trị, lúc này nếu bạn thêm thì nó sẽ không lấp vào vị trí này mà nó tuân theo quy luật trên.
  • Giả sử giá trị 120 là lớn nhất, bạn xóa đi 120 thì lúc này lớn nhất là 119. Lúc này nếu ban thêm mới thì nó sẽ lấy 121 chứ không phải là 120 vì giá trị lớn nhất nó lưu trong config của table.
  • Thông thường ta sử dụng AUTO_INCREMENT cho Primary Key khi viết ứng dụng website
  • Mặc định AUTO_INCREMENT sẽ có giá trị đầu tiên là 1

Đấy là những đặc điểm của AUTO_INCREMENT. Bây giờ ta sẽ tìm hiểu các thiết lập nó nhé.

2. Tạo AUTO_INCREMENT

Để tạo AUTO_INCREMENT thì ta thêm từ khóa AUTO_INCREMENT đằng sau field muốn tạo trong lệnh tạo bảng (Create Table). Thông thường chúng ta dùng cho khóa chính nên trong các ví dụ dưới đây tôi sử dụng cho field

ALTER TABLE Users AUTO_INCREMENT = 1000
5.a thêm từ khóa AUTO_INCREMENT đằng sau field muốn tạo trong lệnh tạo bảng (Create Table). Thông thường chúng ta dùng cho khóa chính nên trong các ví dụ dưới đây tôi sử dụng cho field
ALTER TABLE Users AUTO_INCREMENT = 1000
5.

Bài viết này được đăng tại [free tuts .net]

CREATE TABLE Users(
	id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(50) NOT NULL UNIQUE,
	email VARCHAR (50) NOT NULL UNIQUE
)

3. Thay đổi giá trị AUTO_INCREMENT

Như bạn biết mặc định AUTO_INCREMENT sẽ có giá trị đầu tiên là 1. Nhưng đôi lúc bạn muốn giá trị đầu tiên của nó là một con số khác thì bạn sẽ sử dụng lênh

ALTER TABLE Users AUTO_INCREMENT = 1000
7 để thay đổi.

ALTER TABLE Users AUTO_INCREMENT = 1000

Sau khi chạy lệnh này thì khi bạn thêm dữ liệu nó sẽ lấy 1000 thay vì 1 như cấu hình mặc định ban đầu.1000 thay vì 1 như cấu hình mặc định ban đầu.

Lưu ý: Nếu số bạn chọn nhỏ hơn số max của auto thì sẽ không có tác dụng. Ví dụ field ID hiện tại max là 1000 nhưng bạn thay đổi thông số auto 400 thì sẽ không có tác dụng.: Nếu số bạn chọn nhỏ hơn số max của auto thì sẽ không có tác dụng. Ví dụ field ID hiện tại max là 1000 nhưng bạn thay đổi thông số auto 400 thì sẽ không có tác dụng.

4. Lời kết

Khi phân tích dữ liệu bạn nên chọn khóa chính là auto increment, thứ nhất là nó truy vấn nhanh và thứ hai là khi thêm dữ liệu bạn không cần phải truyền giá trị cho khóa chính vì nó đã tăng tự động. Bài này kết thúc tại đây, bài tiếp theo mình sẽ nói về khóa ngoại (foreign key).

Khóa học Excel online - Tuyệt đỉnh Excel - Trở thành bậc thầy Excel trong 16 giờ

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 dữ liệu đượ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 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 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.

Hướng dẫn auto_increment mysql - auto_increment mysql

Khóa chính phải là duy nhất vì nó xác định duy nhất 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 dữ liệu trước khi thêm dữ liệu. Điều này có thể hoạt động tốt nhưng cách làm rất phức tạp . Để tránh sự phức tạp như vậy và để đảm bảo rằng khóa chính luôn 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ị có dấu và không dấu. Các kiểu dữ liệu không dấu chỉ có thể chứa các số dương. Tốt nhất, nên xác định dữ liệu 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 ví dụ sau.

 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 dữ liệu. 

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 lần thêm mới

Hãy xem 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 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 Thriller Null
8 Thriller Null

Thriller

 INSERT INTO  `categories` (`category_name`) VALUES ('Cartoons'); 

Action

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 Thriller Null
8 Thriller Null
9 Thriller Null

Thriller

Action

 SELECT LAST_INSERT_ID(); 

Romantic Comedy

Hướng dẫn auto_increment mysql - auto_increment mysql

Bây giờ chúng ta hãy chèn một danh mục mới vào bảng danh mục.

  • Việc thực thi đoạn script trên đối với myflixdb trong MySQL cho chúng ta các kết quả sau được hiển thị bên dưới.
  • Cartoons
  • Lưu ý chúng ta không cần thêm id danh mục. MySQL tự động tạo nó cho chúng ta vì id danh mục được xác định là tăng tự động.
  • Nếu bạn muốn dùng MySQL để tạo id được chèn ở cuối cùng, bạn có thể sử dụng hàm LAST_INSERT_ID để làm điều đó. Cú pháp như hình bên dưới
  • Chạy tập lệnh trên sẽ cho số tăng tự động đến cuối cùng . Kết quả sẽ được như sau:
  • Tóm lược
  • Để trình tự động tăng bắt đầu với một giá trị khác, hãy sử dụng AUTO_INCREMENT = 10