MySQL
DDL
注: 以下では例として db1 を使用しています。
1. 運用データベース
(1) お問い合わせ
SHOW DATABASES;
(2)作成
CTEATE DATABASE db1;
CTEATE DATABASE IF NOT EXISTS db1;
(3) 削除
DROP DATABASE db1;
DROP DATABASE IF EXISTS db1;
(4) データベースの利用
SELECT DATABASE();
USE db1;
2. 動作表
(1) 作成する
# cmd
create table tb_user(
-> id int,
-> username varchar(20),
-> password varchar(32)
-> );
(2) お問い合わせ
show tb_user;
desc tb_user; #查看表的状态
(3) 削除
drop table tb_user;
drop table if exists tb_user;
(4) 修正
テーブル名の変更
alter table usere rename to daqi;
列の追加
alter table daqi add mysqlee int;
列の削除
alter table daqi drop mysqlee;
データ型を変更する
alter table daqi modify name varchar(40);
列名とデータ型を変更する
alter table daqi change name namedq int;
DML
アクションテーブルのデータ
1. データを追加する
insert into daqi(id,name) values(1123242,"张三");
# 给所有列赋值时不用在表后面加()
insert into daqi values(1123,"李四","男","dkfjdk");
# 批量添加用","隔开values后面的()
2. データを変更する
update daqi set sex = '女' where name = '张三';
3. データを削除する
delete from daqi where name = '张三';
DQL
1.条件付きクエリ
select * from daqi where id between 1124 and 1128;
select * from daqi where address is null;
# like模糊查询(可以查姓氏),%为多个位,_为后一个位(如查“达”性,只能查到达三,达四)
select * from daqi where name like '达%';
2. 並べ替えクエリ
昇順
select * from daqi order by id asc;
# 其中asc是默认值,可以省略
降順
select * from daqi order by id desc;
複数レベルの並べ替え
# 当第一个排序规则一样时,按第二个规则排序
select * from daqi order by id asc,idelse asc;
3. グループクエリ
集計関数
注: null は集計関数の操作には関与しません。
# 统计数量 注:不统计null的值
select count(id) from daqi;
# 统计行数,建议如下
select count(*) from daqi;
# 求和
select sum(id) from daqi;
# 求最小值
select min(id) from daqi;
# 求最大值
select max(id) from daqi;
# 求平均数
select avg(id) from daqi;
グループクエリ
# 其中where在分组前限定,having在分组后进行过滤
select sex, sum(id),count(*) from daqi where id > 100 group by sex having count(*) > 1;
4.ページングクエリ
# limit 起始索引,查询条数
#起始索引 = (当前页码 - 1)* 查询条数(每页显示的条数)
select * from daqi limit 0, 3;
select * from daqi limit 3, 3;
制約
# auto_increment为自增
CREATE TABLE emp (
id INT PRIMARY KEY auto_increment,
ename VARCHAR ( 50 ) NOT NULL UNIQUE,
joindate date NOT NULL,
salary DOUBLE ( 7, 2 ) NOT NULL,
bonus DOUBLE ( 7, 2 ) DEFAULT 0
)
外部キーが追加されました
2 つのテーブルをリンクする
テーブルを作成する前に
CREATE TABLE yuan_gong (
id INT PRIMARY KEY,
ename VARCHAR ( 50 ) NOT NULL,
bu_men_id INT NOT NULL,
CONSTRAINT fk_yuan_gong_bu_men FOREIGN KEY ( bu_men_id ) REFERENCES bu_men ( id )
);
テーブルを作成した後
ALTER TABLE yuan_gong ADD CONSTRAINT fk_yuan_gong_bu_men FOREIGN KEY ( bu_men_id ) REFERENCES bu_men ( id )
消去
ALTER TABLE yuan_gong drop foreign key fk_yuan_gong_bu_men;
データベース設計
テーブル関係
1 対 1: 関連付け、外部キーは一意に設定されます
1対多(多対1):従業員と部門など
多対多: 中間テーブルが必要です
alter table tb_order_goods add constraint fk_order_id foreign key(order_id) references tb_order(id);
alter table tb_order_goods add constraint fk_goods_id foreign key(goods_id) references tb_goods(id);
複数テーブルのクエリ
1. 内部結合(交差)
暗黙的な内部結合
select * from yuan_gong, bu_men where yuan_gong.bu_men_id = bu_men.id;
# 起别名 t1和t2
select t1.ename, t2.ename from yuan_gong t1, bu_men t2 where t1.bu_men_id = t2.id;
明示的な内部結合
select * from yuan_gong join bu_men on yuan_gong.bu_men_id = bu_men.id;
外部結合 (左/右テーブル + 交差)
# 左连接
select * from yuan_gong left join bu_men on yuan_gong.bu_men_id = bu_men.id;
# 右连接
select * from yuan_gong right join bu_men on yuan_gong.bu_men_id = bu_men.id;
2. サブクエリ(ネスト)
クエリ内のネストされたクエリ
select * from yuan_gong where id > (select id from yuan_gong where ename = '张三');