私は著者と書籍として2つのテーブルを持っています。著者テーブルからブックテーブルにデータを挿入したいと思います。 挿入が成功すると、作成者テーブルのデータが削除されます。成功しなかった場合、データは作成者テーブルから削除されません。 私はロールバックを使用したいが、ここで著者と書籍は異なるサーバーの2つの異なるデータベースである。 ビルド関数はphpとmysqlに存在しています。ロールバックのphp-mysql代替機能
1
A
答えて
0
まず挿入著者テーブルからすべての行データが
delete from database2.author where id in (select id from database1.book);
0
トランザクションが単一の「データベース」内に隔離されている帳テーブルに挿入された場合、IDフィールドを使用して確認し、次に表
insert into database1.book (fields_BookTable)
select fields_aAuthor_inBookTable from database2.author
を予約します。
実際に行うべきことは、両方のデータベースを使用するために単一のデータベース接続を使用することです。
「データベース」は、他のサーバーの「カタログ」または「スキーマ」によく似ています。アクセス許可と同じ接続内の別のデータベースのテーブルを使用できます。 PHP(未テスト)を介して取引を管理するための
:
$objConnect = mysql_connect("localhost","root","root") or die(mysql_error());
$objDB = mysql_select_db("mydatabase");
//*** Start Transaction ***//
mysql_query("BEGIN");
$query = "query1 comes here...";
if(mysql_query($query)) {
// Commit Transaction
mysql_query("COMMIT");
echo "Save Done.";
}
else {
// RollBack Transaction
mysql_query("ROLLBACK");
echo "Error Save [".$strSQL."]";
}
mysql_close($objConnect);
そして、このチェック:mysql
拡張と数値PK列を想定し、PHPによって制御http://dev.mysql.com/doc/refman/5.0/en/commit.html
+0
ここでは、データベースは2つの異なるサーバー – salma
0
溶液(NBますでしょうたとえば、2つの異なるサーバーがある場合など、トランザクション内で絶対にラップできない場合にのみ実行します。
// Server connections
$srcConn = mysql_connect('somewhere', 'user', 'pass');
$dstConn = mysql_connect('elsewhere', 'user', 'pass');
// Fetch data to move into an array
$query = "
SELECT *
FROM `srcdb`.`table`
";
$result = mysql_query($query, $srcConn);
$data = array();
while ($row = mysql_fetch_assoc($result)) $data[] = $row;
mysql_free_result($result);
// Rows to handle per cycle
// A larger number reduces the number queries, but you need to respect the MySQL
// max_allowed_packet and it will also increase PHP memory usage
$rowsPerCycle = 100;
// Name of the primary key column
$pKName = 'id';
// This will hold the column names in the right order, without the PK
// You could make the list static if you know what it will be
// You may also need to keep the PK value
$colNames = array();
foreach ($data[0] as $colName => $val) {
if ($colName != $pKName) { // Remove me if you need to keep the PK values
$colNames[] = $colName;
}
}
// Keep looping while $data still has some elements
while ($data) {
// Remove $rowsPerCycle elements from the beginning of $data
$cycleData = array_splice($data, 0, $rowsPerCycle);
// This array holds a list of the primary keys we are migrating
$cycleIds = array();
// Build the base query
$query = "
INSERT INTO `destdb`.`table`
(`".implode("`, `", $colNames)."`)
VALUES
";
// Loop the rows and append them to the query (after escaping them, of course...)
foreach ($cycleData as $row) {
$cycleIds[] = $row[$pKName];
unset($row[$pKName]); // Remove me if you need to keep the PK values
$query .= "\n('" . implode("', '", array_map('mysql_real_escape_string', $row, array_fill(0, count($row), $dstConn)) . "'),";
}
// Do the insert
if (!mysql_query($query, $dstConn)) {
// Handle insert errors here
trigger_error('MySQL Error: '.mysql_error($dstConn).'; Query: '.$query);
}
// Do the delete
$query = "
DELETE FROM `srcdb`.`table`
WHERE `$pKName` IN (".implode(', ', $cycleIds).")
";
if (!mysql_query($query, $srcConn)) {
// Handle insert errors here
trigger_error('MySQL Error: '.mysql_error($srcConn).'; Query: '.$query);
}
}
関連する問題
- 1. "$(document).ready"の代替機能
- 2. スリープ機能の代替品
- 3. msdeployロールバック機能
- 4. PostgreSQLの機能TEMP TABLEの代替ソリューション
- 5. Chrome拡張機能の代替アップデートサーバー
- 6. ロールバック機能の実装方法は?
- 7. jQuery Typewatch - 代替機能または同じ機能を作成する方法
- 8. StackOverFlow例外、私の機能のための代替?
- 9. Windows 7用のApache POIの代替機能
- 10. フレンド関数の定義とstdの代替ブースト機能が
- 11. C#でロールバックが機能しない
- 12. マングイドとうまく機能するFormtasticの代替品
- 13. asp:ListViewの代替機能がありますか?
- 14. F#のarray2Dに代わるより機能的な代替手段
- 15. JavascriptとPHPMySQL
- 16. PHPmySqlのログインWebサイトプログラミング
- 17. セッションとログインphpmysql help
- 18. XmlDataDocumentとXslTransformの非推奨の代替機能は何ですか?
- 19. のNoSQL FREE代替(代替ravendbする)
- 20. ajaxリフレッシュの代替コンポーネント代替
- 21. SpringのプログラムJdbcトランザクションのロールバックが機能しない
- 22. なぜこのPDOロールバックが機能しないのですか?
- 23. PHPのnl2brが機能しません(代替案もありません)
- 24. Nunitの[ロールバック]機能はどこですか?
- 25. JPAトランザクションのロールバックが機能していません
- 26. ALTER TABLE後にMySQLシェルのロールバックが機能しない
- 27. Google Chrome拡張機能:機能の切り替え
- 28. 代替
- 29. 代替
- 30. 代替
2つのデータベースはどちらもInnoDBですか? – biziclop
あなたはこれまでどんなコードを書いていますか?私たちがあなたを助けることができるようにコードを示してください。 –
yes.twoデータベースは両方ともInnoDB – salma