请教关于 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 吗?
推荐文章: