Cột liên kết MySQL với một bảng khác

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áo

Là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

  1. 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ộ
  2. 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
  3. Để 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
  4. Đối với các bảng có tùy chọn EXECSRC trên
  5. 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

Làm cách nào để nối hai cột của các bảng khác nhau trong MySQL?

Mệnh đề SỬ DỤNG . Bảng 1. id = bảng2. id VÀ bảng1. trạng thái = bảng2. This join combines table1 with table2 when two columns that both tables share [ id and state ] each have matching values. table1.id = table2.id AND table1. state = table2.

Làm cách nào để liên kết các bảng trong cơ sở dữ liệu MySQL?

Để tạo một bảng được liên kết. .
Mở cơ sở dữ liệu Access mà bạn muốn liên kết với MySQL
Trên tab Dữ liệu Ngoài, chọn Cơ sở dữ liệu ODBC. .
Trong hộp thoại Lấy dữ liệu ngoài xuất hiện, hãy chọn Liên kết với nguồn dữ liệu bằng cách tạo bảng được liên kết, rồi bấm OK

Điều gì đại diện cho một liên kết giữa cột trong hai bảng khác nhau?

Mối quan hệ hoạt động bằng cách khớp dữ liệu trong các cột chính, thường là các cột [hoặc trường] có cùng tên trong cả hai bảng. Trong hầu hết các trường hợp, mối quan hệ kết nối khóa chính hoặc cột định danh duy nhất cho mỗi hàng, từ một bảng đến một trường trong bảng khác.

Làm cách nào để thêm một cột vào bảng từ một bảng khác trong MySQL?

Cách thêm cột vào bảng bằng câu lệnh ADD COLUMN của MySQL .
Đầu tiên, bạn chỉ định tên bảng sau mệnh đề ALTER TABLE
Thứ hai, bạn đặt cột mới và định nghĩa của nó sau mệnh đề THÊM CỘT. .
Thứ ba, MySQL cho phép bạn thêm cột mới làm cột đầu tiên của bảng bằng cách chỉ định từ khóa FIRST

Chủ Đề