Hướng dẫn what is on duplicate key update in mysql? - cập nhật khóa trùng lặp trong mysql là gì?
Show 13.2.6.2 & nbsp; chèn ... về câu lệnh cập nhật khóa trùng lặpNếu bạn chỉ định một mệnh đề 1 và một hàng được chèn sẽ gây ra giá trị trùng lặp trong chỉ số 2 hoặc 3, một 4 của hàng cũ xảy ra. Ví dụ: nếu cột 5 được khai báo là 2 và chứa giá trị 7, hai câu sau đây có hiệu ứng tương tự:
Các hiệu ứng không hoàn toàn giống nhau: đối với bảng 8 trong đó 5 là cột tự động, câu lệnh 0 làm tăng giá trị tự động tăng nhưng 4 thì không.Nếu cột 2 cũng là duy nhất, 0 tương đương với câu lệnh 4 này: thay vào đó:
Nếu 5 khớp với một số hàng, chỉ có một hàng được cập nhật. Nói chung, bạn nên cố gắng tránh sử dụng mệnh đề 1 trên các bảng có nhiều chỉ mục duy nhất.one row is updated. In general, you should try to avoid using an 1 clause on tables with multiple unique indexes. Với 1, giá trị hàng bị ảnh hưởng trên mỗi hàng là 1 nếu hàng được chèn dưới dạng hàng mới, 2 nếu một hàng hiện tại được cập nhật và 0 nếu một hàng hiện tại được đặt thành các giá trị hiện tại của nó. Nếu bạn chỉ định cờ 8 cho hàm API 9 C khi kết nối với MySQLD, giá trị hàng bị ảnh hưởng là 1 (không phải 0) nếu một hàng hiện tại được đặt thành các giá trị hiện tại của nó.mysqld, the affected-rows value is 1 (not 0) if an existing row is set to its current values. Nếu một bảng chứa cột 0 và 1 chèn hoặc cập nhật một hàng, hàm 2 sẽ trả về giá trị 0.Điều khoản 1 có thể chứa nhiều gán cột, được phân tách bằng dấu phẩy.Trong các biểu thức giá trị gán trong mệnh đề 5, bạn có thể sử dụng hàm 6) để chỉ các giá trị cột từ phần 0 của câu lệnh 8. Nói cách khác, 6) trong mệnh đề 1 đề cập đến giá trị của 1 sẽ được chèn vào, không có xung đột nào xảy ra xung đột. Chức năng này đặc biệt hữu ích trong các chèn nhiều hàng. Hàm 2 chỉ có ý nghĩa trong Điều khoản 1 hoặc các câu lệnh 0 và trả về 5 nếu không. Thí dụ:
Tuyên bố đó giống hệt với hai câu sau:
Ghi chú Việc sử dụng 2 để tham khảo hàng mới và các cột được không dùng để bắt đầu với MySQL 8.0.20 và có thể loại bỏ trong một phiên bản tương lai của MySQL. Thay vào đó, sử dụng các bí danh hàng và cột, như được mô tả trong một vài đoạn tiếp theo của phần này.Bắt đầu với MySQL 8.0.19, có thể sử dụng bí danh cho hàng, với, tùy chọn, một hoặc nhiều cột của nó được chèn, theo điều khoản 7 hoặc 8 và trước từ khóa 9. Sử dụng bí danh hàng 0, câu lệnh được hiển thị trước đây bằng cách sử dụng 2 để truy cập các giá trị cột mới có thể được viết trong biểu mẫu hiển thị ở đây:
Ngoài ra, bạn sử dụng các bí danh cột 2, 3 và 4, bạn có thể bỏ qua bí danh hàng trong mệnh đề gán và viết cùng một câu như thế này:
Khi sử dụng các bí danh cột theo kiểu này, bạn vẫn phải sử dụng một bí danh hàng theo mệnh đề 7, ngay cả khi bạn không sử dụng trực tiếp nó trong mệnh đề gán.Bắt đầu với MySQL 8.0.20, một câu lệnh 6 sử dụng 2 trong mệnh đề 4, như câu này, đưa ra cảnh báo:
Bạn có thể loại bỏ các cảnh báo như vậy bằng cách sử dụng một trình điều khiển con thay vào đó, như thế này:
Bạn cũng có thể sử dụng các bí danh hàng và cột với mệnh đề 8, như đã đề cập trước đây. Sử dụng 8 thay vì 7 trong hai câu 2 vừa được hiển thị có thể được thực hiện như thể hiện ở đây:
Bí danh hàng không được giống như tên của bảng. Nếu các bí danh cột không được sử dụng hoặc nếu chúng giống như tên cột, chúng phải được phân biệt bằng bí danh hàng trong mệnh đề 1. Các bí danh cột phải là duy nhất liên quan đến bí danh hàng mà chúng áp dụng (nghĩa là không có bí danh cột nào đề cập đến các cột của cùng một hàng có thể giống nhau).Đối với các câu lệnh 4, các quy tắc này được áp dụng liên quan đến các biểu thức truy vấn 5 chấp nhận được mà bạn có thể tham khảo trong một điều khoản 5:
Các tham chiếu đến các cột từ 0 không được hỗ trợ. Để làm việc xung quanh hạn chế này, hãy viết lại 0 dưới dạng bảng dẫn xuất để các hàng của nó có thể được coi là một tập kết quả bảng đơn. Ví dụ: câu lệnh này tạo ra một lỗi:
Thay vào đó, hãy sử dụng một câu lệnh tương đương viết lại 0 dưới dạng bảng dẫn xuất: 0Kỹ thuật viết lại một truy vấn như một bảng dẫn xuất cũng cho phép tham chiếu đến các cột từ các truy vấn 9.Bởi vì kết quả của các câu lệnh 4 phụ thuộc vào thứ tự các hàng từ 5 và thứ tự này không thể luôn luôn được đảm bảo, có thể khi đăng nhập các câu lệnh 6 cho nguồn và bản sao để phân kỳ. Do đó, các câu lệnh 6 được gắn cờ là không an toàn cho sao chép dựa trên tuyên bố. Các câu lệnh như vậy tạo ra cảnh báo trong nhật ký lỗi khi sử dụng chế độ dựa trên câu lệnh và được ghi vào nhật ký nhị phân bằng định dạng dựa trên hàng khi sử dụng chế độ 8. Một câu lệnh 8 đối với bảng có nhiều hơn một khóa duy nhất hoặc khóa chính cũng được đánh dấu là không an toàn. (Lỗi #11765650, lỗi #58637)Xem thêm Phần & NBSP; 17.2.1.1, Ưu điểm và nhược điểm của bản sao dựa trên tuyên bố và dựa trên hàng. SQL khóa trùng lặp là gì?Chèn trên câu lệnh cập nhật khóa trùng lặp là phần mở rộng của câu lệnh chèn trong MySQL. Khi chúng tôi chỉ định mệnh đề cập nhật khóa trùng lặp ON trong câu lệnh SQL và một hàng sẽ gây ra giá trị lỗi trùng lặp trong cột chỉ mục khóa duy nhất hoặc chính, sau đó việc cập nhật hàng hiện tại xảy ra.the extension of the INSERT statement in MySQL. When we specify the ON DUPLICATE KEY UPDATE clause in a SQL statement and a row would cause duplicate error value in a UNIQUE or PRIMARY KEY index column, then updation of the existing row occurs.
Mục nhập trùng lặp có nghĩa là gì trong MySQL?Khi tạo khóa chính hoặc ràng buộc duy nhất sau khi tải dữ liệu, bạn có thể nhận được một mục nhập trùng lặp cho lỗi 'chính' chính.Nếu dữ liệu trong cơ sở dữ liệu nguồn hợp lệ và không có bất kỳ bản sao nào bạn nên kiểm tra đối chiếu nào được sử dụng trong cơ sở dữ liệu MySQL của bạn., you can get a “Duplicate entry for key 'PRIMARY'” error. If the data in the source database is valid and there are no any duplicates you should check which collation is used in your MySQL database.
Là chèn vào bản cập nhật khóa trùng lặp nguyên tử?Theo định nghĩa, tính nguyên tử yêu cầu mỗi giao dịch là tất cả hoặc không có gì.Vì vậy, có nguyên tử theo nghĩa là nếu dữ liệu mà bạn đang cố gắng chèn sẽ gây ra sự trùng lặp trong khóa chính hoặc trong chỉ mục duy nhất, câu lệnh thay vào đó sẽ thực hiện cập nhật và không lỗi.yes it is atomic in the sense that if the data that you are trying to insert will cause a duplicate in the primary key or in the unique index, the statement will instead perform an update and not error out.
Khóa trùng lặp là gì?Bản sao khóa đề cập đến quá trình tạo khóa dựa trên khóa hiện có.the process of creating a key based on an existing key. |