이 글에서는 주로 mysql의 데이터베이스 간 연결 query 방법을 소개합니다. 필요한 친구는
비즈니스 시나리오: 서로 다른 데이터베이스의 테이블을 연결하는 쿼리
예를 들어 연결될 테이블은 다음과 같습니다. : 머신 A의 데이터베이스 A에 있는 테이블 A 및 머신 B의 데이터베이스 B에 있는 테이블 B.
이 경우 "select A.id,B.id from A left Join B on ~~;"을 실행하는 것은 불가능하지만 비즈니스 요구 사항은 불변이고 데이터베이스 설계도 불변이므로 내 공 아프다. .
해결책: 머신 A의 데이터베이스 A에 테이블 B를 만듭니다. . .
물론 농담이 아니고 MySQL의 페더레이션 엔진을 기반으로 한 테이블 생성 방식을 사용하고 있습니다.
테이블 생성 문의 예:
CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]'
전제 조건: mysql은 페더레이션 엔진을 지원해야 합니다(쇼 엔진을 실행하면 지원 여부를 확인할 수 있습니다).
FEDERATED 엔진이 있지만 지원이 NO인 경우 mysql설치이 엔진이 활성화되어 있지 않다는 의미입니다. my.cnf 파일 끝으로 가서 federated 줄을 추가하세요.
전혀 작동하지 않는 경우 FEDERATED 라인이 없다면 mysql에 이 엔진이 설치되어 있지 않다는 의미이므로 즐겁게 플레이할 수 없다는 뜻입니다. 완료하려면 다음 작업이 비교적 크고 어떻게 해야 할지 모르겠습니다.
설명: FEDERATED 엔진을 통해 생성된 테이블에는 로컬 테이블 정의 파일만 있고 데이터 파일은 원격에 존재합니다. 이 엔진을 통해 Oracle의 DBLINK와 유사한 원격 데이터 액세스 기능을 구현할 수 있습니다. 즉, 이 테이블 생성 방법은 데이터베이스 A에 테이블 B의 테이블 구조 파일만 생성합니다. 테이블의 index, 데이터 및 기타 파일은 여전히 머신 B의 데이터베이스 B에 있으며 이는 단지 생성하는 것과 같습니다. 데이터베이스 A에 있습니다. 테이블 B에 대한 바로가기입니다.
결과적으로 계란은 더 이상 아프지 않습니다. .
몇 가지 참고 사항:
1. 로컬 테이블 구조는 원격 테이블 구조와 정확히 동일해야 합니다.
2. 현재 원격 데이터베이스는 MySQL로 제한되어 있습니다
3. 트랜잭션은 지원되지 않습니다
4. 테이블 구조 수정은 지원되지 않습니다
다른 네티즌의 추가 의견:
CREATE TABLE IF NOT EXISTS `logintoken` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` char(1) NOT NULL DEFAULT '0', `loginName` varchar(20) DEFAULT NULL, `token` varchar(2000) DEFAULT NULL, `tokenExpiredTime` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE =FEDERATED CONNECTION='mysql://root:root@192.168.5.102:3306/zysso/logintoken';
원격 5.12의 logintoken 테이블을 사용하려면 5.12
에서는 FEDERATED를 직접 활성화할 필요가 없습니다.위 내용은 MySQL의 데이터베이스 간 관련 쿼리 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!