항상 mysql 테이블에 데이터를 삽입하는 중 중복 레코드를 피하기 위해 삽입하기 전에 해당 데이터를 선택하고 쿼리가 null을 반환하면 레코드를 삽입합니다.mysql 삽입 쿼리에서 레코드를 중복 방지하는 방법은 무엇입니까?
하지만이 직업을 수행하는 전문적인 방법이 아닌 것 같습니다.
내 방식대로 알려 주시겠습니까?
항상 mysql 테이블에 데이터를 삽입하는 중 중복 레코드를 피하기 위해 삽입하기 전에 해당 데이터를 선택하고 쿼리가 null을 반환하면 레코드를 삽입합니다.mysql 삽입 쿼리에서 레코드를 중복 방지하는 방법은 무엇입니까?
하지만이 직업을 수행하는 전문적인 방법이 아닌 것 같습니다.
내 방식대로 알려 주시겠습니까?
이렇게하는 "전문적인"방법은 기본 키 제약 조건을 사용하는 것입니다.
좋아요, 기본 키를 가지고 있고 자동 증가 인 ID입니다. 그러나 모든 레코드에 대해 변경됩니다. –
내 대답은 자동 증분 키 문제를 해결할 고유 색인을 설정할 수있게합니다 – Jroc
두 접근법 중 하나를 사용하여 고유 제한 조건을 설정할 수 있습니다. –
기본 키 또는 고유 인덱스를 사용하지 않으려는 이유는 이것이 생성하는 오류 때문입니다 (단일 쿼리에 여러 행을 삽입하는 경우 문제가 됨) 다음을 사용할 수 있습니다 구문
insert ignore into [tablename]() VALUES()
중복 된 키 업데이트를 사용하여 특정 필드도 업데이트 할 수 있습니다.
자세한 내용은insert into [tablename]() VALUES() ON DUPLICATE KEY UPDATE
가 이미 제안은 일반적으로 갈 수있는 좋은 방법입니다 같은 적절한 제약 조건을 추가 http://dev.mysql.com/doc/refman/5.1/en/insert.html
MySQL을 영원히 계속 사용할 계획이라면 좋은 접근 방법입니다. 가능한 경우 표준 SQL을 사용하는 것이 좋습니다. –
$qry="INSERT username INTO users";
if(!mysql_query($qry))
{
if(mysql_errno()=1062)
{
echo 'Unique costraint violation!';
}
else
{
//other error
}
}
You can try the following example. I would suggest you to try this first in your testing environment then you can implement this in your actual scenario.
Follow the below steps:
Step 1: create a table
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`email` varchar(50) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Step 2: Run this query multiple times and check that only one row is inserted
INSERT INTO `student` (`name`, `age`)
SELECT `name`, `age` FROM `student`
WHERE NOT EXISTS (SELECT 1
FROM `student`
WHERE `name` = 'manish'
AND `age` = '23'
);
에 모습을 가지고 있지만, 적합하지 않습니다 어떤 이유로 경우, 조건부 삽입을 시도 할 수 있습니다 (본질적으로 지금하고있는 작업은 하나의 명령문에서 모두 수행 할 수 있습니다). http://stackoverflow.com/questions/2852935/sql-conditional-row-insert – Mike
감사합니다. Mike,하지만 그런 조건부 명령을 실행할 때 WHERE NOT EXISTS 문으로 쿼리하기 mysql이 나에게 구문 오류를 준다. –