我们知道我们可以使用以下查询一次插入多条记录:
INSERT INTO `TABLE1` (`First`,`Last`) VALUES ('name1','surname1'),
('name2','surname2'),
('name3','surname3'),
('name4','surname4');
但是如果我们想添加 1000 条与上面类似的记录,(name*,surname*)
我们是否必须写下所有记录,或者我们可以使用通配符之类的东西呢?或者还有其他使用 mysql (phpmyadmin) 的解决方案吗?
答案1
不,您只能执行这些类型的插入:
INSERT INTO table (artist, album, track, length)
VALUES
("$artist", "$album", "$track1", "$length1"),
("$artist", "$album", "$track2", "$length2"),
("$artist", "$album", "$track3", "$length3"),
("$artist", "$album", "$track4", "$length4"),
("$artist", "$album", "$track5", "$length5");
但是您始终可以编写一个脚本,使用您想要的任何正则表达式生成上述内容。然后,该脚本将负责将正则表达式扩展为适当的上面INSERT ...
,然后运行它。
正则表达式运算符
您可以尝试提前生成模式,或者作为VALUES
使用的命令内容的一部分REGEXP
。
您可以在子句中多次使用它,WHERE
如下所示:
SELECT col1, col2, ..., coln
FROM products
WHERE sku REGEXP '^[A-Za-z]{2,4}-[0-9]{3}-[0-9]{2}$'
您可以在 MySQL 网站上阅读有关此运算符的更多信息正则表达式文档,但我从未见过它以这种方式使用,也从未想过自己尝试一下。我发现这个 SO Q&A 中提到的命令标题为:调整正则表达式以与 MySQL 一起使用。
参考
答案2
正如其他答案所述,你不能,但如果你使用 PHP+PDO 并且准备好的陈述,当机器生成时,您可以使用多个不同的参数重用您的语句缓存您的陈述来优化整个过程。更不用说它会处理scaping之类的事情了。代码可能看起来像这样(PHP):
$DBH = new PDO("mysql:dbname=pdo;host=localhost", "username", "password" );
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STMT = $DBH->prepare("INSERT INTO `table` (`col1`, `col2`) VALUES (?,?)");
// Let's say $array is an array of 1000+ different elements
foreach ($array as $value) {
$STMT->bindParam(1, $value); // You just need to bind the params and execute
$STMT->bindParam(2, $value); // the statement for every record.
$STMT->execute();
}
$DBH = NULL;
另外,我建议你使用管理员,它的界面更干净,维护/更新更简单(它只是一个包含整个应用程序的 PHP 文件)。更不用说phpmyadmin已经不再开发了(Adminer是phpmyadmin的现在和未来)。