简体   繁体   English

Mysql同行拷贝 - 同一表120次

[英]Mysql same row copy-same table 120 times

Simple mysql table: 简单的mysql表:

CREATE TABLE  `users` (
 `id` INT NOT NULL AUTO_INCREMENT ,
 `name` TEXT NOT NULL ,
 `surname` text NOT NULL ,
 `city` text NOT NULL ,
PRIMARY KEY (  `id` )
) ENGINE = MYISAM

And inserted like: 并插入如下:

INSERT INTO `users` (`id`, `name`, `surname`, `city`) VALUES (1,`rock`,`fixed`,`london`);

How can i enter same table detail of one row 100 times with different primary id? 如何使用不同的主ID进行100次相同的表格详细信息?

with php you can do it this way: 使用php你可以这样做:

for($i=0; $i< 119; $i++)
{
     //execute your query here, do not include your id column
     INSERT INTO `users` (`name`, `surname`, `city`)   
     VALUES   (`rock`,`fixed`,`london`);
 }  

OR 要么
You can also do it with a mysql store procedure like: 您也可以使用mysql存储过程来执行此操作,例如:

//Loop stored procedure

DELIMITER $$
DROP PROCEDURE IF EXISTS test$$
CREATE PROCEDURE test()
BEGIN
 DECLARE count INT DEFAULT 0;
 WHILE count < 119 DO
      INSERT INTO `users` (`name`, `surname`, `city`)   
      VALUES   (`rock`,`fixed`,`london`);
   SET count = count + 1;
 END WHILE;
END$$
DELIMITER ;

execute the stored procedure 执行存储过程

call test();

EDIT BASED ON COMMENTS: 基于评论的编辑:
Your code is not working because you are executing your query "outside" the loop, you code should look like this: 您的代码无效,因为您在循环“外部”执行查询,您的代码应如下所示:

<?php 

*/here mysql connection 
for($x=0; $x<100; $x++) 
{ 
   $sql =INSERT INTO users (name, surname, city) 
          VALUES (rock,fixed,london); 
   $status = $conn->query($sql);
} 

if ($status) 
{  echo "New record created successfully"; }
else { echo "Error: " . $sql . "<br>" . $conn->error; } 
$conn->close(); 
?>

try the following code 尝试以下代码

for ($i=0; $i<= 119; $i++){
      //exclude id and do auto increament and primary key
       $qry = "INSERT INTO `users` (`name`, `surname`, `city`) VALUES (`rock`,`fixed`,`london`)";
}

Doing it as a single SQL statement with no loop:- 将它作为没有循环的单个SQL语句来执行: -

INSERT INTO `users` (`id`, `name`, `surname`, `city`) VALUES (1,`rock`,`fixed`,`london`);
SELECT NULL, `rock`, `fixed`, `london`
FROM
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) units
CROSS JOIN
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11
) tens

The 2 sub queries just return ranges of numbers. 2个子查询只返回数字范围。 With 10 in one and 12 in the other when cross joined they will return in total 120 rows. 当交叉连接时,10合1和12在另一个中,它们将总共返回120行。 Those 120 rows are just your fixed values, but with NULL for the id which the auto increment will sort out into a unique value. 那120行只是你的固定值,但id为NULL,自动增量将整理成唯一值。

Note that you can do larger ranges like this. 请注意,您可以像这样做更大的范围。 For example if you wanted to insert 653 rows (just a fairly random choice of number):- 例如,如果你想插入653行(只是一个相当随机的数字选择): -

SELECT NULL, `rock`, `fixed`, `london`
FROM
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) units
CROSS JOIN
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) tens
CROSS JOIN
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) hundreds
WHERE (units.aCnt + 10 * tens.aCnt + 100 * hundreds.aCnt) < 653

Or specifying the id field as the calculated value:- 或者将id字段指定为计算值: -

SELECT 1 + units.aCnt + 10 * tens.aCnt + 100 * hundreds.aCnt, `rock`, `fixed`, `london`
FROM
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) units
CROSS JOIN
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) tens
CROSS JOIN
(
    SELECT 0 AS aCnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
) hundreds
WHERE (units.aCnt + 10 * tens.aCnt + 100 * hundreds.aCnt) < 653

Since the id has the property AUTO_INCREMENT this should generate a unique ID every time you enter data. 由于id具有属性AUTO_INCREMENT因此每次输入数据时都应生成唯一ID。

So your insert string can be like this: 所以你的插入字符串可以是这样的:

INSERT INTO `users` (`name`, `surname`, `city`) VALUES (`rock`, `fixed`, `london`);

The id field will then auto-increment each time, giving you unique IDs 然后, id字段将每次自动递增,为您提供唯一ID

只需使用此查询:

INSERT INTO users ( name, surname, city) VALUES ('rock','fixed','london');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM