Có dự định không, thậm chí INSERT. ON DUPLICATE KEY UPDATE tăng AUTO_INCREMENT. Và ON DUPLICATE KEY không cung cấp khóa được thực hiện mặc dù LAST_INSERT_ID? Show
Đã thử nghiệm với MariaDB 10. 5. 10 last_insert_id chỉ trả về giá trị được chèn cuối cùng được dự định. Nhấn "BẬT CẬP NHẬT KHÓA DUPLICATE" không được tính là một lần chèn, vì vậy trả về giá trị được sử dụng trong lần chèn thành công cuối cùng trong những trường hợp như thế này có thể chứa các giá trị bị thiếu. Một phần của kiến trúc giúp phân bổ giá trị auto_increment dễ dàng hơn trước khi phát hiện ra sự trùng lặp xảy ra Bình luậnNội dung được sao chép trên trang web này là tài sản của chủ sở hữu tương ứng và nội dung này không được MariaDB xem xét trước. Quan điểm, thông tin và ý kiến được thể hiện bởi nội dung này không nhất thiết đại diện cho quan điểm của MariaDB hoặc bất kỳ bên nào khác auto_increment là thuộc tính mặc định tự động tăng bản ghi mới thêm 1. Số bắt đầu có thể được thay đổi với sự trợ giúp của lệnh thay đổi Đầu tiên, một bảng được tạo với sự trợ giúp của lệnh chèn. Điều này được đưa ra như sau - mysql> CREATE table AutoIncrementTable -> ( -> id int auto_increment, -> name varchar(200), -> Primary key(id) -> ); Query OK, 0 rows affected (0.70 sec) Sau khi tạo bảng, các bản ghi được chèn vào bảng với sự trợ giúp của lệnh chèn Điều này được đưa ra như sau - mysql> INSERT into AutoIncrementTable(name) values('Carol'); Query OK, 1 row affected (0.19 sec) mysql> INSERT into AutoIncrementTable(name) values('Bob'); Query OK, 1 row affected (0.15 sec) mysql> INSERT into AutoIncrementTable(name) values('John'); Query OK, 1 row affected (0.18 sec) Bây giờ, các bản ghi trong bảng có thể được nhìn thấy với sự trợ giúp của lệnh select. Điều này được đưa ra như sau - mysql> SELECT * from AutoIncrementTable; Đầu ra thu được từ truy vấn trên được đưa ra dưới đây - +----+-------+ | id | name | +----+-------+ | 1 | Carol | | 2 | Bob | | 3 | John | +----+-------+ 3 rows in set (0.00 sec) Bây giờ, ba bản ghi đã được chèn vào bảng và id được tăng thêm 1 mỗi lần. Bây giờ, phần Tăng tự động đã được thay đổi để id của bản ghi tiếp theo bắt đầu từ 1000 Cú pháp thay đổi auto_increment như sau alter table yourTableName auto_increment=startingNumber; Cú pháp trên được sử dụng để thay đổi auto_increment bằng 1000. Điều này được hiển thị dưới đây - mysql> alter table AutoIncrementTable auto_increment = 1000; Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0 Sau khi thay đổi thành công số gia tự động, nhiều bản ghi hơn sẽ được chèn vào bảng. Điều này được hiển thị dưới đây - mysql> INSERT into AutoIncrementTable(name) values('Taylor'); Query OK, 1 row affected (0.12 sec) mysql> INSERT into AutoIncrementTable(name) values('Sam'); Query OK, 1 row affected (0.17 sec) Bây giờ, các bản ghi bảng được xem bằng cách sử dụng câu lệnh chọn. Có thể thấy số ghi thứ 4 bắt đầu từ 1000 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), thì rất có thể bạn cần làm việc với 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 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à
Trong 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 có thông báo khácĐể bắt đầu, hãy tạo một bảng. Cú pháp cơ bản
Khi đượ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ư
Một lần nữa—một lần cuối cùng—đả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ị bắt đầu và giá trị gia tăng 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 0 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 0 tùy chỉnh bằng cách sử dụng
Ghi 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ư
Sau đó, 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 là 0 như vậy
Mỗ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à
Nếu bạn chỉ muốn thay đổi giá trị bắt đầu của ID của mình (chứ không phải giá trị gia tăng), bạn chỉ cần sử dụng 5 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 6 để đặ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
Trong 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 năm 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 8 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 trong tương laiĐể 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 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 Để 3 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 0Lưu ý rằng, trong các ví dụ trên, bạn không cần phải đề cập hoặc 3 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 ( 7) 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à những gì khách hàng sẽ thấy trên trang web của mỗi sản phẩm, những gì họ có thể tham khảo khi gặp sự cố và trả lại cũng như những gì 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 1Đ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 năm cho mỗi giá trị mới, đồng thời tạo một cột mới— 7—với loại dữ liệu 3 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ự nối tiếp của các trường 4 và 7 2Mã 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ó một ID duy nhất trên toàn cầu- 7-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
Máy chủ SQL
Thay đổi số gia được sử dụng bởi số gia tự động trong truy vấn SQLPostgreSQL
Sau đó chèn chuỗi này vào bảng chính của bạn 7Hoặc, nếu bạn chỉ muốn thay đổi giá trị ban đầu của ID 0mysql 2Máy chủ SQL
Thê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) 1Sau đó 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ự động gia 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 Làm cách nào để cập nhật id tăng tự động trong MySQL?Trong MySQL, bộ đếm tăng tự động bắt đầu từ 0 theo mặc định, nhưng nếu bạn muốn tăng tự động bắt đầu từ một số khác, hãy sử dụng cú pháp bên dưới. ALTER TABLE yourTable auto_increment=yourIntegerNumber; Để hiểu cú pháp trên, trước tiên chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau.
Làm cách nào để tự động tạo id trong MySQL?MySQL có từ khóa AUTO_INCREMENT để thực hiện tăng tự động. Giá trị bắt đầu cho AUTO_INCREMENT là 1, là giá trị mặc định. Nó sẽ tăng thêm 1 cho mỗi bản ghi mới. Để lấy id tăng tự động tiếp theo trong MySQL, chúng ta có thể sử dụng hàm last_insert_id() từ MySQL hoặc auto_increment với SELECT .
Làm cách nào để nhận giá trị gia tăng tự động trong MySQL?Có thể đạt được giá trị của cột sử dụng AUTO_INCREMENT sau câu lệnh INSERT theo một số cách khác nhau. Để lấy giá trị ngay sau INSERT , sử dụng truy vấn SELECT với hàm LAST_INSERT_ID() .
Làm cách nào để tự động tăng số id bằng các chữ cái và số trong MySQL?6 câu trả lời . lấy ID cuối cùng [KP-0001] xóa một số ký tự và đặt nó vào một biến [KP-] chuyển đổi phần còn lại thành số vì nó là một chuỗi [0001] tăng thêm 1 [1 + 1 = 2] chuyển đổi nó trở lại chuỗi và đệm số 0 ở bên phải [0002] nối biến và số mới tăng [KP-0002] lưu nó |