MySQLベース(2):制約およびデータテーブル操作

5823 ワード

『一』、制約
一、foreign key外部キー制約:親テーブルと子テーブル(PRIMARY KEY外部キー列を有するテーブル)は、同じエンジンストレージを使用する必要があり、一時テーブル2の使用は禁止する.データテーブルの記憶エンジンはInnoDB 3のみである.外部キー列と参照列の金額には、類似のデータ型が必要です.数字の長さや記号があるかどうかは同じでなければなりません.文字型の下の長さは4.外部キー列と参照列はインデックスを作成する必要があります.外部キーにインデックスが存在しない場合、MySQLは自動的にインデックスを作成します.
CREATE TABLE provinces(
 id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 province VARCHAR(20) NOT NULL
);
CREATE TABLE users(
 id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 username VARCHAR(10) NOT NULL,
 pid SMALLINT UNSIGNED ,
 FOREIGN KEY (pid)REFERENCES provinces(id)
);

show indexes from users; クエリー・テーブルの関連性show create table users;外部キー列は自動的にインデックスを作成せず、参照列は自分でインデックスを作成します
二、外部キー制約の参照操作*1.cascade:親テーブルから削除または更新、サブテーブルに一致する行を自動的に削除または更新する例:foreign key(pid)references provinces(id)on delete cascade解釈(このように設定すると、親テーブルがこの行のデータを削除すると、ワードテーブルに関連するデータも削除される)*2.set null:親テーブルから行を削除または更新し、ワードテーブルの外部キー列*3を設定します.restrict:親テーブルの削除または更新を拒否*4.No action:標準sqlのキーワードmysqlでrestrictと同じ
『二』、データテーブル操作
  • 削除列:ALTER TABLE tb 1_name DROP[COLUMN] col_name;
  • ALTER TABLE tb1_name DROP password, DROP name;
  • 複数列追加:ALTER TABLE tb 1_name ADD[COLUMN] (col_name column_definition,…);
  • 追加単列:ALTER TABLE tb!name ADD[COLUMN] col_name column_definition [FIRST|AFTER col_name];
  • ALERT TABLE table_name ADD age TINYINT UNSIGNED NOU NULL DEFAULT 10;
  • プライマリ・キー制約の追加ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] PRIMARY KEY(index_col_name);
  • 一意制約の追加ALTER TABLE tb_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY](index_col_name,...);
  • 外部キー制約の追加:ALTER TABLE users2 ADD FOREIGN KEY(pid) REFERENCES provinces (id);
  • デフォルト制約の追加:ALTER TABLE users2 ALTER age SET DEFAULT 15;
  • デフォルト制約の削除:ALTER TABLE users2 ALTER age DROP DEFAULT;
  • プライマリ・キー制約の削除ALTER TABLE table_name DROP PRIMARY KEY;
  • 一意制約の削除:ALTER TABLE table_name DROP INDEX/KEY( )index_name;
  • 外部キー制約の削除DROP FOREIGN KEY (SHOW CREATE TABLE );またはDROP INDEX ;//外部キーの削除
  • 列定義の変更ここでは列の位置だけでなく、列データ型の変更も可能ALTER TABLE tb_name MODIFY col_name colimn_definition [FIRST|AFTER col_name];
  • 改称ALTER TABLE tb_name CHANGE old_col_name new_col_name col_definition [FIRST|AFTER col_name];
  • データテーブル名の変更ALTER TABLE tb_name RENAME [TO|AS] new_tb_name
    RENAME TABLE tb_name TO new_tb_name[,tb_name2 TO new_tb_name2]
  • 『三』、操作データテーブルの記録
  • 1、insert挿入 挿入操作の際にdefaultとNULLの使い方に注意する.フィールドが自動番号の場合、挿入時にNULLとdefaultで置き換えることができます.フィールドにdefaultの数値が設定されている場合は、挿入時にその数値の代わりにdefaultを使用できます.NULLは、プライマリキー補間の入力です.
  • insert tbname(column…) values(value…);
  • INSERT users VALUES(NULL, 'tom', 22);
    INSERT users VALUES(DEFAULT, 'tom', DEFAULT);
  • 挿入記録方法2:INSERT[INTO]tbl_name SET col_name={expr|DEFAULT}, …
  • 挿入記録方法3:INSERT[INTO]tbl_name [(col_name, … )] SELECT …

  • 2、update更新
  • 単表更新:
    UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition];
  • 例:UPDATE users SET age = age + 5;
  • 3、delete削除delete from tbl_name [where condition];
  • 4、SELECT検索記録
  • 5、where条件式 where後各種条件(>、=、<=、!=、<>、IS NOT NULL)、論理(and,or)により結合方式left join、right join等により、パターンマッチング(IN、NOT IN、like、not like、regexp)により、各種MySQL関数と式を用いてテーブルセットからフィルタ記録させる.
  • 6、クエリ結果パケットGROUP BY [GROUP BY {col_name|position} [ASC|DESC],...]
  • ASC:昇順、デフォルト
  • DESC:降順
  • 7、havingパケット条件select name from tbl_t1 having age <6;#select後のフィールドはhaving後のフィールドとは異なり、エラーselect name,age from tbl_t1 having age <6;havingフィールドが含まれているselectでなければ実行できないselect name from tbl_t1 having count(age)<6;#having後は集約関数式select後は含まない
  • 8、グループ結果のソートOder by+desc/asc
  • 9、limit制限クエリ結果表示数 初期レコード行のオフセット量は0(1ではなく):LIMIT [offset,] rows | rows OFFSET offset;
  • 1番目のパラメータは、1番目に戻ってくる記録行のオフセット量を指定し、
  • 2番目のパラメータは、戻りレコード行の最大数を指定します.