mysql - 这个 INSERT 配置文件可以与我的面向 Mysql InnoDB 的数据库一起使用吗?

标签 mysql innodb insert-statement

我想知道以下主题(关于 Mysql 上的 INSERT - InnoDB 表)。

我有一个系统,除其他系统外还有 2 件事

  1. 向用户宣传简报
  2. 向特定类型的用户群发电子邮件

现在,用户将增长到 4k,据说会增长到 40k

当我群发电子邮件时,我在 WHILE 中为每个用户 id 执行插入操作(循环遍历所有用户)。

我有两个问题:

  1. 这是最好的方法吗?
  2. 当用户达到 40K(40.000 个用户)时,mysql-server 会支持吗?

谢谢,

这是我正在使用的一段代码

    $query_write_mass = "SELECT id FROM mya_users ORDER by artist_real_address ASC";
    $result_write_mass = $db->prepare($query_write_mass);
    $result_write_mass->execute();
    while ( list($receiver_id) = $result_write_mass->fetch(PDO::FETCH_BOTH) ) { 

       $stmt = $db->prepare
         ("INSERT INTO inbox(folder_id, sender_id, sender_type, receiver_id, 
           receiver_type, title, message_body, time, date, flag, spam) 
           VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

            $stmt->bindValue(1, 0, PDO::PARAM_INT);
            $stmt->bindValue(2, 0, PDO::PARAM_INT);
            $stmt->bindValue(3, 'x', PDO::PARAM_STR);
            $stmt->bindValue(4, $receiver_id, PDO::PARAM_INT);
            $stmt->bindValue(5, $receiver_type, PDO::PARAM_STR);
            $stmt->bindValue(6, $_POST['title'], PDO::PARAM_STR);
            $stmt->bindValue(7, $_POST['body'], PDO::PARAM_STR);
            $stmt->bindValue(8, date("G:i:s"), PDO::PARAM_STR);
            $stmt->bindValue(9, date("Y-m-d"), PDO::PARAM_STR);
            $stmt->bindValue(10, 'n', PDO::PARAM_STR);
            $stmt->bindValue(11, '', PDO::PARAM_STR);                                                                                                                                                                                                   

            $stmt->execute();   
     }

这是用于我的内部电子邮件系统的群发电子邮件。

更新

你可以在我的另一篇文章中找到这个问题的一个很好的答案(已解决)@

multiple INSERTS and keeping PDO prepared statement security

最佳答案

1) 否。如果可以,一次插入多行:

INSERT INTO t VALUES (1, 'something'), (2, 'something else')...

如果您为所有用户插入一条类似的记录,更好的方法是:

INSERT INTO t
SELECT 
    "something to insert for all users into t's column 1",
    "something to insert for all users into t's column 2",
    user.field1,
    user.field2
FROM user
-- WHERE some_condition_on_user_table

2) 是的,除非你继续 while 循环(但即便如此,它也可能会起作用)

关于mysql - 这个 INSERT 配置文件可以与我的面向 Mysql InnoDB 的数据库一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18090165/

相关文章:

mysql - 在 Laravel 查询生成器中使用括号

php - 将包含多个数组的数组放入mysql表中

mysql - SQL 选择更新

mysql - 即使我禁用了外键,为什么我还是收到 `deleting from reference tables`

mysql - 插入重复键 - 跳过自动递增 ID

mysql 更改 innodb_large_prefix

mysql - 如何在 InnoDB 中不回收 auto_increment ID

sql-server-ce - SQL Server Compact 4.0 在 INSERT 语句上阻塞