ユーザーがアンケートを作成する PHP スクリプトと、DB に受信データを格納するためのスクリプト テーブルがあります。このサイトはしばらく稼働しており、データベースには約 100 のテーブルがあります。
私のスクリプトにはひどく欠陥がありました!本当に「テキスト」が必要な場所に「小さなテキスト」フィールドが必要です。すべての tinytext 列をテキストに一括更新する方法はありますか?
ありがとう!
tinytext
これを行う 1 つの方法は、指定されたデータベース内のすべての列を見つけてからALTER TABLE
、各列のステートメントを作成することです。ストアド プロシージャを使用した作業ソリューション:
DELIMITER $$
DROP PROCEDURE IF EXISTS `BULK_RETYPE` $$
CREATE PROCEDURE `BULK_RETYPE`(IN SCHEMA_NAME VARCHAR(255), IN FROM_TYPE VARCHAR(255), IN TO_TYPE VARCHAR(255))
BEGIN
DECLARE `done` INT DEFAULT FALSE;
DECLARE tn VARCHAR(255);
DECLARE fn VARCHAR(255);
DECLARE `cur1` CURSOR FOR
SELECT
`TABLE_NAME`,
`COLUMN_NAME`
FROM
`information_schema`.`COLUMNS`
WHERE
`DATA_TYPE` = FROM_TYPE AND `TABLE_SCHEMA` = SCHEMA_NAME;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO `tn`, `fn`;
IF done THEN
LEAVE read_loop;
END IF;
SET @ALTER_SQL = CONCAT('ALTER TABLE ', '`', tn,'`' , ' MODIFY ', '`', fn,'`' , ' ', TO_TYPE);
PREPARE stmt1 FROM @ALTER_SQL;
EXECUTE stmt1;
END LOOP;
CLOSE cur1;
END $$
DELIMITER ;
CALL BULK_RETYPE('test', 'tinytext', 'text');
スキーマから選択するだけで、一括変更用の SQL を準備できます
SELECT table_scheme, table_name, columun_name FROM information_schema.`COLUMNS`
WHERE DATA_TYPE='tinyint'