Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Работа с записями




В этом уроке мы с вами пройдем 2 ключевых слова – DELETE и UPDATE:

  • DELETE FROM таблица;
  • DELETE FROM таблица WHERE условие;
  • UPDATE таблица SET поле = значение;
  • UPDATE таблица SET поле = значение WHERE условие;

Эти команды позволяют оперировать готовыми записями в таблице, а именно удалять и обновлять. Они не слишком сложные. В основном они повторяют друг друга и повторяют некоторые ключевые слова из команд SQL.

 

mysql> USE movies_db; //Используем новую БД. Database changed.
mysql> SELECT * FROM movies; // Выведем все записи из таблицы movies, которая принадлежит используемой БД.

 

name duration likes dislikes dropPer
Hello World
My room
How to create a minecraft mode
Counter Strike CHEATS!
Earth – our planet
CMTV Movie
Just bad movie

Прежде чем мы начнем, я бы хотел рассказать вам еще о небольшом аспекте, который я забыл рассказать в прошлом уроке. Я договорю про условия AND / OR

 

mysql> SELECT name, duration FROM movies WHERE (likes > 100 OR dislikes < 100) AND dropPer < 70; //На самом деле, вы можете сделать еще хитрее. Вы можете открывать скобочки и составлять комплексные условия и после этого вы можете написать AND и дописать еще какое-нибудь хитрое условие.

 

name duration
How to create a minecraft mode
Earth – our planet
CMTV Movie

 

 

А теперь давайте приступим к изучению наших новых команд. Что ж, теперь как оказалось, мне не нужны те видеоролики у которых dropPer > 70. Как я могу удалить эти записи из таблицы? Ответ: используя ключевое слово DELETE. Потом нужно указать, откуда мы удаляем.

 

mysql> DELETE FROM movies; //УДАЛИТ ВСЕ ЗАПИСИ В ТАБЛИЦЕ
mysql> DELETE FROM movies WHERE dropPer > 70; //В таком случае, он вычислит все ролики у которых % удаления > 70 и удалит их. Это нам и нужно. Исполняем эту команду.
mysql> SELECT * FROM movies; Что мы видим? Мы видим, что у нас осталось 3 записи, а 4 удалены.

NB: Перед удалением рекомендую делать следующим образом: mysql> SELECT * FROM movies WHERE dropPer < 70. И тут мы видим, что мы ошиблись в знаке.

name duration likes dislikes dropPer
How to create a minecraft mode
Earth – our planet
CMTV Movie

 

Перейдем к следующему ключевому слову: UPDATE. Давайте попробуем для ролика SMTV Movie добавить 100 дизлайков.

mysql> UPDATE movies SET dislikes = 100; //Если я выполню условие, то во всех строчках будет 100. Нам это не нужно, потому что нужно добавить условие.
mysql> UPDATE movies SET dislikes = 100 WHERE name = 'CMTV Movie'; //В таком случае, он вычислит все ролики у которых % удаления > 70 и удалит их. Это нам и нужно. Исполняем эту команду.
mysql> SELECT * FROM movies; Что мы видим? Мы видим, что у нас осталось 3 записи, а 4 удалены.

 

name duration likes dislikes dropPer
How to create a minecraft mode
Earth – our planet
CMTV Movie

 

Настало время поговорить еще об одном аспекте, который мы затронем в других уроках, но можно сделать хитрее. Предположим у нас есть магазин с товарами и нам нужно увеличить цену на 1$ везде абсолютно или где-то. Но чтобы не писать по многу раз UPDATE, очень просто можно сделать.

mysql> UPDATE movies SET dislikes = dislikes * 3; Увеличим количество дизлайков в нашей таблице в три раза.

 

name duration likes dislikes dropPer
How to create a minecraft mode
Earth – our planet
CMTV Movie

 

Урок 7: Нормализация (1НФ)

Это будет теоретический урок. Давайте взглянем вот на эту картину.

Дело в том, что те таблицы, которые мы создавали до сих пор, они были ненормализованными, т. е. эти таблицы создавались для того чтобы поиграться с SELECT, DROP, CREATE, DELETE, CREATE TABLE и т. д. Но для настоящей работы, эти таблицы были слишком малоэффективны. Чтобы создавать хорошие таблицы, нужно знать некоторые правила, как их создавать и их всего 2.

  1. Правило атомарности №1 – столбец не может состоять из нескольких однотипных элементов.
  2. Правило атомарности №2 – Таблица не может содержать несколько однотипных элементов.

 

Сегодня мы взглянем, как достичь 1НФ.

Для того чтобы это сделать нам нужно провести 2 простых операции:

  • Первая операция продумывается до создания таблицы.
  • Вторая операция реализуется за пару кликов во время создания таблицы.

Начнем с первичного ключа. Первичный ключ – это уникальный номер для каждой записи, чтобы сохранить логическую структуру таблички. Первичный ключ для этого и нужен. Но интереснее всего – это атомарность данных. Дело в том, что проектировать таблицы можно по разному и конечно же хорошо бы проектировать их правильно. Для этого нужно следовать принципу атомарности данных, чтобы данные каждого нашего столбца были разбиты на наиболее эффективные для вас части.

Прежде чем создавать любую таблицу, вы должны понять, что это таблица будет описывать. Что лучше не делать в своей таблице совсем? Каким правилам лучше следовать?

 

Правила атомарности данных:

  1. Столбец не может состоять из нескольких однотипных элементов
name ingridients
Салатик Помидоры, Огурцы, Перец, Уксус
Бутер Хлеб, Сыр, Колбаса
Борщец Свекла, Морковь, Вода, Капуста

 

  1. Таблица не может состоять из нескольких однотипных полей (столбцов)
name phone1 phone2 phone3
CMTV
Вася
Аня

 

 

mysql> DROP DATABASE movies_db; Попрактикуемся немного… Я удаляю свою БД.
mysql> CREATE DATABASE shop_db; И давайте создадим какую-то таблицу. Пусть у нас будет таблица продуктов опять.
mysql> USE shop_db;  
mysql> CREATE TABLE products ( id INT AUTOINCREMENT  , name VARCHAR(40)  , price INT  , PRIMARY KEY(id) ); мы могли бы вставить еще NOT NULL, где я отметил зеленым цветом. Это означало бы, что мы не можем вставлять пустые значения в эту таблицу. Когда мы присвоили первичный ключ ID, он автоматически нам говорит, что не должно значение быть пустым. Если оно пустое, то нам выведут ошибку.
DESC products; //Выведем описание таблицы

 

Field Type NULL KEY Default Extra
id INT(11) NO PRI NULL auto_increment
name VARCHAR(40) YES   NULL  
price INT(11) YES   NULL  

 

Теперь давайте попробуем вставить данные в нашу таблицу.

 

mysql> INSERT INTO products(name, price) VALUES ('Milk', 49);  
mysql> INSERT INTO products VALUES (NULL, 'Bread', 16);  
mysql> SELECT * FROM products;  

 

id name price
Milk
Bread

Как вы можете увидеть, что мы просто указываем в скобочках без id, что без скобочек с NULL – значение так, и так будет инкрементироваться. Вы можете намеренно указать какое-то число и он подставит это число, но лучше этого не делать, т. к. у вас может произойти конфликт.

 

Идем дальше… Посмотрите на эту таблицу:

fname lname email
Petr Radko test@mail. ru
Igor Glazyrev glaz@list. ru
Anya Vaneckaya anya777@email. com

 

Эта таблица находится в той же базе данных shop_db и здесь у нас нормализованная таблица clients. Таблица нормализована, у нас атомарные данные, все хорошо разделено, все правила соблюдены, кроме одной проблемы – о господи, а где же наш первичный ключ? Его нет в этой таблице, и единственный выход – это удалить всю таблицу и создать ее заново, но уже с первичным ключом. Но предположим у вас база из 100000 человек, которые смотрят ваши письма и покупают товары, которые вы рекламируете и представьте, что будет, если вы удалите таблицу. Самый простой способ – это вставить необходимый столбец в нашу таблицу. Конкретно об изменении полей в таблице мы будем говорить в следующем уроке, а пока что давайте используем команду ALTER TABLE.

ALTER TABLE – изменяет структуру таблицы и указываем имя clients.

 

mysql> ALTER TABLE clients ADD COLUMN id INT AUTO_INCREMENT, ADD PRIMARY KEY(id); При таком стиле, все добавится в конец
mysql> ALTER TABLE clients ADD COLUMN id INT AUTO_INCREMENT FIRST, ADD PRIMARY KEY(id); А здесь в начало.

 

mysql> SELECT * FROM clients; Отлично! Теперь выведем все из нашей таблички с клиентами

 

id fname lname email
Petr Radko test@mail. ru
Igor Glazyrev glaz@list. ru
Anya Vaneckaya anya777@email. ru

 

Теперь наша таблица становится полностью нормализованной, и соответствует правилам атомарности данных и первичный ключ также имеется.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...