2

mysql 데이터베이스에 여러 레코드를 추가해야합니다. 나는 여러 쿼리와 그 잘 작동,하지만 효율적으로 노력했다. 그래서 나는 다음과 같은 하나의 쿼리,insert update multiple rows mysql

INSERT INTO data (block, length, width, rows) VALUES 
    ("BlockA", "200", "10", "20"), 
    ("BlockB", "330", "8", "24"), 
    ("BlockC", "430", "7", "36") 
ON DUPLICATE KEY UPDATE 
    block=VALUES(block), 
    length=VALUES(length), 
    width=VALUES(width), 
    rows=VALUES(rows) 

와 그것을 시도하지만 항상 테이블 (열 block_id, 블록, 길이, 폭, 행이다) 업데이트합니다. block_id도 추가하여 쿼리를 변경해야합니까? block_id이 기본 키입니다. 어떤 도움을 주시면 감사하겠습니다.

+0

'데이터'테이블의 키 무엇입니까? – DavidLin

+0

게시물이 업데이트되었습니다 (block_id가 기본 키임) – Irawana

+0

쿼리를 아무런 문제없이 실행했는데 데이터 테이블에 다른 키가 정의되어 있지 않습니까? 또한 id 필드에 '자동 증가'가 설정되어 있는지 확인하십시오. – DavidLin

답변

1

쿼리를 아무런 문제없이 실행했는데 데이터 테이블에 다른 키가 정의되어 있지 않습니까? 또한 id 필드에 '자동 증가'가 설정되어 있는지 확인하십시오. AUTO_INCREMENT없이 쿼리가 항상 ** * ** * ****

미안 '업데이트 행

** * ** 에게 기존 업데이트 당신의 질문을 오해하게하십시오. 네, auto_increment 키가 하나 뿐이므로 기존의 키를 auto_increment로 복사 할 수 있으므로 기본 키가 '기존'/ 중복을 감지 할 수있는 유일한 방법이므로 기존 쿼리를 업데이트하는 대신 항상 새로운 행을 삽입합니다. 기본 키는 삽입 쿼리에 제공되지 않습니다.

내가 무엇을 달성하고자하는 것은 다른 생각, 당신은 (블록, 필드, 폭, 행 예) 그런데

는, 내가 설정 한 모든 필드에 복합 고유 키를 설정할 수있는 당신을위한 SQL 바이올린.

고유 키 추가하는 구문 http://sqlfiddle.com/#!2/e7216/1 :

CREATE TABLE `data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`block` varchar(10) DEFAULT NULL, 
`length` int(11) DEFAULT NULL, 
`width` int(11) DEFAULT NULL, 
`rows` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `uniqueme` (`block`,`length`,`width`,`rows`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 
+0

block_id는 유일한 ID입니다. 또한 자동 증가. 이 쿼리를 다시 실행하면 해당 데이터를 업데이트하는 대신 다시 추가합니다. – Irawana