MySQLベース(2):制約およびデータテーブル操作
5823 ワード
『一』、制約
一、foreign key外部キー制約:親テーブルと子テーブル(PRIMARY KEY外部キー列を有するテーブル)は、同じエンジンストレージを使用する必要があり、一時テーブル2の使用は禁止する.データテーブルの記憶エンジンはInnoDB 3のみである.外部キー列と参照列の金額には、類似のデータ型が必要です.数字の長さや記号があるかどうかは同じでなければなりません.文字型の下の長さは4.外部キー列と参照列はインデックスを作成する必要があります.外部キーにインデックスが存在しない場合、MySQLは自動的にインデックスを作成します.
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 tb 1_name ADD[COLUMN] (col_name column_definition,…); 追加単列:ALTER TABLE tb!name ADD[COLUMN] col_name column_definition [FIRST|AFTER col_name]; プライマリ・キー制約の追加 一意制約の追加 外部キー制約の追加: デフォルト制約の追加: デフォルト制約の削除: プライマリ・キー制約の削除 一意制約の削除: 外部キー制約の削除 列定義の変更ここでは列の位置だけでなく、列データ型の変更も可能 改称 データテーブル名の変更 『三』、操作データテーブルの記録1、insert挿入 挿入操作の際にdefaultとNULLの使い方に注意する.フィールドが自動番号の場合、挿入時にNULLとdefaultで置き換えることができます.フィールドにdefaultの数値が設定されている場合は、挿入時にその数値の代わりにdefaultを使用できます.NULLは、プライマリキー補間の入力です. insert tbname(column…) values(value…); 挿入記録方法2:INSERT[INTO]tbl_name SET col_name={expr|DEFAULT}, … 挿入記録方法3:INSERT[INTO]tbl_name [(col_name, … )] SELECT …
2、update更新 単表更新: 例:3、delete削除 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 ASC:昇順、デフォルト DESC:降順 7、havingパケット条件 8、グループ結果のソートOder by+desc/asc 9、limit制限クエリ結果表示数 初期レコード行のオフセット量は0(1ではなく): 1番目のパラメータは、1番目に戻ってくる記録行のオフセット量を指定し、 2番目のパラメータは、戻りレコード行の最大数を指定します.
一、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 tb1_name DROP password, DROP 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]
INSERT users VALUES(NULL, 'tom', 22);
INSERT users VALUES(DEFAULT, 'tom', DEFAULT);
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition];
UPDATE users SET age = age + 5;
delete from tbl_name [where condition];
[GROUP BY {col_name|position} [ASC|DESC],...]
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後は含まないLIMIT [offset,] rows | rows OFFSET offset;