Loại bảng này sử dụng API libmysql để truy cập bảng hoặc chế độ xem MySQL hoặc MariaDB. Bảng này phải được tạo trên máy chủ hiện tại hoặc trên một máy chủ cục bộ hoặc từ xa khác. Điều này tương tự như những gì công cụ lưu trữ FederatedX cung cấp với một số khác biệt
Hiện tại, cú pháp giống như Liên kết có thể được sử dụng để tạo một bảng như vậy, chẳng hạn
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL connection='mysql://root@localhost/test/people';
Chuỗi kết nối có thể có cùng cú pháp với cú pháp được sử dụng bởi LIÊN KẾT, bao gồm tham chiếu đến máy chủ được liên kết, nhưng cũng có thể được kết hợp với các tùy chọn tiêu chuẩn CONNECT. Ví dụ
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people connection='mysql://root@localhost';
Cú pháp CONNECT thuần túy [không dùng nữa] cũng được chấp nhận
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people option_list='user=root,host=localhost';
Các mục kết nối cụ thể là
- - Khi máy chủ được chỉ định là “localhost”, kết nối được thiết lập trên Linux bằng cách sử dụng ổ cắm Linux. Trên Windows, kết nối được thiết lập theo mặc định bằng bộ nhớ dùng chung nếu nó được bật. Nếu không, giao thức TCP được sử dụng. Một cách khác là chỉ định máy chủ lưu trữ là “. ” để sử dụng kết nối đường ống có tên [nếu được bật]. Điều này cho phép sử dụng các loại bảng này với mạng bỏ qua máy chủ
thận trọng. Cẩn thận không tham khảo bảng MYSQL để tránh vòng lặp vô hạn
Bảng MYSQL có thể tham chiếu đến máy chủ hiện tại cũng như máy chủ khác. Chẳng hạn, các lượt xem có thể được giới thiệu theo tên hoặc trực tiếp đưa ra định nghĩa nguồn
create table grp engine=connect table_type=mysql CONNECTION='mysql://root@localhost/test/people' SRCDEF='select title, count[*] as cnt from employees group by title';
Khi được chỉ định, các cột của bảng mysql phải tồn tại trong bảng được truy cập có cùng tên, nhưng chỉ có thể là một tập hợp con của chúng và được chỉ định theo một thứ tự khác. Loại của chúng phải là loại được CONNECT hỗ trợ và nếu nó không giống với loại của cột khớp với bảng được truy cập, thì có thể thực hiện chuyển đổi theo các quy tắc được đưa ra trong
Ghi chú. Đối với các cột dễ bị nhắm mục tiêu bởi mệnh đề where, hãy đảm bảo loại cột tương thích với loại cột của bảng nguồn [số hoặc ký tự] để diễn đạt chính xác mệnh đề where
Nếu bạn không muốn hạn chế hoặc thay đổi định nghĩa cột, đừng cung cấp nó và để CONNECT lấy định nghĩa cột từ máy chủ từ xa. Ví dụ
create table essai engine=CONNECT table_type=MYSQL connection='mysql://root@localhost/test/people';
Thao tác này sẽ tạo bảng tiểu luận có cùng cột với bảng người. Nếu bảng mục tiêu chứa các cột loại không tương thích CONNECT, hãy xem để biết cách chuyển đổi hoặc bỏ qua các cột này
Khi truy cập bảng từ xa, CONNECT đặt bộ ký tự kết nối được đặt thành bộ ký tự bảng cục bộ mặc định như công cụ LIÊN KẾT thực hiện
Không chỉ định bộ ký tự cột nếu nó khác với bộ ký tự mặc định của bảng ngay cả khi đó là trường hợp trên bảng từ xa. Điều này là do cột từ xa được dịch sang bộ ký tự bảng cục bộ khi đọc nó. Đây là mặc định nhưng nó có thể được sửa đổi bằng cách cài đặt biến của máy chủ mục tiêu. Nếu nó phải giữ cài đặt của nó, chẳng hạn như UTF8 khi chứa các ký tự Unicode, hãy chỉ định bộ ký tự mặc định cục bộ cho bộ ký tự của nó
Điều này có nghĩa là không thể truy xuất chính xác một bảng từ xa nếu nó chứa các cột có các bộ ký tự khác nhau. Một giải pháp là truy xuất nó bằng một số bảng cục bộ, mỗi bảng chỉ truy cập các cột có cùng bộ ký tự
Lập chỉ mục các bảng MYSQL
Các chỉ mục hiếm khi hữu ích với các bảng MYSQL. Điều này là do CONNECT cố gắng chỉ truy cập vào các hàng được yêu cầu. Ví dụ nếu bạn hỏi
select * from essai where num = 23;
MariaDB cho đến 10. 1. 1
Cho đến 10. 1. 1, MariaDB yêu cầu biến được đặt trên toàn cầu như sau.
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people connection='mysql://root@localhost';5. Mặt khác, CONNECT không thể lấy mệnh đề WHERE của truy vấn
CONNECT sẽ xây dựng và gửi đến máy chủ truy vấn
SELECT num, line FROM people WHERE num = 23
Nếu bảng người được lập chỉ mục trên num, việc lập chỉ mục sẽ được sử dụng trên máy chủ từ xa. Điều này, trong mọi trường hợp, sẽ giới hạn lượng dữ liệu truy xuất trên mạng
Tuy nhiên, một chỉ mục có thể được chỉ định cho các cột dễ được sử dụng để nối một bảng khác với bảng MYSQL. Ví dụ
________số 8_______Nếu cột id của bảng từ xa được xử lý bởi bảng cnc_tab MYSQL được lập chỉ mục [điều này có thể xảy ra nếu đó là một khóa], bạn cũng nên lập chỉ mục cột id của bảng cnc_tab MYSQL. Nếu vậy, sử dụng lập chỉ mục “từ xa” cũng như LIÊN KẾT, chỉ các hàng hữu ích của bảng từ xa sẽ được truy xuất trong quá trình tham gia. Tuy nhiên, vì các hàng này được truy xuất bằng các câu lệnh SELECT riêng biệt nên điều này sẽ chỉ hữu ích khi truy xuất một vài hàng của một bảng lớn
Cụ thể, bạn không nên chỉ định chỉ mục cho các cột không được sử dụng để nối và trên hết KHÔNG lập chỉ mục cho cột đã nối nếu nó không được lập chỉ mục trong bảng từ xa. Điều này sẽ khiến nhiều lần quét bảng từ xa để truy xuất từng hàng một
Hoạt động sửa đổi dữ liệu
Loại CONNECT MYSQL hỗ trợ CHỌN và CHÈN và một dạng CẬP NHẬT và XÓA hơi hạn chế. Chúng được mô tả dưới đây
Loại MYSQL sử dụng các phương thức tương tự như loại ODBC để thực hiện các lệnh INSERT, UPDATE và DELETE. Tham khảo chương ODBC để biết các hạn chế liên quan đến chúng
Đối với các lệnh CẬP NHẬT và XÓA, sẽ có ít hạn chế hơn vì máy chủ từ xa là máy chủ MySQL, cú pháp của lệnh sẽ luôn được máy chủ từ xa chấp nhận
Chẳng hạn, bạn có thể tự do sử dụng các từ khóa như IGNORE hoặc LOW_PRIORITY cũng như các hàm vô hướng trong mệnh đề SET và WHERE
Tuy nhiên, vẫn còn một vấn đề về báo cáo nhiều bảng. Giả sử bạn có một bảng t1 trên máy chủ từ xa và muốn thực hiện một truy vấn chẳng hạn như
update essai as x set line = [select msg from t1 where id = x.num] where num = 2;
Khi được phân tích cú pháp cục bộ, bạn sẽ gặp lỗi nếu không có bảng t1 nào tồn tại hoặc nếu nó không có các cột được tham chiếu. Khi t1 không tồn tại, bạn có thể khắc phục sự cố này bằng cách tạo một bảng t1 giả cục bộ
create table t1 [id int, msg char[1]] engine=BLACKHOLE;
Điều này sẽ làm cho trình phân tích cú pháp cục bộ hài lòng và cho phép thực thi lệnh trên máy chủ từ xa. Tuy nhiên, xin lưu ý rằng việc có một bảng MySQL cục bộ được xác định trên bảng t1 từ xa không giải quyết được vấn đề trừ khi nó cũng có tên t1 cục bộ
Đây là lý do tại sao, để cho phép tất cả các loại lệnh được thực thi bởi nguồn dữ liệu mà không có bất kỳ hạn chế nào, CONNECT cung cấp một kiểu con bảng MySQL cụ thể được mô tả ngay bây giờ
Gửi lệnh đến Máy chủ MariaDB
Điều này có thể được thực hiện như đối với các bảng ODBC bằng cách xác định một bảng cụ thể sẽ được sử dụng để gửi các lệnh và nhận kết quả thực hiện của chúng
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people connection='mysql://root@localhost';0
Các điểm chính trong câu lệnh tạo này là tùy chọn EXECSRC và định nghĩa cột
Tùy chọn EXECSRC cho biết rằng bảng này sẽ được sử dụng để gửi các lệnh đến máy chủ MariaDB. Hầu hết các lệnh đã gửi không trả về tập kết quả. Do đó, các cột trong bảng được sử dụng để chỉ định lệnh sẽ được thực hiện và để nhận kết quả của việc thực hiện. Tên của các cột này có thể được chọn tùy ý, chức năng của chúng đến từ giá trị FLAG
Cờ=0. Lệnh thực thi [mặc định] Flag=1. Số hàng bị ảnh hưởng hoặc số cột kết quả nếu lệnh sẽ trả về một tập hợp kết quả. Cờ=2. Thông báo trả về [cuối cùng là lỗi]. Cờ=3. Số cảnh báoLàm thế nào để sử dụng bảng này và chỉ định lệnh để gửi?
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people connection='mysql://root@localhost';1
Điều này sẽ gửi lệnh được chỉ định trong mệnh đề WHERE tới nguồn dữ liệu và trả về kết quả thực thi của nó. Cú pháp của mệnh đề WHERE phải chính xác như hình trên. Ví dụ
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people connection='mysql://root@localhost';2
Lệnh này trả về
Gửi một số lệnh trong một cuộc gọi
Có thể thực hiện nhanh hơn vì sẽ chỉ có một kết nối cho tất cả chúng. Để gửi một số lệnh trong một cuộc gọi, hãy sử dụng cú pháp sau
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people connection='mysql://root@localhost';3
Khi một số lệnh được gửi, quá trình thực thi sẽ dừng ở cuối lệnh hoặc sau lệnh bị lỗi. Để tiếp tục sau n lỗi, hãy đặt tùy chọn maxerr=n [0 theo mặc định] trong danh sách tùy chọn
lưu ý 1. Có thể chỉ định tùy chọn SRCDEF khi tạo bảng EXECSRC. Nó sẽ là lệnh được gửi theo mặc định khi mệnh đề WHERE không được chỉ định
Lưu ý 2. Dấu gạch chéo ngược bên trong các lệnh phải được thoát. Dấu nháy đơn phải được thoát nếu lệnh được chỉ định giữa dấu nháy đơn và dấu ngoặc kép nếu lệnh được chỉ định giữa dấu ngoặc kép
lưu ý 3. Các lệnh đã gửi áp dụng trong cơ sở dữ liệu được chỉ định. Tuy nhiên, họ có thể giải quyết bất kỳ bảng nào trong cơ sở dữ liệu này
lưu ý 4. Hiện tại, tất cả các lệnh được thực hiện trong chế độ AUTOCOMMIT
Truy xuất Cảnh báo và Ghi chú
Nếu lệnh đã gửi gây ra cảnh báo, việc gửi lại lệnh “hiển thị cảnh báo” là vô ích vì máy chủ MariaDB được mở và đóng khi gửi lệnh. Do đó, việc nhận cảnh báo đòi hỏi một cách cụ thể [và phức tạp]
Để chỉ ra rằng văn bản cảnh báo phải được thêm vào kết quả trả về, bạn phải gửi một truy vấn nhiều lệnh chứa các lệnh “giả” không được gửi đến máy chủ mà được bảng EXECSRC diễn giải trực tiếp. Các lệnh “giả” này là
Cảnh báoĐể nhận cảnh báoLưu ýĐể nhận ghi chúLỗiĐể nhận lỗi được trả về dưới dạng cảnh báo [?]Lưu ý rằng chúng phải được đánh vần [không phân biệt chữ hoa chữ thường] chính xác như trên, không có chữ “s” cuối cùng. Ví dụ
create table essai [ num integer[4] not null, line char[15] not null] engine=CONNECT table_type=MYSQL dbname=test tabname=people connection='mysql://root@localhost';4
Điều này có thể trả lại một cái gì đó như thế này
Việc thực thi tiếp tục sau khi lệnh bị lỗi do tùy chọn MAXERR. Thông thường điều này sẽ dừng việc thực hiện
Tất nhiên, lệnh “select” cuối cùng là vô dụng ở đây vì nó không thể trả về bảng chứa. Thay vào đó, nên sử dụng một bảng MYSQL khác không có tùy chọn EXECSRC và với định nghĩa cột phù hợp
Hạn chế của công cụ kết nối
Loại dữ liệu
Có một khóa tối đa. độ dài chỉ mục là 255 byte. Bạn có thể khai báo bảng mà không có chỉ mục và dựa vào điều kiện kéo xuống của động cơ và lược đồ từ xa
Các loại sau đây không thể được sử dụng
Ghi chú. VĂN BẢN được cho phép. Tuy nhiên, việc xử lý phụ thuộc vào các giá trị được cung cấp cho các biến hệ thống và và theo mặc định, không cho phép chuyển đổi các cột TEXT
Giới hạn SQL
Các truy vấn SQL sau không được hỗ trợ
KẾT NỐI MYSQL so với LIÊN KẾT
Loại bảng CONNECT MYSQL không nên được coi là sự thay thế cho công cụ LIÊN KẾT [X]. Công dụng chính của loại MYSQL là truy cập các bảng công cụ khác như thể chúng là các bảng CONNECT. Điều này là cần thiết khi truy cập các bảng từ một số loại bảng CONNECT chẳng hạn như TBL, XCOL, OCCUR hoặc PIVOT được thiết kế để chỉ truy cập các bảng CONNECT. Khi bảng mục tiêu của chúng không phải là bảng CONNECT, các loại này đang âm thầm sử dụng bên trong bảng MYSQL trung gian
Tuy nhiên, có những trường hợp bạn có thể tự mình sử dụng các bảng MYSQL CONNECT
- Khi bảng sẽ được sử dụng bởi bảng TBL. Điều này cho phép bạn chỉ định các tham số kết nối cho từng bảng phụ và hiệu quả hơn so với việc sử dụng bảng phụ LIÊN KẾT cục bộ
- Khi dữ liệu trả về mong muốn được chỉ định trực tiếp bởi tùy chọn SRCDEF. Điều này thật tuyệt khi để máy chủ từ xa thực hiện hầu hết công việc, chẳng hạn như nhóm và/hoặc nối các bảng. Điều này không thể thực hiện được với động cơ LIÊN KẾT
- Để tận dụng cơ sở push_cond thêm mệnh đề where vào lệnh được gửi tới bảng từ xa. Điều này hạn chế kích thước của tập kết quả và có thể rất quan trọng đối với các bảng lớn
- Đối với các bảng có tùy chọn EXECSRC trên
- Khi làm bài kiểm tra. Ví dụ để kiểm tra một chuỗi kết nối
Nếu bạn cần cập nhật, xóa hoặc chèn nhiều bảng trên một bảng từ xa, bạn có thể sử dụng công cụ LIÊN KẾT hoặc bảng “gửi” chỉ định tùy chọn EXECSRC trên