MySQL(その17 データの更新と削除)

その16から続きます

1:データの更新(新規データを追加する(insert))

例:新商品を1件追加したい!商品名は”新商品A”で価格を1000円とする

insert into products(name,price)values('新商品A', 1000);

列リストを省略して1件レコードを追加する

insert products values(1002,'新商品B', 2000);

※注意!

↑順番に書かなければいけなかったり、全列指定しなければいけない
ところがミスになりやすく使い勝手が悪い

行を複数追加する

例題)新商品3件をデータベースに追加したい!
[新商品C,価格3,000円],[商品名:新商品D,価格4,000円]
[商品名:新商品E,価格5,000円]

insert into products(name,price)
values
('新商品C',3000),
('新商品D',4000),
('新商品E',5000),

レコードの更新(update)

例:全商品を10%引きに設定したい!

10%引き前


↓セーフモードを解除 実務で使う場合は注意!
set sql_safe_updates = 0;
update products set price = price * 0.9;

特定の条件に合致するデータを更新(update)

例:商品id3の商品名をSQL入門に変更したい!
update文とwhere句を使う。

update products set name = ‘SQL入門’ where id = 3;

複数の列を更新する場合

update products set name = ‘SQL入門’, price = 1000, where id = 3;

更新条件にサブクエリを使う

例:累計販売数が10を超えている商品については価格を5%UPしたい!

↓累計販売数(sum(product_qty)が 10 を超えている商品を抽出
select
product_id,sum(product_qty)
from
order_details
group by
product_id
having
sum(product_qty) >= 10

これをサブクエリとして使う

update
products
set
price = price * 1.05
where
id in
(select
product_id
from
order_details
group by
product_id
having
sum(product_qty) >= 10
);

行を削除する(delete)

例:今商品に割り振られている商品カテゴリを使うのをやめるので、
商品とカテゴリのひも付けを削除したい!

※削除前

delete from products_categories;

削除されnullだけになった!

※注意!

delete で削除したデータは基本的には元に戻せない
大量のデータをdeleteする時に予想外に時間がかかる場合があるので注意
一概には言えないが 10万件を超えるぐらいから用心したほうが良い

例:商品ID1001は間違いで登録したものだから削除したい!

※注意!

うっかりwhere句を指定し忘れるとproductsテーブル全体が削除対象となり大変なことになる!

例:1個も売れてない商品は売るのをやめるので削除したい!

まず初めに1個以上売れている商品を表示し後で利用

select product_id from order_details group by product_id;
delete
from
products
where
id not in(
select
product_id
from
order_details
group by
product_id);

その18に続きます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です