请教关于 MySQL 分表的 SQL 语句如何生成比较好?
比如经常需要对 MySQL 数据库表进行分表,看如下建表 SQL:
CREATE TABLE `gift_user_log_1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`giftid` int(11) NOT NULL,
`userid` int(11) NOT NULL,
`total` int(11) NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如果需要建 50 张这样的表,岂不是复制粘贴 50 次,然后手动修改表名的序号,显然不可行,但是 PHP 框架本身没有提供数据库这方面的工具。
于是自己写个 PHP 脚本生成建表 SQL:
<?php
$sql = <<<EOF
CREATE TABLE `gift_user_log_%s` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`giftid` int(11) NOT NULL,
`userid` int(11) NOT NULL,
`total` int(11) NOT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;\r\n\r\n
EOF;
$createTableSql = '';
for($i=1; $i<=50; $i++){
$createTableSql .= sprintf($sql, $i);
}
file_put_contents('create_gift_user_log_table.sql', $createTableSql);
这样就生成了 50 个建表 SQL 的文本文件,再一次执行就好了。
但是,除此之外,大家一般建分表的时候采取什么办法?那种方式更好?
另外,在 Laravel 中如果要建大量分表,大家有没有实际经验,可以用他的 database migrate 吗?
写迁移文件里 up 方法。
或者
以上都是一次性建够所需要的表。
如果是需要动态建表,那么就写个 command 命令,按需触发。
这是我的思路 :smile: 看能帮上忙不。
@zhuzhichao 恩,如果写在 Laravel 里这样写,也想到了。我们这个项目不是 Laravel 框架,也没这种数据库迁徙工具,就只能我这样生成了,我自己都怀疑这不是最好方式
@纸牌屋弗兰克 偶尔用一次,解决问题就是好方法。 :smile: