Pymysql SQL_MODE

Con trỏ không có bộ đệm, chủ yếu hữu ích cho các truy vấn trả về nhiều dữ liệu hoặc cho các kết nối đến máy chủ từ xa qua mạng chậm

Thay vì sao chép mọi hàng dữ liệu vào bộ đệm, thao tác này sẽ tìm nạp các hàng khi cần. Mặt trái của điều này là máy khách sử dụng ít bộ nhớ hơn và các hàng được trả về nhanh hơn nhiều khi di chuyển qua mạng chậm hoặc nếu tập kết quả rất lớn

Có những hạn chế, mặc dù. Giao thức MySQL không hỗ trợ trả về tổng số hàng, vì vậy cách duy nhất để biết có bao nhiêu hàng là lặp lại trên mỗi hàng được trả về. Ngoài ra, hiện tại không thể cuộn ngược lại vì chỉ có hàng hiện tại được lưu trong bộ nhớ

Các cách quan trọng nhất để thực hiện việc này là sử dụng SQL_MODE [được điều khiển bởi biến hệ thống] và OLD_MODE [biến hệ thống]. SQL_MODE được sử dụng để khiến MariaDB mô phỏng hành vi từ các máy chủ SQL khác, trong khi OLD_MODE được sử dụng để mô phỏng hành vi từ các phiên bản MariaDB hoặc MySQL cũ hơn

SQL_MODElà một chuỗi có các tùy chọn khác nhau được phân tách bằng dấu phẩy ['

SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';
1'] không có dấu cách. Các tùy chọn không phân biệt chữ hoa chữ thường

Bạn có thể kiểm tra giá trị cục bộ và toàn cầu của nó bằng

SELECT @@SQL_MODE, @@GLOBAL.SQL_MODE;

Đặt SQL_MODE

Mặc định

Bạn có thể đặt SQL_MODE từ dòng lệnh [tùy chọn

SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';
3] hoặc bằng cách đặt biến hệ thống

SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';

Giá trị phiên chỉ ảnh hưởng đến máy khách hiện tại và có thể được thay đổi bởi máy khách khi được yêu cầu. Để đặt giá trị toàn cầu, cần có đặc quyền SUPER và thay đổi này ảnh hưởng đến bất kỳ máy khách nào kết nối từ thời điểm đó trở đi

Giá trị SQL_MODE

Các giá trị SQL_MODE khác nhau là

Cho phép bất kỳ ngày nào trong khoảng từ 1-31 trong phần ngày. Điều này tiện lợi khi bạn muốn đọc tất cả [kể cả dữ liệu sai] vào cơ sở dữ liệu rồi thao tác trên đó

ANSI

Thay đổi cú pháp SQL để gần với ANSI SQL hơn

bộ. , , ,

Nó cũng thêm một hạn chế. một lỗi sẽ được trả về nếu truy vấn con sử dụng hàm tổng hợp có tham chiếu đến một cột từ truy vấn bên ngoài theo cách không thể giải quyết được

Nếu được đặt, đầu ra SHOW CREATE TABLE sẽ không hiển thị các thuộc tính bảng dành riêng cho MariaDB

ANSI_QUOTES

Thay đổi

SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';
5 để được coi là
SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';
6, ký tự trích dẫn định danh. Điều này có thể phá vỡ các ứng dụng MariaDB cũ giả định rằng
SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';
5 được sử dụng làm ký tự trích dẫn chuỗi

DB2

Giống như. , , , , , , , , , , , , , , , , , , , , , , , ,

Nếu được đặt, đầu ra SHOW CREATE TABLE sẽ không hiển thị các thuộc tính bảng dành riêng cho MariaDB

EMPTY_STRING_IS_NULL

Tùy chọn tương thích với Oracle dịch Item_string được tạo trong trình phân tích cú pháp thành Item_null và dịch ràng buộc một chuỗi trống dưới dạng tham số câu lệnh đã chuẩn bị thành ràng buộc NULL. Ví dụ:

SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';
8 trả về TRUE,
SET sql_mode = 'modes';
SET GLOBAL sql_mode = 'modes';
9 chèn NULL. Kể từ MariaDB 10. 3. 3

ERROR_FOR_DIVISION_BY_ZERO

Nếu không được đặt, phép chia cho 0 trả về NULL. Nếu set trả về lỗi nếu một người cố cập nhật một cột bằng 1/0 và cũng trả về cảnh báo. Xem thêm MDEV-8319. Mặc định kể từ MariaDB 10. 2. 4

CAO_NOT_PRECEDENCE

Tùy chọn tương thích cho MySQL 5. 0. 1 trở về trước;

Nếu điều này được đặt, hãy tạo cảnh báo [không phải lỗi] cho tùy chọn bảng sai trong CREATE TABLE. Ngoài ra, kể từ 10. 0. 13, không nhận xét các tùy chọn bảng sai này trong SHOW CREATE TABLE

Cho phép một người có khoảng trắng [bao gồm ký tự tab và ký tự dòng mới] giữa tên hàm và '['. Hạn chế là điều này khiến các hàm tích hợp trở thành các từ dành riêng

MAXDB

Giống như. , , , , , , ,

Cũng có tác dụng chuyển đổi âm thầm các trường DẤU THỜI GIAN thành các trường DATETIME khi được tạo hoặc sửa đổi

Nếu được đặt, đầu ra SHOW CREATE TABLE sẽ không hiển thị các thuộc tính bảng dành riêng cho MariaDB

MSSQL

Ngoài ra ngụ ý như sau. , , , , , , , , , ,

Ngoài ra từ MariaDB 10. 4. 5, triển khai một tập hợp con giới hạn ngôn ngữ của Microsoft SQL Server. Xem SQL_MODE=MSSQL để biết thêm

Nếu được đặt, đầu ra SHOW CREATE TABLE sẽ không hiển thị các thuộc tính bảng dành riêng cho MariaDB

MYSQL323

Giống như. ,

MYSQL40

Giống như. ,

NO_AUTO_CREATE_USER

Không tự động tạo người dùng bằng

SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
2 trừ khi thông tin xác thực được chỉ định. Nếu không có gì được cung cấp, sẽ tạo ra lỗi 1133. "Không thể tìm thấy bất kỳ hàng phù hợp nào trong bảng người dùng". Mặc định kể từ MariaDB 10. 1. 7

NO_AUTO_VALUE_ON_ZERO

Nếu được đặt, không tạo AUTO_INCREMENT khi INSERT bằng 0 trong cột

SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
3 hoặc khi thêm thuộc tính AUTO_INCREMENT bằng câu lệnh ALTER TABLE. Thông thường, cả
SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
4 và
SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
5 đều tạo ra các giá trị
SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
3 mới

NO_BACKSLASH_ESCAPES

Vô hiệu hóa việc sử dụng ký tự gạch chéo ngược

SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
7 làm ký tự thoát trong chuỗi, làm cho ký tự này tương đương với ký tự thông thường

NO_DIR_IN_CREATE

Bỏ qua tất cả các lệnh INDEX DIRECTORY và DATA DIRECTORY khi tạo bảng. Có thể hữu ích trên các máy chủ sao chép nô lệ

NO_ENGINE_SUBSTITUTION

Nếu không được đặt, nếu công cụ lưu trữ khả dụng được chỉ định bởi CREATE TABLE không khả dụng, một cảnh báo sẽ được đưa ra và công cụ lưu trữ mặc định được sử dụng thay thế. Nếu được đặt, sẽ tạo ra lỗi 1286 khi tạo bảng nếu công cụ lưu trữ được chỉ định không khả dụng. Xem thêm. Mặc định kể từ MariaDB 10. 1. 7

NO_FIELD_OPTIONS

Xóa các tùy chọn cột dành riêng cho MariaDB khỏi đầu ra của SHOW CREATE TABLE. Điều này cũng được sử dụng bởi chế độ di động của mariadb-dump/mysqldump

NO_KEY_OPTIONS

Xóa các tùy chọn chỉ mục dành riêng cho MariaDB khỏi đầu ra của SHOW CREATE TABLE. Điều này cũng được sử dụng bởi chế độ di động của mariadb-dump/mysqldump

NO_TABLE_OPTIONS

Xóa các tùy chọn bảng dành riêng cho MariaDB khỏi đầu ra của SHOW CREATE TABLE. Điều này cũng được sử dụng bởi chế độ di động của mariadb-dump/mysqldump

NO_UNSIGNED_SUBTRACTION

Khi được bật, kết quả phép trừ được ký ngay cả khi toán hạng không được ký

Không cho phép '0000-00-00' làm ngày hợp lệ ở chế độ nghiêm ngặt [tạo ra lỗi 1525]. Có thể chèn ngày không bằng IGNORE. Nếu không ở chế độ nghiêm ngặt, một cảnh báo sẽ được tạo

Không cho phép những ngày mà năm khác 0 nhưng phần tháng hoặc ngày của ngày lại bằng 0 [tạo ra lỗi 1525]. Ví dụ: với bộ này, '0000-00-00' được cho phép nhưng '1970-00-10' hoặc '1929-01-00' thì không. Nếu tùy chọn bỏ qua được sử dụng, MariaDB sẽ chèn '0000-00-00' cho các loại ngày đó. Nếu không ở chế độ nghiêm ngặt, thay vào đó, một cảnh báo sẽ được tạo

CHỈ_FULL_GROUP_BY

Đối với các truy vấn, không cho phép CHỌN các cột không được tham chiếu trong mệnh đề GROUP BY, trừ khi chúng được chuyển đến một hàm tổng hợp như COUNT[] hoặc MAX[]. Tạo lỗi 1055

ORACLE

Trong tất cả các phiên bản của MariaDB cho đến MariaDB 10. 2, bộ này

SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
8 tương đương với. , , , , , , , , , , , , , , , , , , , , , , , ,

Từ MariaDB 10. 3, chế độ này cũng đặt và định cấu hình máy chủ để hiểu một tập hợp con lớn ngôn ngữ PL/SQL của Oracle thay vì cú pháp truyền thống của MariaDB cho các thường trình được lưu trữ. Xem SQL_MODE=ORACLE Từ MariaDB 10. 3

Nếu được đặt, đầu ra SHOW CREATE TABLE sẽ không hiển thị các thuộc tính bảng dành riêng cho MariaDB

PAD_CHAR_TO_FULL_LENGTH

Dấu cách trong các cột CHAR theo mặc định được cắt bớt khi truy xuất. Khi PAD_CHAR_TO_FULL_LENGTH được bật, không có sự cắt xén nào xảy ra. Không áp dụng cho VARCHAR

Cho phép sử dụng ký tự ống [ASCII 124] làm toán tử nối chuỗi. Điều này có nghĩa là

SELECT REPLACE[@@SQL_MODE, ',', '\n'];
+-------------------------------------------------------------------------+
| REPLACE[@@SQL_MODE, ',', '\n']                                          |
+-------------------------------------------------------------------------+
| STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------+
9 có thể được sử dụng thay cho
SET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];
0

POSTGRESQL

Giống như. , , , , , , , , , , , , , , , , , , , , , , , ,

Nếu được đặt, đầu ra SHOW CREATE TABLE sẽ không hiển thị các thuộc tính bảng dành riêng cho MariaDB

REAL_AS_FLOAT

SET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];
1 là từ đồng nghĩa với FLOAT chứ không phải DOUBLE

SIMULTANEOUS_ASSIGNMENT

Cài đặt này làm cho phần SET của câu lệnh CẬP NHẬT đánh giá tất cả các phép gán đồng thời, không phải từ trái sang phải. Từ MariaDB 10. 3. 5

STRICT_ALL_TABLES

Chế độ nghiêm ngặt. Các báo cáo có dữ liệu không hợp lệ hoặc bị thiếu sẽ bị hủy bỏ và khôi phục. Đối với công cụ lưu trữ phi giao dịch có câu lệnh ảnh hưởng đến nhiều hàng, điều này có thể có nghĩa là chèn hoặc cập nhật một phần nếu tìm thấy lỗi ở hàng ngoài hàng đầu tiên

STRICT_TRANS_TABLES

Chế độ nghiêm ngặt. Các câu lệnh có dữ liệu không hợp lệ hoặc bị thiếu sẽ bị hủy bỏ và khôi phục, ngoại trừ đối với các công cụ lưu trữ phi giao dịch và các câu lệnh ảnh hưởng đến nhiều hàng trong đó dữ liệu không hợp lệ hoặc bị thiếu không phải là hàng đầu tiên, MariaDB sẽ chuyển đổi giá trị không hợp lệ thành giá trị hợp lệ gần nhất hoặc . Mặc định kể từ MariaDB 10. 2. 4

Khi chế độ này không được đặt, MariaDB sẽ cắt bớt giây phân số khi thay đổi độ chính xác thành nhỏ hơn. Khi được đặt, MariaDB sẽ làm tròn khi chuyển đổi sang TIME, DATETIME và TIMESTAMP và cắt ngắn khi chuyển đổi sang NGÀY. Kể từ MariaDB 10. 4. 1

TRUYỀN THỐNG

Làm cho MariaDB hoạt động giống như một máy chủ SQL truyền thống. Giống như. , , , , , , , , , , , , , , , , , , , , , , , ,

chế độ nghiêm ngặt

Chế độ có ít nhất một trong số

SET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];
2 hoặc
SET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];
3 được bật được gọi là chế độ nghiêm ngặt

Với chế độ nghiêm ngặt được đặt [mặc định từ MariaDB 10. 2. 4], các câu lệnh sửa đổi bảng [giao dịch cho

SET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];
2 hoặc tất cả cho
SET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];
3] sẽ không thành công và thay vào đó sẽ trả về một lỗi. Từ khóa IGNORE có thể được sử dụng khi chế độ nghiêm ngặt được đặt để chuyển lỗi thành cảnh báo

Với chế độ nghiêm ngặt không được đặt [mặc định trong phiên bản

Chủ Đề