답변:
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이 정상적으로 증가하도록 할 수 있다는 점에 유의하는 것도 중요합니다 .
If you're trying to insert a new row with ID 1 you should be using
INSERT INTO를 언급했듯이 . 귀하의 경우 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 조건을 사용할 수 있으므로 조건이 적용됩니다. 하위 선택을 사용하여 복잡한 삽입을 수행 할 수 있습니다.
예를 들면 :
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;
상황에 따라 INSERT가 실제로 where 절을 가질 수 있습니다.
예를 들어 양식의 값을 일치시키는 경우입니다.
Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com
말이되지 않나요?
WHERE
절 뒤에 조건을 입력하면 데이터를 가져 오거나 행을 업데이트하는 데 사용됩니다. 데이터를 삽입 할 때 행이 존재하지 않는다고 가정합니다.
그래서 질문은 ID가 1 인 행이 있습니까? 그렇다면 MySQL UPDATE 를 사용하고 그렇지 않으면 MySQL INSERT를 사용하십시오 .
데이터 삽입을 위해 특정 레코드 번호를 지정하는 경우 UPDATE
문 대신 문 을 사용하는 것이 좋습니다 INSERT
.
질문에 작성한 이러한 유형의 쿼리는 더미 쿼리와 같습니다.
귀하의 검색어는 :-
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
여기에서, 당신은 그래서 더 나은 사용, 아이디 = 1을 지정하는 UPDATE
사용하지 않는 것이 좋습니다 기존 record.It를 업데이트 문을 WHERE
의 경우 절 INSERT
우선은 사용해야합니다 UPDATE
.
이제 업데이트 쿼리 사용 :-
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
WHERE-clause는 어떤 경우에도 INSERT-INTO-VALUES와 함께 실제로 사용될 수 있습니까?
대답은 확실히 아니오입니다.
INSERT INTO ... VALUES ... 뒤에 WHERE 절을 추가하는 것은 유효하지 않은 SQL이며 구문 분석하지 않습니다.
MySQL에서 반환하는 오류는 다음과 같습니다.
mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1
오류 메시지의 가장 중요한 부분은
... syntax to use near 'WHERE id = 1' ...
파서가 여기서 찾을 것으로 예상하지 못한 특정 부분 인 WHERE 절을 보여줍니다.
말이 안 돼 ... 말 그대로
INSERT
을 추가하고 에서 말하는 행을 정의 new row
한다고 말할 때 .WHERE
SQL
따라서 기존 행에 대한 조건으로는 새 행을 추가 할 수 없습니다.
다음 중에서 선택해야합니다.
A. UPDATE
대신 사용INSERT
B. 절을 사용 INSERT
하고 제거하십시오 WHERE
(내가 말하고 있습니다 ...) 또는 실제로 사용 INSERT
하고 WHERE
단일 문에서 INSERT..SELECT 절 을 통해서만 수행 할 수 있습니다 ...
INSERT INTO Users( weight, desiredWeight )
SELECT FROM Users WHERE id = 1;
그러나 이것은 완전히 다른 목적으로 사용되며 id를 Primary Key로 정의한 경우이 삽입이 실패하고 그렇지 않으면 새 행이 id = 1로 삽입됩니다.
나는 이것이 오래된 게시물이라는 것을 알고 있지만 이것이 여전히 누군가에게 도움이되기를 바랍니다. 내가 바라는 것은 간단한 예입니다.
배경:
다 대다 사례가있었습니다. 동일한 사용자가 여러 값으로 여러 번 나열되어 새 레코드를 만들고 싶었습니다. 따라서 UPDATE는 제 경우에는 의미가 없으며 특정 사용자를 처리해야했습니다. WHERE 절을 사용합니다.
INSERT into MyTable(aUser,aCar)
value(User123,Mini)
이 구조를 사용하면 실제로 특정 사용자 (다른 레코드가있는 user123)를 대상으로하므로 where 절이 실제로 필요하지 않습니다.
출력은 다음과 같을 수 있습니다.
aUser aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
post 메소드를 사용하여 mysql insert into 문에 대한 올바른 구문은 다음과 같습니다.
$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
INSERT와 WHERE를 함께 사용할 수 없습니다. 아래 코드와 같이 특정 필드의 특정 열에 값을 추가하기 위해 UPDATE 절을 사용할 수 있습니다.
UPDATE Users
SET weight='160',desiredWeight ='145'
WHERE id =1