0

走り方を知っている

RENAME TABLE onetable_test TO onetable;

しかし、多くのテーブルの名前をパターンで変更し、多くのコードを書かない方法はありますか

RENAME TABLE onetable_test TO onetable;
RENAME TABLE twotable_test TO twitable;
RENAME TABLE threetable_test TO threetable;    
...

私はmysqlを使用しています。

ありがとう!

4

4 に答える 4

4

以下のストアド プロシージャを使用::

DELIMITER $$

作成

PROCEDURE `Rename_Tables`()

BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName VARCHAR(50);
DECLARE newTableName VARCHAR(70);
DECLARE t_query VARCHAR(500);
DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_name LIKE '%table_test' AND table_schema='test' ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur1;

read_loop: LOOP
    FETCH cur1 INTO tableName;
    IF done THEN
        LEAVE read_loop;
    END IF;
    SET newTableName = SUBSTRING(tableName, 1,LOCATE('_',tableName)-1);
    SET t_query = CONCAT('RENAME TABLE ', tableName, ' TO ', newTableName);

    SET @myQuery = t_query;
    PREPARE stmt FROM @myQuery;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END LOOP;

END$$

区切り文字;

table_schema を実際の table_schema 名に置き換えます。

于 2012-07-25T06:27:43.597 に答える
0

例えば:

select group_concat(v.name SEPARATOR ' ') 
from (
      select concat('rename table ', t.table_name, ' to ', substring(reverse(v.name), instr(reverse(v.name), '_') + 1, length(v.name)) name 
      from information_schema.tables t
      where 
          table_schema = 'put_your_table_schema'
          and table_name like '%_test'
     ) v;
  1. このクエリを実行すると、テーブルの名前を変更するために実行する必要があるスクリプトが返されます。
  2. substring(reverse.....)文字列の末尾にある出現箇所のみreplace(v.name, '_test', '')を確実に置換する必要があるため、単純に使用するのではなく使用します。_test

それが役に立てば幸い

于 2012-07-25T06:17:08.167 に答える
0

@ravnurの答えを少し修正:

SET group_concat_max_len=5000;
SELECT group_concat(v.name separator '; ')
FROM (
    SELECT concat('RENAME TABLE ', t.table_name, ' TO ', replace(t.table_name, 'wp_', 'blog_')) name
    FROM information_schema.tables t
    WHERE table_name like 'wp_%'
) v;

WordPress テーブルの名前をデフォルトのプレフィックスwp_からblog_(たとえば) に変更する場合に便利です。そのコマンドの出力をコピーして、mysql シェルまたは phpMyAdmin に貼り付けます。

于 2016-09-16T00:21:38.887 に答える