MySQL Insert Where query



что не так с этим запросом:



INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;


Он работает без WHERE предложения. Кажется, я забыл свой SQL..

670   24  

24 ответов:

MySQL вставить синтаксис не поддерживает предложение WHERE, поэтому ваш запрос в его нынешнем виде не будет выполнен. Предполагая, что ваш id столбец является уникальным или первичным ключом:

если вы пытаетесь вставить новую строку с id 1 Вы должны использовать:

INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);

если вы пытаетесь изменить значения weight / desiredWeight для существующей строки с идентификатором 1, Вы должны использовать:

UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;

если вы хотите, вы также можете использовать INSERT .. На повторяющийся синтаксис ключа, как Итак:

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 столбец является столбцом автоинкремента, тогда вы можете также опустить его из своей вставки все вместе и позволить mysql увеличить его как обычно.

вы не можете объединить предложение WHERE с предложением VALUES. Насколько мне известно, у вас есть два варианта-

  1. вставить указание значений

    INSERT INTO Users(weight, desiredWeight) 
    VALUES (160,145)
    
  2. вставить с помощью инструкции SELECT

    INSERT INTO Users(weight, desiredWeight) 
    SELECT weight, desiredWeight 
    FROM AnotherTable 
    WHERE id = 1
    

вы используете предложение WHERE для запросов на обновление. Когда вы вставляете, вы предполагаете, что строка не существует.

в MySQL, если вы хотите вставить или обновить, вы можете использовать запрос REPLACE с предложением WHERE. Если где не существует, он вставляет, в противном случае он обновляется.

EDIT

Я думаю, что точка зрения Билла Карвина достаточно важна, чтобы вытащить из комментариев и сделать ее очень очевидной. Спасибо Билл, это было слишком долго, так как я работал с MySQL, я вспомнил, что у меня были проблемы с заменой, но я забыл, что они были. Я должен был посмотреть его.

это не так, как замена MySQL работает. Он выполняет удаление (которое может быть no-op, если строка не существует), а затем вставку. Подумайте о последствиях ВИС. триггеры и зависимости внешнего ключа. Вместо этого используйте INSERT...ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА.

Я не считаю, что вставка имеет предложение WHERE.

вставить запрос не поддерживает where ключевое слово*

условия применяются, потому что вы можете использовать условие where для операторов sub-select. Вы можете выполнять сложные вставки с помощью подзапросов.

например:

INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';

установив "select" в инструкции insert, вы можете быстро выполнять многократные вставки.

С помощью этого типа вставки вы можете проверить количество вставляемых строк. Вы можете определить количество строк, которые будет вставлен путем выполнения следующей инструкции SQL перед выполнением вставки.

SELECT count(*)
FROM customers
WHERE city = 'Newark';

вы можете убедиться, что вы не вставляете дублирующую информацию, используя условие EXISTS.

например, если у вас есть таблица с именем clients с первичным ключом client_id, вы можете использовать следующую инструкцию:

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

правильный ответ на этот вопрос будет sth следующим образом:

a). Если хотите выбрать перед вставкой:

INSERT INTO Users( weight, desiredWeight ) 
  select val1 , val2  from tableXShoulatNotBeUsers
  WHERE somecondition;

b). Если запись уже существует, используйте обновление вместо вставки:

 INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

должно быть

Update Users set weight=160, desiredWeight=145  WHERE id = 1;

c). Если вы хотите обновить или вставить одновременно

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

d). Если вы хотите клонировать запись из той же таблицы, просто помните, что вы не можете выбрать из таблицы, в которую вы вставляете поэтому

 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;

Я думаю, что это довольно охватывает большинство сценариев

вставить в = добавление строк в таблицу

обновление = Обновление конкретной строки.

Что бы предложение where описывало в вашей вставке? Он не имеет ничего, чтобы соответствовать, строка не существует (пока)...

вы просто не можете использовать WHERE при выполнении инструкции INSERT:

 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 Users set (weight = 160, desiredWeight = 145) WHERE id = 1;

ПРОЧТИТЕ ЭТО ТАКЖЕ

это не имеет смысла... даже буквально

INSERT значит добавить new row и когда вы говорите WHERE вы определяете, о какой строке вы говорите в SQL.

таким образом, добавление новой строки невозможно с условием на существующей строке.

вы должны выбрать один из следующих вариантов:

Используйте UPDATE вместо INSERT

B. Использование INSERT и удалить WHERE пункт ( я просто говорю это...) или если вы действительно обязаны использовать INSERT и WHERE в одном заявлении это может быть сделано только через вставить..Выберите пункт...

INSERT INTO Users( weight, desiredWeight ) 
SELECT FROM Users WHERE id = 1;

но это служит совершенно другой цели, и если вы определили id как первичный ключ, эта вставка будет неудачной, иначе новая строка будет вставлена с id = 1.

Это зависит от ситуации вставка может иметь предложение where.

например, если вы сопоставляете значения из формы.

Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,[email protected],160,145) WHERE name != fred AND email != [email protected]

имеет смысл, не правда ли?

самый простой способ-использовать, если нарушить ваше ключевое ограничение. Это работает только для вставки игнорировать, но позволит вам использовать ограничение в вставке.

INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');

после WHERE предложение вы ставите условие, и оно используется либо для извлечения данных, либо для обновления строки. При вставке данных предполагается, что строка не существует.

Итак, вопрос, есть ли строки с id 1? если да, то используйте обновление MySQL, еще использовать MySQL INSERT.

если вы указываете конкретную запись нет для вставки данных его лучше использовать UPDATE заявление вместо INSERT заявление.

этот тип запроса, который вы написали в вопросе, похож на фиктивный запрос.

ваш запрос :-

INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;

здесь вы указываете id=1, поэтому лучше использовать UPDATE оператор для обновления существующего record.It не рекомендуется использовать WHERE пункт в случае INSERT.Вы должны использовать UPDATE .

Теперь С Помощью Запроса На Обновление: -

UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;

действительно ли where-предложение может использоваться с INSERT-INTO-VALUES в любом случае?

ответ однозначно нет.

добавление предложения WHERE после INSERT INTO ... ЦЕННОСТИ... это просто недопустимый 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 не имеет предложения WHERE, только запрос UPDATE имеет его. Если вы хотите добавить данные, где id = 1, то ваш запрос будет

UPDATE Users SET weight=160, desiredWeight= 145 WHERE id = 1;

нет. Насколько мне известно, вы не можете добавить предложение WHERE в этот запрос. Может быть, я тоже забыл свой SQL, потому что я не совсем уверен, зачем вам это нужно.

вы не должны использовать условие where в инструкции Insert. Если вы хотите это сделать, используйте insert в инструкции update, а затем обновите существующую запись.

на самом деле я могу знать, зачем вам нужно предложение where в инструкции Insert??

может быть, на основе причины я мог бы предложить вам лучший вариант.

Я думаю, что ваш лучший вариант - использовать REPLACE вместо INSERT

заменить в Пользователей (id, вес, желаемый вес) значения(1, 160, 145);

вы можете сделать условную вставку на основе пользовательского ввода. Этот запрос будет вставлять только если входные vars '$userWeight ' и '$userDesiredWeight ' не являются пустыми

INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'  
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';

Я знаю, что это старый пост, но я надеюсь, что это все еще поможет кому-то, с чем я надеюсь, это простой пример:

справочная информация:

у меня было много для многих случаев: один и тот же пользователь указан несколько раз с несколькими значениями, и я хотел создать новую запись, поэтому обновление не имело бы смысла в моем случае, и мне нужно было обратиться к конкретному пользователю так же, как я бы сделал, используя предложение WHERE.

INSERT into MyTable(aUser,aCar)
value(User123,Mini)

С помощью этой конструкции вы на самом деле целевой конкретный пользователь (user123,у которого есть другие записи), поэтому вам действительно не нужно предложение where, я считаю.

выход может быть:

aUser   aCar
user123 mini
user123 HisOtherCarThatWasThereBefore

правильный синтаксис для mysql вставить в инструкцию с помощью метода post является:

$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";

Я не думаю, что мы можем использовать предложение where в инструкции Insert

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

Comments

    Ничего не найдено.