2

ライブ(ホスト)DBと開発(ローカル)DBの両方に存在するテーブルがあります。たくさんのレコードをライブテーブルに入れたいです。

私がやってきたことは次のとおりです。

  1. phpMyAdminを使用して、ライブテーブルのコピーを開発DBにエクスポート/インポートします。
  2. Cバッチファイルを使用して、新しいデータをdevテーブルにロードします。
  3. 再度phpMyAdminを使用して、更新されたdevテーブルのコピーをライブDBにエクスポート/インポートします。

これは、それが進む限り、すべて正常に機能します。

問題は次のとおりです。ライブテーブルでレコードが削除されている場合、手順1ではそのレコードがdevテーブルから削除されません([テーブルをファイルに置き換える]オプションを選択した場合でも)。次に、このレコードはステップ3でライブテーブルに再作成されます。

私の質問:ステップ1でインポートする前に、(もちろんバックアップした後)devテーブルを切り捨てる必要がありますか?インポートにより、devテーブルの自動インクリメントがライブテーブルと同じポイントに設定されますか?それとも私は物事をひどく詰め込もうとしていますか?

ありがとう。

編集:これが表です。(フォーマットを改善することはできません。申し訳ありません。)

列-タイプ-NULL-デフォルト

cnum smallint(6)いいえ
unum smallint(6)いいえ1
cat_subject smallint(2)いいえ0
cat_major smallint(2)いいえ0
cat_minor smallint(2)いいえ0
cat_flavour char(1)はいNULL
unmod varchar(255)いいえ

索引:

キー名タイプ一意の充填カラムカーディナリティ照合ヌルコメント

プライマリBTREEはいいいえcnum2214Aいいえ

4

2 に答える 2

5

MySQLでテーブルを切り捨てると、自動番号/ID列がリセットされます。スクリプトがliveからdevに自動番号を明示的に挿入しない限り、大きな問題が発生します。

あなたがいくつかのテーブル構造とコードを投稿することができれば、私はあなたにいくつかのコードでより良い答えを与えることができるでしょう。

アップデート:

自動番号とMySQLについて少し明確にするためです。次のようにテーブルを作成しましょう。

CREATE TABLE `testcust` (
 `TestCustID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(32) DEFAULT NULL,
 PRIMARY KEY (`TestCustID`)
) ENGINE=InnoDB;

次のクエリでデータを挿入した場合:

INSERT INTO `test`.`TestCust`
(`TestCustID`,
  `Name`
)
VALUES
(
  NULL,
 'Pieter'
);

そして、このテーブルでselect *を実行すると、次のようになります。

TestCustID     Name
 '1',          'Pieter'

TestCustIDを指定しなかったため、MySQlが生成します。次の挿入クエリを実行した場合:

INSERT INTO `test`.`TestCust`
 (`TestCustID`,
  `Name`
 )
 VALUES
 (
     15,
     'Pieter'
 );

そして、私が見るテーブルでselect*を実行しました

TestCustID     Name
 '1'          'Pieter'
 '15'         'Pieter'

したがって、テーブルを切り捨てると、TestCustIDが1にリセットされます(最初から開始します)。挿入ステートメントで本番/ライブシステムからの自動番号を明示的に指定した場合、挿入ステートメントで自動番号を指定しないと同期されます。同期がとれなくなります。

それがもう少し明確になることを願っています。

于 2012-05-28T11:15:24.167 に答える
1

切り捨て後そのプライマリ自動インクリメント列をエクスポート/インポートする必要はありません。残りの列をインポートするだけです。自動インクリメント列を自動的に管理します。

于 2012-05-28T11:51:41.533 に答える