mysql에서 한 번에 여러 개의 유사한 레코드를 삽입하는 방법은 무엇입니까?

mysql에서 한 번에 여러 개의 유사한 레코드를 삽입하는 방법은 무엇입니까?

우리는 다음 쿼리를 사용하여 한 번에 여러 레코드를 삽입할 수 있다는 것을 알고 있습니다.

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를 사용하고준비된 진술, 기계 생성 시 여러 다른 매개변수를 사용하여 명령문을 재사용할 수 있습니다.은닉처귀하의 진술은 전체 프로세스를 최적화합니다. 말할 것도없이 스케이핑과 같은 작업을 처리합니다. 코드는 다음과 같습니다(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의 현재이자 미래입니다).

관련 정보