Запрос SQL на добавление и удаление записей
В этой статье мы разберём, пожалуй, одни из самых важных SQL-запросов. Это запросы на добавление и удаление записей из таблицы базы данных. Поскольку, ОЧЕНЬ часто приходится добавлять новые записи в таблицу, причём делать это в автоматическом режиме, то данный материал обязателен к изучению.
Для начала SQL-запрос на добавление новой записи в таблицу:
INSERT INTO users (login, pass) values('TestUser', '123456')
При добавлении записи вначале идёт команда "INSERT INTO", затем название таблицы, в которую мы вставляем запись. Далее идёт в круглых скобках названия полей, которые мы хотим заполнить. А затем в круглых скобках после слова "values" начинаем перечислять значения тех полей, которые мы выбрали. После выполнения этого запроса в нашей таблице появится новая запись.
Иногда требуется обновить запись в таблице, для этого существует следующий SQL-запрос:
UPDATE users SET login = 'TestUser2', pass='1234560' WHERE login='TestUser'
Данный запрос является более сложным, так как он имеет конструкцию "WHERE", но о ней чуть ниже. Вначале идёт команда "UPDATE", затем имя таблицы, а после "SET" мы описываем значения всех полей, которые мы хотим изменить. Было бы всё просто, но встаёт вопрос: "А какую именно запись следует обновлять?". Для этого существует "WHERE". В данном случае мы обновляем запись, поле "login" у которой имеет значение "TestUser". Обратите внимание, что если таких записей будет несколько, то обновятся абсолютно все! Это очень важно понимать, иначе Вы рискуете потерять свою таблицу.
Давайте немного ещё поговорим о "WHERE". Помимо простых проверок на равенство существуют так же и неравенства, а также логические операции: AND и OR.
UPDATE users SET login = 'TestUser2', pass='1234560' WHERE id < 15 AND login='TestUser'
Данный SQL-запрос обновит те записи, id которых меньше 15 И поле "login" имеет значение "TestUser". Надеюсь, Вы разобрались с конструкцией "WHERE", потому что это очень важно. Именно "WHERE" используется при выборке записей из таблиц, а это самая частоиспользуемая задача при работе с базами данных.
И, напоследок, простой SQL-запрос на удаление записей из таблицы:
DELETE FROM users WHERE login='TestUser2'
После команды "DELETE FROM" идёт имя таблицы, в которой требуется удалить записи. Дальше описываем конструкцию "WHERE". Если запись будет соответствовать описанным условиям, то она будет удалена. Опять же обратите внимание, в зависимости от количества записей, удовлетворяющих условию после "WHERE", может удалиться любое их количество.
Вот Вы и узнали, как добавлять, обновлять и удалять записи из таблицы. А в следующей статье я Вас познакомлю с тем, как делать выборку записей из таблицы, а это является, пожалуй, самым важным при работе с базами данных.
Полный курс по PHP и MySQL: http://srs.myrusakov.ru/php
-
- Михаил Русаков
Комментарии (36):
А как сделать апдейт таблицы так чтобы когда человек открыл форму на сайте то у него отображалась уже внесенная информация, в общем как вконтакте...хочет человек отредактировать даные о себе то там пишутся уже существующие данные. Ну или анологично phpmyadmin у !
Ответить
Для этого узнаётся сначала пользователь (допустим, из сессии или GET-параметра). Дальше на основании id пользователя или его логина делается выборка соответствующей записи. В результате получается массив со всеми данными пользователя, которые затем просто подставляются в форму.
Ответить
$result = mysql_query("INSERT INTO information (deiatelnost) VALUES ('$deiatelnost') WHERE login='$login' ") Когда я делаю запрос с указанием сессионного логина, мне выдает такую ошибку: 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 login='мой логин'' at line 1
Ответить
Попробуйте вместо "мой логин" подставить "mylogin".
Ответить
"мой логин" - это ошибка. а вообще там стоит не "мой логин" а мой логин на английском!
Ответить
$result = mysql_query("INSERT INTO `information` (`deiatelnost`) VALUES ('$deiatelnost') WHERE `login`='$login'") Попробуйте такой запрос с обратными кавычками.
Ответить
РАзницы нет. Но я попробовал ошибка вообще не на счет синтаксических ошибок...я вообще таких запросов раньше не писал... поэтому не знаю...да вообще с высоконагружеными системами не работал..=(
Ответить
Запрос правильный на 100%. Единственное, что, возможно, переменная $login некорректная приходит. Но это уже Вам лучше знать. Если с ней всё хорошо, то тогда проблема в структуре таблицы (названия таблицы и её полей, типы полей, допустимые значения и прочее).
Ответить
Спасибо большое! Все работает , разобрались=) Теперь очень прошу вас описать функцию Cron , как запускать этот скрипт через крн... было бы идеально посвятить этому целую тему=))) И еще хоть убейте, не могу найти вашу статью про аудио/видео проигрыватели на сайте... прошу ссылку=) Спасибо за помощь вам, вы мне во многом уже помогли=)))
Ответить
Про cron постараюсь в скором времени написать. Про аудио: http://myrusakov.ru/html-add-audio.html И про видео: http://myrusakov.ru/html-video.html Ещё на сайте есть поиск, где эти статьи элементарно найти, введя "аудио" и "видео".
Ответить
Про Cron буду ждать вашей сатьи, так как я не могу с ней разобратся, а она мне очень необходима для онлайн пользователей=)
Ответить
Михаил! Опять столкнулся с проблемой... пишу запрос на добавление информации зарегестрированным пользователем именно его записи к нему в строку... $res = mysql_query("INSERT INTO information (deiatelnost) VALUES ('$deiatelnost') WHERE login='$login'"); Этим запросом просто не хочет добавлять запись ... а вот если я ввожу тот же запрос но уже без login="$login" то все добавляется но соответственно без логина, и уже следовательно вытащить эти данные для конкретного пользователя просто нет возможности... что делаю не так? Могу скинуть на почту полный код action... спасибо заранее=)
Ответить
Постараюсь объяснить, что Вы хотите: "Я хочу добавить запись в существующую запись". Вам не кажется, что это странно? Если Вам нужно обновлять запись, то используйте команду UPDATE.
Ответить
так в том то и дело, что я создал чистый столбец дабы разгрузить все остальные(заранее), и там человек который авторизирован под своим логином может добавить новую запись о себе именно ДОБАВИТЬ, ну а после того как добавил он будет апдейтить себя соответственно, Вопрос в том что сейчас запись не добавляется если я ставлю login='$login' =(( А если этой записи нет но добавляет инфу, но она соответственно не относится к этому пользователю так как вытащить ее можно для любого другого пользователя авторизированного на сайте. Что не так с запросом?
Ответить
Для таких случаев в таблице делают поле user_id, в котором содержится id того пользователя, который добавил данную запись. Всё, что я писал ранее, остаётся в силе. Вы требуете от MySQL абсурд, который он выполнить не сможет.
Ответить
Михаил а вот у меня возник такой вопрос,вот человек зарегестрировался у меня на сайте, и ему нужно добавить о себе информацию например его интересы, и у меня для этого создан запрос на INSERT в базу, а вот когда ему нужно внести еще одну запись или обновить запись о себе, то как поставить вместо INSER запрос UPDATE а то каждый раз будет добавлятся новая строка с одним и тем же пользователем...
Ответить
Подобные вещи реализуются так. Никаких новых записей вообще не добавляется, а все эти "интересы" и прочее хранятся в записи пользователя (со всеми остальными его данными). Поэтому всегда идёт только UPDATE.
Ответить
Тоесть я никак не смогу разгрузить ту таблицу?
Ответить
А она загружена что ли? Даже 100 полей - это нормально.
Ответить
То есть вот так вот все просто?!=))) Ларчик то прост, а я думал если одновременно к этой таблице обратится например 100 человек? то моя соц сеть упадет?
Ответить
Если одновременно, то всё упадёт из-за превышения количества одновременных соединений, а не из-за большой таблицы.
Ответить
А например вконтакте соединения реализованны тае же как вы описывали в теме http://myrusakov.ru/mysql-max-user-connections.html ??? или там другая схема?!
Ответить
Им такая схема и не нужна, у них свои собственные сервера.
Ответить
Спасибо Михаил=) Завтра надеюсь сделаю уже все по уму, всмысле всю информацию о себе в своей соц сети))) Вы кстати зашли бы хоть=))))
Ответить
Михаил ..у меня опять проблема с запросом sql=((( Хочу апдейтить таблицу users и добавить данные из формы в строку status передаю данные из формы методом POST , значения передаются, а вот сам запрос... $result = mysql_query("UPDATE users SET (status) VALUES ('$status') WHERE login='$login'"); что не так в запросе?
Ответить
UPDATE `users` SET `status`='$status' WHERE `login`='$login'
Ответить
Спасибо, помогло, все работает=))) Михаил а немогли бы вы написать статью про нормальный fancybox а то те которые я читал непомогли мне в установке этого окна не как изображения а как подгрузки окна например быстрого сообшения...
Ответить
Я пока не пишу статьи, относящиеся к JQuery - это дело будущего.
Ответить
А эти SQL-запросы нужно отправлять из специальной формы в phpMyAdmin или из формы на сайте? Или же их надо прописывать в PHP-коде страницы? Если можно, то поясни поподробней.
Ответить
И в phpmyadmin и в PHP-коде их можно использовать. Но раз задан такой вопрос, то рекомендую для начала основы прочитать, не надо лезть в эту статью, если не знаете, как запрос отправляется и откуда.
Ответить
Привествую. У меня возник вопрос по конкретной ситуации: Есть таблица в которой храняться данные специальностей учебных заведений. (у каждого уч. заведения может быть несколько записей) Уже реализован вывод этой информации для редактирования. Выборка данных идет по зарегистрированому юзеру(уч заведение). Но при замене через update заменяются данные всего столбца. как реализовать замену конкретной специальности?
Ответить
Добавить в запрос AND `специальность`='конкретная специальность'
Ответить
спасибо, работает)))
Ответить
а возможно ли одним запросом добавить одно значение (например из формы)в несколько таблиц.
Ответить
Нет, в одном запросе нельзя добавлять значения в несколько таблиц.
Ответить
Добрый день! А можно ли указать в запросе SQL что нужно вставить указанную строку определенное количество раз. К примеру - 200. Иногда нужно добавить большое количество одинаковых строк. Хотелось этот процесс автоматизировать.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.