memorandum

IT技術の習得を記録します

mysqlの基礎

update

update people set birth_date = '1987-11-27' where id = 10096;
# updateする テーブル名 set 変更内容 where 変更箇所
# peopleテーブルのidが10096のbirth_dateを'1987-11-27'にアップデートする

delete

delete from テーブル名 where 該当箇所;

insert

insert into people (id, birth_date, created_at, updated_at) values ('10097', '1987-03-03', NOW(), NOW());
# created_atとupdated_atがないと更新できない仕様に作られているテーブルにインサートする場合
 NOW()は現在の時刻をタイムスタンプで記録してくれる

select inner_memoに'テスト'という文字列を含む行のidを取得

select id from people where memo like '%テスト%';

%テスト → で終わる

テスト_ → テストではじまりその後ろに任意の1文字がある

show databases;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 家計簿             |
| blog_app           |
| mysql              |
| sys                |
| testdb             |
+--------------------+

desc テーブル名

カラム一覧を取得

コミットをまとめる

git rebase -i --keep-empty --autosquash $(git show-branch --merge-base master HEAD)

vimに以下のような状態で開かれる

pick 05eb1e4 test2rb
pick 7dc17cc add test.rb

# Rebase 7802bc5..7dc17cc onto 7802bc5 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#

pickの部分を以下のように変更 (まとめたいコミットをpick→fにかえる) 一行目は残しておくのでpickのまま

pick 05eb1e4 05eb1e4 test2rb
f 7dc17cc add test.rb

vimで直前のコミットメッセージを修正

git commit --amend
git push --force-with-lease

CSVファイルの中身を置換する sed

sedは与えられた文字列を,ルールに従って変換するコマンド
置換したいと思って調べたら、かなり色々できるようです

とりあえずよく使用するであろうCSVの中身の置換を覚えてみる

sed -e s/置換条件/置換文字/

list.csvの株式会社を(株)にしてlist_new.csvに書き出す

sed -e "s/株式会社/(株)/g" list.csv > list_new.csv

list.csvの株式会社を(株)にして上書きする

sed -i -e "s/株式会社/(株)/g" list.csv


さらに詳しく、これだけでも結構覚えごたえがある・・・

sed -e "s/aaaa/bbbb/"       # 行で最初に出てきた'aaaa'を'bbbb'に置換
sed -e "s/aaaa/bbbb/g"      # 入力の全行に渡って置換  G = Global
sed -e "s/^aaaa/bbbb/"      # 行頭(^)に'aaaa'のもの  aaaabbbb => bbbbbbbb
sed -e "s/aaaa\$/bbbb/"     # 行末($)に'aaaa'のもの。$は\でescape  bbbbaaaa => bbbbbbbb
sed -e "s/~/bbbb/"          # 行頭に'bbbb'を追加   aaaa  => bbbbaaaa
sed -e "s/\$/bbbb/"         # 行末に'bbbb'を追加  aaaa => aaaabbbb
sed -e "s/.*/abcd/"         # すべての行を'abcd'に置換 
sed -e "s/aa.*bb//"         # aa*bbを削除

エラー回避 rescue

rescueを使うことによって、エラーを回避して処理ができる
beginとrescueの間で実行する処理で何らかのエラーが発生しても処理を中断しないようになる

begin
  例外を発生させる可能性のある処理
rescue
  例外が起こった場合の処理
end

rescueに続けて変数名を指定、上がってきた例外が指定した変数に代入される

begin
  例外が起こる可能性のある処理
rescue => 例外オブジェクトが代入される変数
  例外が起こった場合の処理
end

raiseで意図的に例外を発生させてみる
raiceは検証に便利
数に型を渡さないと、 RuntimeErrorを発生させる
RuntimeError : 特定の例外クラスには該当しないエラー

begin
  raise 
rescue => e
  p "error"
end

結果

"error"

rescueのあとにクラスを指定すると、その例外のときのみ処理を中断しないようになる

begin
  raise StandardError
rescue StandardError => e
  p "StandardErrorが発生していますが処理は中断していません"
end

結果

"StandardErrorが発生していますが処理は中断していません"

指定した以外のエラーが発生すると

begin
  raise ArgumentError
rescue ZeroDivisionError => e
  p "ZeroDivisionErrorが発生していますが処理は中断していません"
end

結果

csv_test.rb:2:in `<main>': ArgumentError (ArgumentError)||<


例外オブジェクトからメソッドを呼んで、例外に関する情報を取得できる。

class ... 例外の種類
message ... 例外のメッセージ
backtrace ... 例外の発生した位置に関する情報($@ = $!.backtrace)

begin
  raise StandardError
rescue StandardError => e
  p "StandardErrorが発生していますが処理は中断していません"
  p e.class
end
"StandardErrorが発生していますが処理は中断していません"
StandardError