データベース接続#
mysql -u user -p
//例:mysql -u root -p
一般的なエラー:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), これは MySQL サーバーデーモン(Unix)またはサービス(Windows)が実行されていないことを意味します。
接続終了#
QUIT または Ctry + D
データベースの表示、データベースの作成、データベースの使用#
show databases;
デフォルトデータベース:
mysql - ユーザー権限関連データ
test - ユーザーテストデータ
Information_schema - MySQL自体のスキーマ関連データ
データベースの作成:
create database db1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; #utf8エンコーディング
create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; #gbkエンコーディング
データベースの使用:
use db1;
現在使用しているデータベース内のすべてのテーブルを表示:
SHOW TABLES;
ユーザー管理#
ユーザーの作成:
create user 'ユーザー名'@'IPアドレス' identified by 'パスワード';
ユーザーの削除:
drop user 'ユーザー名'@'IPアドレス';
ユーザーの変更:
rename user 'ユーザー名'@'IPアドレス';
to '新しいユーザー名'@'IPアドレス';
パスワードの変更:
set password for 'ユーザー名'@'IPアドレス' = Password('新しいパスワード');
注:ユーザー権限関連データは mysql データベースの user テーブルに保存されているため、直接操作することも可能ですが(推奨しません)
権限管理#
mysql の権限に関する制限は以下の通りです:
all privileges:grantを除くすべての権限
select:読み取り権限のみ
select,insert:読み取りおよび挿入権限
...
usage:アクセス権なし
alter:alter tableの使用
alter routine:alter procedureおよびdrop procedureの使用
create:create tableの使用
create routine:create procedureの使用
create temporary tables:create temporary tablesの使用
create user:create user、drop user、rename userおよびrevoke all privilegesの使用
create view:create viewの使用
delete:deleteの使用
drop:drop tableの使用
execute:callおよびストアドプロシージャの使用
file:select into outfileおよびload data infileの使用
grant option:grantおよびrevokeの使用
index:indexの使用
insert:insertの使用
lock tables:lock tableの使用
process:show full processlistの使用
select:selectの使用
show databases:show databasesの使用
show view:show viewの使用
update:updateの使用
reload:flushの使用
shutdown:mysqladmin shutdownの使用(MySQLをシャットダウン)
super:change master、kill、logs、purge、masterおよびset globalの使用。mysqladminのデバッグログインも許可されます
replication client:サーバーの位置へのアクセス
replication slave:レプリケーションスレーブによる使用
データベースおよび内部の他の権限は以下の通りです:
データベース名.* //データベース内のすべて
データベース名.テーブル //指定されたデータベース内の特定のテーブル
データベース名.ストアドプロシージャ //指定されたデータベース内のストアドプロシージャ
*.* //すべてのデータベース
ユーザーおよび IP の権限は以下の通りです:
ユーザー名@IPアドレス //ユーザーはこのIPの下でのみアクセス可能
ユーザー名@192.168.1.% //ユーザーはこのIP範囲内でのみアクセス可能(ワイルドカード%は任意を示す)
ユーザー名@% //ユーザーは任意のIPからアクセス可能(デフォルトのIPアドレスは%)
権限の確認:
show grants for 'ユーザー'@'IPアドレス'
権限の付与:
grant 権限 on データベース.テーブル to 'ユーザー'@'IPアドレス'
権限の取り消し:
revoke 権限 on データベース.テーブル from 'ユーザー名'@'IPアドレス'
権限付与の例:
grant all privileges on db1.tb1 TO 'ユーザー名'@'IP'
grant select on db1.* TO 'ユーザー名'@'IP'
grant select,insert on *.* TO 'ユーザー名'@'IP'
revoke select on db1.tb1 from 'ユーザー名'@'IP'
MySQL テーブル操作#
テーブルの表示:
show tables; //データベース内のすべてのテーブルを表示
select * from テーブル名; //テーブルのすべての内容を表示
テーブルの作成:
create table テーブル名(
列名 型 NULL許可,
列名 型 NULL許可
)ENGINE=InnoDB DEFAULT CHARSET=utf8
例:
CREATE TABLE 'tab1'(
'nid' int(11) NOT NULL auto_increment,
'name' varchar(255) DEFAULT zhangyanlin,
'email' varchar(255),
PRIMARY KEY('nid')
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
注:
- デフォルト値:列を作成する際にデフォルト値を指定でき、データを挿入する際に明示的に設定しない場合は自動的にデフォルト値が追加されます。
- 自動増分:列が自動増分列として設定されている場合、データを挿入する際にこの列を設定する必要はなく、自動的に増分されます(テーブル内には 1 つの自動増分列のみ存在可能)。注意:1. 自動増分列はインデックス(主キーを含む)である必要があります。2. 自動増分にはステップサイズと開始値を設定できます。
- 主キー:特別な一意のインデックスで、重複を許可しません。主キーが単一の列である場合、その値は一意である必要があります。複数の列の場合、その組み合わせは一意である必要があります。
テーブルの削除:
drop table テーブル名
テーブルの内容をクリア:
delete from テーブル名
trucate table テーブル名
テーブルの変更:
列の追加:
alter table テーブル名 add 列名 型
列の削除:
alter table テーブル名 drop column 列名
列の変更:
alter table テーブル名 modify column 列名 型; -- 型
alter table テーブル名 change 元の列名 新しい列名 型; -- 列名、型
主キーの追加:
alter table テーブル名 add primary key(列名);
主キーの削除:
alter table テーブル名 drop primary key;
alter table テーブル名 modify 列名 int, drop primary key;
外部キーの追加:
alter table 従テーブル add constraint 外部キー名(形:FK_従テーブル_主テーブル) foreign key 従テーブル(外部キー列) references 主テーブル(主キー列);
外部キーの削除:
alter table テーブル名 drop foreign key 外部キー名
デフォルト値の変更:
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
デフォルト値の削除:
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
基本データ型#
MySQL のデータ型は大きく分けて:数値、時間、文字列です。
bit[(M)]
バイナリビット(101001)、mはバイナリビットの長さを示します(1-64)、デフォルトm=1
tinyint[(m)] [unsigned] [zerofill]
小さな整数、データ型は範囲内の整数値を保存するために使用されます
符号付き:-128 ~ 127
符号なし:0 ~255
特別なこと:MySQLにはブール値がなく、tinyint(1)を使用して構築されます。
int[(m)] [unsigned] [zerofill]
整数、データ型は範囲内の整数値を保存するために使用されます
符号付き:-2147483648 ~ 2147483647
符号なし:0 ~ 4294967295
特別なこと:整数型のmは表示のためだけに使用され、ストレージ範囲には制限がありません。例えば: int(5)、データを2として挿入すると、select時に表示されるデータは:00002になります。
bigint[(m)] [unsigned] [zerofill]
大きな整数、データ型は範囲内の整数値を保存するために使用されます
符号付き:-9223372036854775808 ~ 9223372036854775807
符号なし:0 ~ 18446744073709551615
decimal[(m[,d])] [unsigned] [zerofill]
正確な小数値、mは数字の総数(負号を含まない)、dは小数点以下の桁数です。mの最大値は65、dの最大値は30です。
特別なこと:正確な数値計算が必要な場合はこの型を使用します。
decimalが正確な値を保存できる理由は、その内部が文字列として保存されているからです。
Float[(M,D)] [UNSIGNED] [ZEROFILL]
単精度浮動小数点数(非正確な小数値)、mは数字の総数、dは小数点以下の桁数です。
符号なし:-3.402823466E+38から-1.175494351E-38、0
符号付き:0、1.175494351E-38から3.402823466E+38まで
//数値が大きくなるほど、正確性が低下します。
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
倍精度浮動小数点数(非正確な小数値)、mは数字の総数、dは小数点以下の桁数です。
符号なし:-1.7976931348623157E+308から-2.2250738585072014E-308、0、2.2250738585072014E-308から1.7976931348623157E+308まで
符号付き:0、2.2250738585072014E-308から1.7976931348623157E+308まで
//数値が大きくなるほど、正確性が低下します。
char(m)
charデータ型は固定長の文字列を表すために使用され、最大255文字を含むことができます。mは文字列の長さを示します。
PS:データがmの長さより小さくても、mの長さを占有します。
varchar(m)
varcharデータ型は可変長の文字列を表すために使用され、最大255文字を含むことができます。mはこのデータ型が保存できる文字列の最大長を示します。最大値より小さい長さの文字列はこのデータ型に保存できます。
注:varcharは柔軟に使用できますが、システム全体のパフォーマンスの観点からは、charデータ型の処理速度が速く、場合によってはvarcharの処理速度を50%超えることもあります。したがって、ユーザーはデータベース設計時にさまざまな要因を考慮し、最適なバランスを達成する必要があります。
text
textデータ型は可変長の大きな文字列を保存するために使用され、最大65535 (2**16 − 1)文字を含むことができます。
mediutext
最大16,777,215 (2**24 − 1)文字の長さのTEXT列
longtext
最大4,294,967,295または4GB (2**32 − 1)文字の長さのTEXT列
enum
列挙型
ENUM列は最大65,535の異なる要素を持つことができます。(実際の制限は3000未満です。)
例:
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
INSERT INTO shirts(name, size) VALUES('dress shirt', 'large'),('t-shirt','medium'),('polo shirt','small');
set
集合型
SETは最大64の異なるメンバーを持つことができます。
例:
CREATE TABLE myset(col SET('a', 'b','c', 'd'));
INSERT INTO myset(col)VALUES('a,d'),('d,a'),("a,d,a"),('a,d,d'), ('d,a,d');
DATE
YYYY-MM-DD(1000-01-01/9999-12-31)
TIME
HH:MM:SS('-838:59:59'/'838:59:59')
YEAR
YYYY(1901/2155)
DATETIME
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)
TMESTAMP
YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037年のある時)
MySQL テーブル内容操作#
挿入
insert into テーブル(列名,列名...) values(値,値...)
insert into テーブル(列名,列名...) values(値,値...),(値,値,値...)
insert into テーブル(列名,列名...) select(列名,列名...) from テーブル
例:
insert into tab1(name,email) values('zhangsan','[email protected]')
削除
delete from テーブル //テーブル内のすべての内容を削除
delete from テーブル where id=1 and name='zhangsan' //ID =1 およびname='zhangsan' の行データを削除
更新
update テーブル set name='zhangsan' where id>1
検索
select * from テーブル
select * from テーブル where id > 1
select nid,name,gender as gg from テーブル where id > 1
- 条件判断 where
select * from テーブル where id > 1 and name != 'zhangsan' and num=12;
select * from テーブル where id between 5 and 16;
select * from テーブル where id in (11,22,33)
select * from テーブル where id not in (11,22,33)
select * from テーブル where id in (select nid from テーブル)
- ワイルドカード like
select * from テーブル where name like 'zhang%' //zhangで始まるすべて(複数の文字列)
select * from テーブル where name like 'zhang_' //zhangで始まるすべて(1文字)
- 制限 limit
select * from テーブル limit 5; //最初の5行
select * from テーブル limit 4,5 //4行目から5行目まで
select * from テーブル limit 5 offset 4 //4行目から5行目まで
- ソート asc,desc
select * from テーブル order by 列 asc //「列」に基づいて小さい順に並べる
select * from テーブル order by 列 desc //「列」に基づいて大きい順に並べる
select * from テーブル order by 列1 desc,列2 asc //「列1」に基づいて大きい順に並べ、同じ場合は列2に基づいて小さい順に並べる
- グループ化 group by
select num from テーブル group by num
select num,nid from テーブル group by num,nid
select num,nid from テーブル where nid > 10 group by num,nid order nid desc
select num,nid,count(*),sum(score),max(score),min(score) from テーブル group by num,nid
select num from テーブル group by num having max(id) > 10
特別なこと:group byはwhereの後、order byの前に記述する必要があります。