이 쿼리의 문제점 :
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
WHERE
절 없이 작동합니다 . SQL을 잊은 것 같네요 ..
답변
MySQL INSERT 구문 은 WHERE 절을 지원하지 않으므로 쿼리가 실패합니다. id
열이 고유하거나 기본 키 라고 가정합니다 .
ID 1로 새 행을 삽입하려는 경우 다음을 사용해야합니다.
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
ID가 1 인 기존 행의 weight / desiredWeight 값을 변경하려는 경우 다음을 사용해야합니다.
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
원하는 경우 INSERT .. ON DUPLICATE KEY 구문을 다음과 같이 사용할 수도 있습니다.
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
또는 그렇게 :
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
또한 id
열이 자동 증가 열이면 INSERT에서 모두 생략하고 mysql이 정상적으로 증가하도록 할 수 있다는 점에 유의하는 것도 중요합니다 .
답변
WHERE 절을 VALUES 절과 결합 할 수 없습니다. 내가 아는 한 두 가지 옵션이 있습니다.
-
INSERT 지정 값
INSERT INTO Users(weight, desiredWeight) VALUES (160,145)
-
SELECT 문을 사용하여 INSERT
INSERT INTO Users(weight, desiredWeight) SELECT weight, desiredWeight FROM AnotherTable WHERE id = 1
답변
UPDATE 쿼리에 WHERE 절을 사용합니다. INSERT 할 때 행이 존재하지 않는다고 가정합니다.
OP의 진술은 다음과 같습니다.
UPDATE 사용자 SET weight = 160, desiredWeight = 45 여기서 id = 1;
MySQL에서 INSERT 또는 UPDATE를 원할 경우 WHERE 절과 함께 REPLACE 쿼리를 사용할 수 있습니다. WHERE가 존재하지 않으면 INSERTS하고 그렇지 않으면 UPDATES합니다.
편집하다
나는 Bill Karwin의 요점이 코멘트에서 빠져 나와 그것을 매우 분명하게 만들기에 충분히 중요하다고 생각합니다. 감사합니다 Bill, MySQL로 작업 한 지 너무 오래되었습니다. REPLACE에 문제가 있다는 것을 기억했지만 그게 뭔지 잊어 버렸습니다. 내가 찾아 봤어야했는데.
그것은 MySQL의 REPLACE가 작동하는 방식이 아닙니다. DELETE (행이없는 경우 no-op 일 수 있음)와 INSERT를 수행합니다. 결과에 대해 생각해보십시오. 트리거 및 외래 키 종속성. 대신 INSERT … ON DUPLICATE KEY UPDATE를 사용하십시오.
답변
삽입에 WHERE 절이 있다고 생각하지 않습니다.
답변
검색어 삽입은 where 키워드 *를 지원하지 않습니다.
하위 선택 문에 where 조건을 사용할 수 있으므로 조건이 적용됩니다. 하위 선택을 사용하여 복잡한 삽입을 수행 할 수 있습니다.
예를 들면 :
INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';
insert 문에 “select”를 입력하면 다중 삽입을 빠르게 수행 할 수 있습니다.
이 유형의 삽입을 사용하면 삽입되는 행 수를 확인할 수 있습니다. 삽입을 수행하기 전에 다음 SQL 문을 실행하여 삽입 될 행 수를 결정할 수 있습니다.
SELECT count(*)
FROM customers
WHERE city = 'Newark';
EXISTS 조건을 사용하여 중복 정보를 삽입하지 않도록 할 수 있습니다.
예를 들어 기본 키가 client_id 인 clients라는 테이블이있는 경우 다음 문을 사용할 수 있습니다.
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
이 문은 하위 선택으로 여러 레코드를 삽입합니다.
단일 레코드를 삽입하려면 다음 문을 사용할 수 있습니다.
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
이중 테이블을 사용하면 값이 현재 테이블에 저장되어 있지 않더라도 select 문에 값을 입력 할 수 있습니다.
Where 절을 사용하여 삽입하는 방법 도 참조하십시오.
답변
이 질문에 대한 정답은 다음과 같습니다.
ㅏ). 삽입하기 전에 선택하려면 :
INSERT INTO Users( weight, desiredWeight )
select val1 , val2 from tableXShoulatNotBeUsers
WHERE somecondition;
비). 레코드가 이미있는 경우 삽입 대신 업데이트를 사용하십시오.
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
해야한다
Update Users set weight=160, desiredWeight=145 WHERE id = 1;
씨). 동시에 업데이트 또는 삽입하려는 경우
Replace Users set weight=160, desiredWeight=145 WHERE id = 1;
Note):- you should provide values to all fields else missed field in query
will be set to null
디). 동일한 테이블에서 레코드를 복제하려면 삽입하려는 테이블에서 선택할 수 없다는 것을 기억하십시오.
create temporary table xtable ( weight int(11), desiredWeight int(11) ;
insert into xtable (weight, desiredWeight)
select weight, desiredWeight from Users where [condition]
insert into Users (weight, desiredWeight)
select weight , desiredWeight from xtable;
나는 이것이 대부분의 시나리오를 포함한다고 생각합니다.
답변
INSERT 문을 수행 할 때 WHERE를 사용할 수 없습니다.
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
해야한다:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );
WHERE 부분은 SELECT 문에서만 작동합니다.
SELECT from Users WHERE id = 1;
또는 UPDATE 문에서 :
UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;