大体は覚えているけど、たまーに構文を忘れてしまったりするときの為のメモ。全部入れると長くなるので、この記事はテーブルに関連するCRUDのみ。
更新・削除に関しては失敗するとリストアが大変だったり、最悪バックップ取っていなくて復旧不可なんて事もあるので、実際コマンド実行前によく確認しましょう。
コメント
-- これは1行コメント
# これも1行コメント
/*
これは複数行に
またがって書ける
コメント
*/
CREATE TABLE
CREATE TABLE `hoge` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`hoge_bool` bool DEFAULT 0 COMMENT 'bool',
`hoge_tint` tinyint DEFAULT NULL COMMENT 'tinyint',
`hoge_int` int DEFAULT NULL COMMENT 'int',
`hoge_uint` int unsigned DEFAULT NULL COMMENT 'int unsigned',
`hoge_bint` bigint DEFAULT NULL COMMENT 'bigint',
`hoge_float` float DEFAULT NULL COMMENT 'float',
`hoge_double` double DEFAULT NULL COMMENT 'double',
`hoge_decimal` decimal(16,4) DEFAULT NULL COMMENT 'decimal',
`hoge_char` char(20) DEFAULT NULL COMMENT 'char',
`hoge_varchar` varchar(2000) DEFAULT NULL COMMENT 'varchar',
`hoge_text` text DEFAULT NULL COMMENT 'text',
`hoge_blob` blob DEFAULT NULL COMMENT 'blob',
`hoge_date` date DEFAULT NULL COMMENT 'date',
`hoge_datetime` datetime DEFAULT NULL COMMENT 'datetime',
`hoge_timestamp` timestamp DEFAULT NULL COMMENT 'timestamp',
PRIMARY KEY (`id`),
UNIQUE KEY `u_key1` (`hoge_char`),
KEY `key1` (`hoge_date`,`hoge_int`),
FULLTEXT KEY `ft_key1` (`hoge_varchar`,`hoge_text`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='table comment';
ALTER TABLE
# カラムの追加
ALTER TABLE `table_neme` add column `add_column_name` varchar(50) DEFAULT NULL COMMENT 'COMMENT MESSAGE HERE' after `base_colmun_name`;
# カラム内容の変更(カラム名変更や型の変更)
ALTER TABLE `table_name` change column `before_column_name` `after_column_name` text DEFAULT NULL COMMENT 'COMMENT MESSAGE here';
# カラム削除
ALTER TABLE `table_name` drop `column_name`;
CREATE INDEX
# インデックスの場合
CREATE INDEX `index_name` ON `table_name` (`column1`);
# フルテキストインデックスの場合
CREATE FULLTEXT INDEX `index_name` ON `table_name` (`column1`,`column2`) WITH PARSER ngram;
SELECT
SELECT hoge.*, fuga.*
FROM hoge
INNER JOIN fuga
ON hoge.id = fuga.hoge_id
WHERE hoge.hoge_date > '2020-01-01'
AND hoge.hoge_bool = 1
UPDATE
updateは間違ったものを更新しないように条件をよく確認すること。
UPDATE hoge set hoge_bool=0, hoge_date=now(), hoge_datetime=now()
WHERE id=1;
DELETE
DELETEも間違ったものを削除しないように条件をよく確認すること
DELETE FROM hoge
WHERE id=1;
TRUNCATE
DELETEと異なるのは、AUTO INCREMENTでINDEXを張っている場合はリセットされるのと、トランザクションが張れないので巻き戻し(rollback)が不可な点。テストなどでゴミデータがたまって掃除する時など用。
TRUNCATE TABLE hoge;
コメント