Thêm AUTO_INCREMENT vào cột hiện có MySQL
Nếu bạn đang xử lý dữ liệu sản phẩm (đơn đặt hàng, tài nguyên, SKU, ứng dụng), rất có thể bạn cần làm việc với các ID tăng tự động, thường là khóa chính hoặc một phần của khóa tổng hợp. Làm cho những thứ này hoạt động có thể khá khó chịu, đặc biệt là khi bạn xem xét rằng các phương ngữ SQL chính – Postgres, MySQL và MSSQL – tất cả đều xử lý cú pháp rất khác nhau Show
Hướng dẫn này sẽ hướng dẫn cách triển khai và làm việc với các trường tăng tự động trong SQL, chạy qua cú pháp cho các phương ngữ SQL khác nhau và giải thích cách xử lý các UUID an toàn hơn nội dung
giới thiệu. trường tự động tăng và khóa chínhHãy tưởng tượng bạn đang làm việc với dữ liệu sản phẩm cho kho hàng của một nhà sản xuất và phân phối tấm pin mặt trời mới. Bạn cần tạo một 4 duy nhất cho mỗi đơn đặt hàng từ hôm nay trở đi (nghĩ. hàng nghìn đơn đặt hàng). Số vật phẩm không thể trùng lặp để phân biệt giữa từng vật phẩm trong kho của bạn. Nếu bạn đang tạo các khóa chính này dưới dạng tổng hợp các giá trị cột trong bảng, công việc của bạn có thể chậm và cồng kềnh. Bạn không cần phải chịu đựng. Có một cách tốt hơnKhi bạn sử dụng các trường tăng tự động để gán giá trị số nguyên trong cơ sở dữ liệu của mình, bạn sẽ cải thiện tính ổn định của cơ sở dữ liệu, hạn chế lỗi do thay đổi giá trị, cải thiện hiệu suất và tính đồng nhất, tăng khả năng tương thích và hợp lý hóa quá trình xác thực. Sau đó, bạn có thể sử dụng tính năng tăng tự động trong các truy vấn SQL để tự động gán các giá trị trong cột khóa chính Nói ngắn gọn. bạn làm cho cuộc sống của mình—và việc quản lý cơ sở dữ liệu—dễ dàng hơn. Trong ví dụ xuyên suốt bài viết này, bảng của bạn sẽ cần bao gồm các trường sau
Các giá trị này sẽ được sử dụng để tham chiếu các sản phẩm trong cơ sở dữ liệu nội bộ sẽ cần được lấy khi khách hàng đặt hàng Trước khi chuyển sang phần cú pháp và ví dụ của chúng tôi, chúng tôi muốn dành một phút để nói về lý do tại sao bạn nên sử dụng tính năng tăng tự động trong cơ sở dữ liệu của mình (đặc biệt là đối với các khóa chính). (Nếu bạn chỉ muốn đi vào vấn đề, hãy nhấp vào đây để chuyển xuống phần tóm tắt cú pháp. ) Sử dụng ID tăng dần tự động trong SQL mang lại rất nhiều lợi ích, chủ yếu trong số đó là tiết kiệm một chút sự tỉnh táo của bạn. Nhưng nó cũng giúp bạn
Ngoài ra, các khóa chính có thể được sử dụng trên nhiều hệ thống và trình điều khiển để hỗ trợ ánh xạ đối tượng theo hàng và các hoạt động không liên quan đến hệ thống cơ sở dữ liệu Đã nói tất cả những điều đó, việc sử dụng khóa chính được tăng tự động không phù hợp với mọi trường hợp sử dụng. Đọc về điều này trước khi thực sự nhảy vào Tạo bảng có ID tăng tự động trong truy vấn SQLNếu bạn đang bắt đầu từ đầu, bạn sẽ cần tạo một bảng trong cơ sở dữ liệu của mình được thiết lập để tự động tăng các khóa chính của nó ➞ PostgreSQL Khi tạo khóa chính tăng tự động trong Postgres, bạn sẽ cần sử dụng 9 để tạo ID duy nhất tuần tự. Bắt đầu và gia số mặc định được đặt thành 1Cú pháp cơ bản là
Khi được áp dụng cho tập dữ liệu khoảng không quảng cáo mẫu của chúng tôi, việc tạo bảng trông giống như
Bước đầu tiên này khá đơn giản. Chỉ cần đảm bảo đánh dấu cột số mặt hàng của bạn là 0➞ MySQL Tự động gia tăng trong MySQL khá giống với SQL Server, ngoại trừ việc bạn không bao gồm giá trị bắt đầu và giá trị số nguyên theo cách thủ công. Thay vào đó, bạn sử dụng từ khóa 1, có giá trị bắt đầu và gia tăng mặc định là 1Cú pháp cơ bản để tạo bảng này trong MySQL là 0Trong ví dụ của chúng tôi, đây là bảng chúng tôi muốn tạo
Giống như Postgres, bạn cần đảm bảo rằng bạn đang sử dụng từ khóa 0 cho cột mà bạn muốn tạo ID duy nhất của mình từ đó➞ Máy chủ SQL Trong SQL Server, bạn sẽ sử dụng từ khóa 3 để đặt khóa chính của mình (hoặc 4 trong trường hợp sử dụng của chúng tôi). Theo mặc định, giá trị bắt đầu của 3 là 1 và giá trị này sẽ tăng thêm 1 với mỗi mục nhập mới trừ khi bạn chỉ định khácĐể bắt đầu, hãy tạo một bảng. Cú pháp cơ bản ________số 8Khi được áp dụng cho trường hợp kiểm tra hàng tồn kho của chúng tôi, việc tạo bảng sẽ giống như 7Một lần nữa—một lần cuối—đảm bảo bao gồm 0 bên cạnh từ khóa 9, để bạn không chỉ tạo ra một danh sách các số tuần tự vô dụngBây giờ, khi bạn đã tạo khung cho bảng của mình, bạn sẽ cần quyết định xem giá trị bắt đầu và giá trị gia tăng mặc định có phù hợp với trường hợp sử dụng của mình không Đăng ký nhận bản tin Retool hàng tháng Thay đổi số gia được sử dụng bởi số gia tự động trong truy vấn SQLTrừ khi bạn đang xây dựng một ứng dụng mới từ đầu, rất có thể bạn sẽ nhập hoặc làm việc trong một tập dữ liệu hiện có. Điều này có nghĩa là bạn sẽ cần điều chỉnh điểm bắt đầu của phần tăng tự động để tính đến các giá trị hiện có (và có thể là phần tăng giữa các giá trị tùy thuộc vào quy ước đặt tên) Làm việc trong ví dụ về tập dữ liệu hàng tồn kho của chúng tôi, giả sử bạn đang di chuyển và cập nhật các bản ghi từ bản phát hành sản phẩm đầu tiên của mình sang một bảng mới trước khi thêm các sản phẩm mới và sản phẩm cải tiến. Để đơn giản, giả sử công ty của bạn tình cờ phát hành 49 mặt hàng khác nhau trong vòng đầu tiên, điều đó có nghĩa là bạn sẽ cần bắt đầu các giá trị mới của mình ở mức 50 Ngoài ra, vì bất kỳ lý do gì (không ai ghi lại điều đó), những người tiền nhiệm của bạn đã tạo ra 8 trong quá khứ với gia số năm, vì vậy bạn sẽ muốn giữ đúng ngôn ngữ bản địa và tăng thêm năm với mỗi sản phẩm mới được thêm vào. Rất may, thay đổi này rất dễ thực hiện trong (gần như) mọi DBMS➞ PostgreSQL Postgres là loại kỳ lạ ở đây. thay đổi giá trị gia tăng và giá trị bắt đầu tăng tự động trong Postgres liên quan đến từ khóa 9 và yêu cầu bạn tạo một 70 tùy chỉnh dưới dạng một bảng một hàng riêng biệt mà sau đó bạn sẽ chèn vào bảng nhân viên của mìnhĐầu tiên, tạo một 70 tùy chỉnh bằng cách sử dụng 4Ghi chú. đảm bảo rằng tên dãy này là khác biệt (i. e. không chia sẻ tên của bất kỳ bảng, trình tự, chỉ mục, dạng xem hoặc bảng nước ngoài nào khác trong lược đồ hiện tại của bạn) để tránh xung đột Trong ví dụ của chúng tôi, chúng tôi muốn item_number bắt đầu từ 50 và tăng thêm 5 với mỗi giá trị mới. Mã cho điều đó sẽ giống như 5Sau đó, bạn chèn bản ghi này vào bảng kiểm kê mà chúng ta đã tạo trước đó và đặt giá trị 4 cho mặt hàng mới này 70 như vậy 8Mỗi lần bạn thêm một giá trị vào bảng của mình (xem bên dưới), bạn sẽ cần gọi ra rằng giá trị 4 là 0Nếu bạn chỉ muốn thay đổi giá trị ban đầu của ID (chứ không phải giá trị gia tăng), bạn chỉ cần sử dụng 75 và tiết kiệm cho mình một số công việc cần làm. Cú pháp cơ bản cho điều này trông giống như 0Ví dụ của chúng tôi, điều này trông giống như 1➞ MySQL Nếu bạn đang sử dụng MySQL, bạn có thể chạy 76 để đặt các giá trị bắt đầu tăng tự động mới. Thật không may, MySQL không hỗ trợ thay đổi giá trị gia tăng mặc định, vì vậy bạn bị kẹt ở đóCú pháp cơ bản cho điều này trông giống như 2Sử dụng ví dụ về bảng khoảng không quảng cáo của chúng tôi, điều chỉnh của bạn đối với giá trị bắt đầu tăng tự động sẽ là 3Sau khi chạy mã này, các ID mặt hàng trong tương lai sẽ bắt đầu ở số_mặt_hàng là 50 và tăng thêm 1 ➞ Máy chủ SQL Để thay đổi giá trị gia tăng bắt đầu và gia số trong SQL Server, hãy đặt các giá trị không mặc định của bạn trong quá trình tạo bảng. Nhìn lại cú pháp cơ sở của chúng tôi từ phần trước ________số 8Trong ví dụ của chúng tôi, nơi chúng tôi muốn 4 bắt đầu từ 50 và tăng thêm 5 với mỗi giá trị mới, mã sẽ như sau 5Nếu bạn đang tìm cách thêm số gia tự động vào một bảng hiện có bằng cách thay đổi cột 78 hiện có thành 3, SQL Server sẽ chống lại bạn. Bạn sẽ phải
Trong trường hợp thứ hai, bạn sẽ muốn đảm bảo rằng 3 mới của mình bắt đầu ở +1 giá trị của id cuối cùng trong cột đã bỏ qua của bạn để tránh trùng lặp các khóa chính sau nàyĐể làm điều này, bạn sẽ sử dụng đoạn mã sau 6Với ví dụ của chúng tôi, điều này sẽ giống như 7Tuy nhiên, bất kể cuối cùng bạn sử dụng DBMS nào, nếu bạn đang làm theo kịch bản ví dụ của chúng tôi, kết quả đầu ra của bạn sẽ giống với bảng sau (mặc dù MySQL không hỗ trợ mức tăng không mặc định là 5). Chúng ta sẽ thêm các giá trị được thấy bên dưới trong phần tiếp theo
Thêm giá trị với tự động tăngTin vui là cú pháp để thêm giá trị bằng cách tăng tự động là giống nhau đối với 2/3 DB mà chúng ta đang thảo luận ở đây. Đúng như dự đoán, Postgres là một con vịt kỳ lạ vì nó khiến bạn đề cập đến chuỗi tùy chỉnh của mình làm giá trị cho khóa chính với mỗi mục nhập mới nếu bạn đang tăng hơn 1 Nhưng đối với hai người kia, nó khá đơn giản. Phần hay của tự động tăng trong SQL Server và MySQL là bạn có thể đặt điểm bắt đầu khóa chính của mình và quên nó đi. Không cần phải tham khảo lại và thêm giá trị đó theo cách thủ công khi chèn thông tin cho các cột khác Để 43 vào bảng tăng tự động của bạn, hãy sử dụng 8Ví dụ của chúng tôi, giả sử bạn đang thêm Bảng điều khiển năng lượng mặt trời đơn tinh thể linh hoạt 175 watt 12 Volt mới (nhân tiện, rất hay) vào hệ thống 9Sau đó vài ngày, sau khi một lô hàng lớn đến, bạn cần thêm năm sản phẩm nữa cùng một lúc. Bạn có thể cắt ngắn mọi thứ bằng cách làm như sau 00Lưu ý rằng, trong các ví dụ trên, bạn không cần phải đề cập hoặc 43 giá trị cho item_number. Đó là bởi vì tự động gia tăng khu phố thân thiện của chúng tôi đang làm điều đó cho chúng tôiĐầu ra của những bản ghi mới này vào bảng dữ liệu hàng tồn kho của bạn sẽ như thế này Tạo UUID bên ngoài cho các ứng dụng an toàn hơnCác khóa chính tăng tự động là tuyệt vời nhưng không phải lúc nào cũng là giải pháp phù hợp. Để lộ khóa chính của bạn ra bên ngoài – cho dù trong một URL khi tham chiếu hồ sơ nhân viên hoặc giữa cơ sở dữ liệu của bạn với những người khác – có thể mở hệ thống của bạn trước botnet và các lỗ hổng khác Bạn có thể tạo các DB an toàn hơn (và cải thiện tốc độ thu hồi) bằng cách sử dụng tính năng tăng tự động để tạo các khóa chính chỉ dành cho mục đích sử dụng nội bộ, riêng tư và sau đó tạo một UUID riêng cho mục đích sử dụng chung bằng cách kết hợp khóa chính của bạn với giá trị thứ hai trong bảng của bạn, . Làm điều này cho phép bạn giữ tất cả các lợi ích của việc tự động tăng cả khóa chính và ID công khai trong khi làm xáo trộn các khóa chính của bạn Đối với nhà sản xuất và đại lý bán lại bảng điều khiển năng lượng mặt trời ví dụ của chúng tôi, khóa chính của chúng tôi là id duy nhất tăng tự động của chúng tôi 4 và UUID công khai của chúng tôi ( 47) là sự kết hợp của 4 đó và 6 của chúng tôi. UUID hiển thị công khai này là thông tin mà khách hàng sẽ thấy trên trang web của mỗi sản phẩm, thông tin họ có thể tham khảo khi gặp sự cố và trả lại hàng cũng như thông tin sẽ xuất hiện trên hóa đơn đặt hàng của họ, trong khi khóa chính của chúng tôi ( 4) bị ẩn và chỉ dành riêng cho việc sử dụng cơ sở dữ liệu nội bộĐể làm điều này, mã của bạn—sử dụng ví dụ của chúng tôi và làm việc với SQL Server dưới dạng DBMS của bạn—sẽ trông như thế này 01Điều này sẽ tự động tạo một 4 duy nhất bắt đầu từ 50 và tăng thêm 5 cho mỗi giá trị mới, đồng thời tạo một cột mới— 47—với loại dữ liệu 53 sẽ đóng vai trò là một nửa UUID của chúng tôiSau đó, bạn sẽ thêm thông tin sản phẩm của mình—như chúng tôi đã làm trong các phần trước—với sự kết hợp của các trường 4 và 47 02Mã này sẽ dẫn đến đầu ra sau, giờ đây có thêm một cột cho ID mặt hàng công khai của bạn Khi bạn đã tạo các trường trên, giờ đây bạn có thể tham chiếu nội bộ thông tin sản phẩm của mình giữa các ứng dụng và cơ sở dữ liệu bằng cách sử dụng khóa chính 4, cũng như có ID duy nhất chung- 47-có thể được tham chiếu bởi khách hàng, kế toán, tóm tắt cú pháp. ID tăng tự động trong các truy vấn SQLNếu bạn ở đây chỉ để CTRL+F theo cách của bạn để tìm ra giải pháp (không phán xét), thì bạn đã đến đúng phần. Dưới đây là bảng phân tích nhanh và bẩn về cú pháp cho từng khái niệm được thảo luận ở trên Tạo bảng có ID tăng tự động trong truy vấn SQLPostgreSQL
mysql 0Máy chủ SQL ________số 8Thay đổi số gia được sử dụng bởi số gia tự động trong truy vấn SQLPostgreSQL 4Sau đó chèn chuỗi này vào bảng chính của bạn 07Hoặc, nếu bạn chỉ muốn thay đổi giá trị ban đầu của ID 0mysql 2Máy chủ SQL ________số 8Thêm giá trị bằng cách tăng tự động (Postgres, MySQL, SQL Server) 8Sử dụng tăng tự động trong các truy vấn SQL bên trong và bên ngoài (SQL Server) 01Sau đó chèn các giá trị của bạn và cập nhật các ID bên ngoài, công khai của bạn thành các giá trị được nối của bạn 3Làm cho cuộc sống của bạn dễ dàng hơn, sử dụng tính năng tăng tự động trong các truy vấn SQLSử dụng tăng tự động thường là cách tốt hơn để tạo và quản lý các giá trị trong cơ sở dữ liệu của bạn, bất kể bạn sử dụng DBMS nào. Làm như vậy hợp lý hóa việc tạo ID chính, cải thiện quản lý cơ sở dữ liệu bằng cách giảm thời gian truy xuất và tạo sự nhất quán giữa các cơ sở dữ liệu Nếu bạn đang tìm kiếm thêm trợ giúp về cú pháp SQL trong các phương ngữ, hãy xem hướng dẫn của chúng tôi về định dạng và xử lý ngày tháng trong SQL Tôi có thể thêm số gia tự động vào cột hiện có của MySQL không?Bạn có thể thêm auto_increment vào một cột trong cơ sở dữ liệu MySQL với sự trợ giúp của lệnh ALTER .
Làm cách nào để thêm số gia tự động vào cột trong SQL Server?ALTER TABLE Hàng tồn kho SỬA ĐỔI CỘT item_number INT AUTO_INCREMENT=50; . Để thay đổi giá trị gia tăng bắt đầu và gia số trong SQL Server, hãy đặt các giá trị không mặc định của bạn trong quá trình tạo bảng
Bạn có thể CHÈN vào chế độ tăng tự động không?Bạn có thể chèn vào cột tăng tự động và chỉ định giá trị . Điều này là tốt; . Nếu bạn cố gắng chèn một giá trị NULL hoặc 0 hoặc DEFAULT hoặc nếu bạn bỏ qua cột tăng tự động khỏi các cột trong câu lệnh INSERT của mình, điều này sẽ kích hoạt trình tạo tăng tự động.
Có thể đặt giá trị trường Auto_increment theo cách thủ công không?Giá trị mặc định là Có. Nếu bạn muốn gán giá trị theo cách thủ công cho trường có thuộc tính AutoIncrement được đặt thành Có, bạn phải là thành viên của bộ quyền cơ sở dữ liệu db_owner của SQL Server . |