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_MODE
là 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ườngBạ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ọnSET sql_mode = 'modes'; SET GLOBAL sql_mode = 'modes';3] hoặc bằng cách đặt biến hệ thốngSET 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ằngSET sql_mode = 'modes'; SET GLOBAL sql_mode = 'modes';5 được sử dụng làm ký tự trích dẫn chuỗiDB2
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. 3ERROR_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. 7NO_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ớiNO_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ườngNO_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 choSET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];0POSTGRESQL
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 DOUBLESIMULTANEOUS_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ặcSET @@SQL_MODE = CONCAT[@@SQL_MODE, ',NO_ENGINE_SUBSTITUTION'];3 được bật được gọi là chế độ nghiêm ngặtVớ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ả choSET @@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áoVới chế độ nghiêm ngặt không được đặt [mặc định trong phiên bản