우리는 다음 쿼리를 사용하여 한 번에 여러 레코드를 삽입할 수 있다는 것을 알고 있습니다.
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의 현재이자 미래입니다).