Hướng dẫn mysql update top 100 - mysql cập nhật top 100
13.2.13 & NBSP; Tuyên bố cập nhật
2 là một câu lệnh DML sửa đổi các hàng trong bảng.Một câu lệnh 2 có thể bắt đầu với mệnh đề 4 để xác định các biểu thức bảng phổ biến có thể truy cập trong 2. Xem phần & nbsp; 13.2.15, với (biểu thức bảng phổ biến).Cú pháp đơn bàn:
Cú pháp nhiều bàn:
Đối với cú pháp bảng đơn, câu lệnh 2 cập nhật các cột của các hàng hiện có trong bảng được đặt tên với các giá trị mới. Điều khoản 7 chỉ ra cột nào cần sửa đổi và các giá trị chúng nên được đưa ra. Mỗi giá trị có thể được đưa ra dưới dạng biểu thức hoặc từ khóa 8 để đặt một cột một cách rõ ràng thành giá trị mặc định của nó. Điều khoản 9, nếu được đưa ra, chỉ định các điều kiện xác định các hàng nào sẽ cập nhật. Không có mệnh đề 9, tất cả các hàng được cập nhật. Nếu mệnh đề 1 được chỉ định, các hàng được cập nhật theo thứ tự được chỉ định. Điều khoản 2 đặt giới hạn về số lượng hàng có thể được cập nhật.Đối với cú pháp nhiều bảng, 2 Cập nhật các hàng trong mỗi bảng có tên trong 4 đáp ứng các điều kiện. Mỗi hàng phù hợp được cập nhật một lần, ngay cả khi nó phù hợp với các điều kiện nhiều lần. Đối với cú pháp nhiều bảng, không thể sử dụng 1 và 2.Đối với các bảng được phân vùng, cả hai hình thức đơn và nhiều bảng của câu lệnh này đều hỗ trợ việc sử dụng mệnh đề 7 như một phần của tham chiếu bảng. Tùy chọn này lấy một danh sách một hoặc nhiều phân vùng hoặc các phần phụ (hoặc cả hai). Chỉ các phân vùng (hoặc các phần phụ) được liệt kê mới được kiểm tra các trận đấu và một hàng không có trong bất kỳ phân vùng hoặc phân vùng nào không được cập nhật, cho dù nó có thỏa mãn 8 hay không.Ghi chú Không giống như trường hợp khi sử dụng 7 với câu lệnh 0 hoặc 1, một câu lệnh 2 có giá trị khác được coi là thành công ngay cả khi không có hàng trong các phân vùng được liệt kê (hoặc phân nhóm) khớp với 8.Để biết thêm thông tin và ví dụ, xem Phần & NBSP; 24.5, Lựa chọn phân vùng.
8 là một biểu thức đánh giá đúng cho mỗi hàng được cập nhật. Đối với cú pháp biểu thức, xem phần & nbsp; 9.5, biểu thức của Hồi giáo.
4 và 8 được chỉ định như được mô tả trong Phần & NBSP; 13.2.10, Tuyên bố chọn.Bạn chỉ cần đặc quyền 2 cho các cột được tham chiếu trong một 2 thực sự được cập nhật. Bạn chỉ cần đặc quyền 9 cho bất kỳ cột nào được đọc nhưng không được sửa đổi.Câu lệnh 2 hỗ trợ các công cụ sửa đổi sau:
Các câu lệnh 7, bao gồm cả những câu nói có mệnh đề 1, được gắn cờ là không an toàn cho sao chép dựa trên tuyên bố. (Điều này là do thứ tự các hàng được cập nhật xác định các hàng nào bị bỏ qua.) cách thức. .Nếu bạn truy cập một cột từ bảng để được cập nhật trong một biểu thức, 2 sử dụng giá trị hiện tại của cột. Ví dụ: câu lệnh sau đặt 1 thành một so với giá trị hiện tại của nó:
Bài tập thứ hai trong câu lệnh sau đặt 2 cho giá trị hiện tại (cập nhật) 1, không phải là giá trị 1 gốc. Kết quả là 1 và 2 có cùng giá trị. Hành vi này khác với SQL tiêu chuẩn.
Bài tập 2 bảng đơn thường được đánh giá từ trái sang phải. Đối với các bản cập nhật nhiều bảng, không có gì đảm bảo rằng các bài tập được thực hiện theo bất kỳ thứ tự cụ thể nào.Nếu bạn đặt một cột thành giá trị hiện tại, MySQL sẽ thông báo điều này và không cập nhật nó. Nếu bạn cập nhật một cột đã được khai báo 8 bằng cách đặt thành 9, xảy ra lỗi nếu chế độ SQL nghiêm ngặt được bật; Mặt khác, cột được đặt thành giá trị mặc định ngầm cho kiểu dữ liệu cột và số lượng cảnh báo được tăng lên. Giá trị mặc định ngầm là 0 cho các loại số, chuỗi trống ( 1) cho các loại chuỗi và giá trị Zero Zero đối với các loại ngày và thời gian. Xem Phần & NBSP; 11.6, Kiểu dữ liệu Giá trị mặc định.“zero” value for date and time types. See
Section 11.6,
“Data Type Default Values”. Nếu một cột được tạo được cập nhật rõ ràng, giá trị được phép duy nhất là 8. Để biết thông tin về các cột được tạo, xem Phần & NBSP; 13.1.20.8, Bảng Tạo bảng và các cột được tạo.
2 Trả về số lượng hàng thực sự đã thay đổi. Hàm API 4 C trả về số lượng hàng được khớp và cập nhật và số lượng cảnh báo xảy ra trong 2.Bạn có thể sử dụng 6 để hạn chế phạm vi của 2. Một điều khoản 2 là một hạn chế phù hợp với hàng. Tuyên bố dừng lại ngay khi nó tìm thấy 9 các hàng thỏa mãn mệnh đề 9, cho dù chúng có thực sự được thay đổi hay không.Nếu một câu lệnh 2 bao gồm một mệnh đề 1, các hàng được cập nhật theo thứ tự được chỉ định bởi mệnh đề. Điều này có thể hữu ích trong các tình huống nhất định có thể dẫn đến lỗi. Giả sử rằng bảng 3 chứa cột 4 có chỉ mục duy nhất. Câu lệnh sau đây có thể thất bại với lỗi khóa trùng lặp, tùy thuộc vào thứ tự các hàng được cập nhật:
Ví dụ: nếu bảng chứa 1 và 2 trong cột 4 và 1 được cập nhật lên 2 trước khi 2 được cập nhật lên 3, xảy ra lỗi. Để tránh vấn đề này, hãy thêm một mệnh đề 1 để gây ra các hàng có giá trị 4 lớn hơn được cập nhật trước những giá trị có giá trị nhỏ hơn:
Bạn cũng có thể thực hiện các hoạt động 2 bao gồm nhiều bảng. Tuy nhiên, bạn không thể sử dụng 1 hoặc 2 với 2 nhiều bảng. Điều khoản 4 liệt kê các bảng liên quan đến tham gia. Cú pháp của nó được mô tả trong Phần & NBSP; 13.2.10.2, Điều khoản tham gia. Đây là một ví dụ:
Ví dụ trước cho thấy một lần nối bên trong sử dụng toán tử dấu phẩy, nhưng các câu lệnh 2 nhiều bảng có thể sử dụng bất kỳ loại tham gia nào được phép trong các câu lệnh 9, chẳng hạn như 5.Nếu bạn sử dụng câu lệnh 2 nhiều bảng liên quan đến các bảng 7 có các ràng buộc chính của nước ngoài, trình tối ưu hóa MySQL có thể xử lý các bảng theo thứ tự khác với mối quan hệ cha mẹ/trẻ em của họ. Trong trường hợp này, tuyên bố thất bại và quay trở lại. Thay vào đó, hãy cập nhật một bảng duy nhất và dựa vào các khả năng 8 mà 7 cung cấp để khiến các bảng khác được sửa đổi phù hợp. Xem Phần & NBSP; 13.1.20.5, các ràng buộc khóa nước ngoài.Bạn không thể cập nhật một bảng và chọn trực tiếp từ cùng một bảng trong một truy vấn con. Bạn có thể làm việc xung quanh điều này bằng cách sử dụng bản cập nhật nhiều bàn trong đó một trong các bảng có nguồn gốc từ bảng mà bạn thực sự muốn cập nhật và đề cập đến bảng dẫn xuất bằng bí danh. Giả sử bạn muốn cập nhật một bảng có tên 0 được xác định bằng cách sử dụng câu lệnh được hiển thị ở đây:
Để giảm giá bán lẻ của bất kỳ mặt hàng nào mà đánh dấu là 30% hoặc lớn hơn và trong số đó bạn có ít hơn một trăm trong kho, bạn có thể cố gắng sử dụng một câu lệnh 2 như cái sau, sử dụng một truy vấn con trong 9 mệnh đề. Như được hiển thị ở đây, tuyên bố này không hoạt động:
Thay vào đó, bạn có thể sử dụng bản cập nhật nhiều bảng trong đó trình điều khiển con được chuyển vào danh sách các bảng sẽ được cập nhật, sử dụng bí danh để tham khảo nó trong mệnh đề 9 ngoài cùng, như thế này:
Bởi vì trình tối ưu hóa cố gắng hợp nhất bảng dẫn xuất 4 vào khối truy vấn ngoài cùng, điều này chỉ hoạt động nếu bạn buộc vật chất hóa bảng dẫn xuất. Bạn có thể thực hiện điều này bằng cách đặt cờ 5 của biến hệ thống 6 thành 7 trước khi chạy bản cập nhật hoặc bằng cách sử dụng gợi ý của trình tối ưu hóa 8, như được hiển thị ở đây: 0Ưu điểm của việc sử dụng gợi ý của trình tối ưu hóa trong trường hợp như vậy là nó chỉ áp dụng trong khối truy vấn nơi nó được sử dụng, do đó không cần thiết phải thay đổi giá trị của 6 một lần nữa sau khi thực hiện 2.Một khả năng khác là viết lại trình điều khiển con để nó không sử dụng 01 hoặc 02, như thế này: 1Trong trường hợp này, truy vấn con được thực hiện theo mặc định thay vì được hợp nhất, do đó không cần thiết phải vô hiệu hóa việc hợp nhất bảng dẫn xuất. |