什么是索引
索引就像是一本書的目錄一樣,能夠快速找到所需要的內容
索引的作用
加快查詢速率,降低IO成本加快表與表之間的連接,減少分組和排序時間
索引類型
普通索引:沒有唯一性的基本索引
唯一索引:有唯一性,但可以為空
主鍵索引:有唯一性且不能夠為空
全文索引:
單列索引與多列索引
創建索引的依據
表的主鍵,外鍵必須有索引
數量超過300行的必須有索引
經常與其他表連接大表,在連接字段應該有索引
唯一性差,頻繁更新的不適合建索引
將常出現在where字段的應該建索引
索引應該建在選擇性高的小字段上
創建查看刪除索引
1.普通
create index 索引名字 on 表名(把誰設為索引);
create index sy on wk(年齡);
2.查看索引
show index from 庫名.表名\G; 查看並以豎列形式顯示出來
show keys from 庫名.表名\G;
3.唯一索引
create unique index 索引名字 on 表名(把誰設為唯一索引);
create unique index wysy on wk(姓名);
4.主鍵索引
1.在create建表時創建
2.若忘記在建表時創建
alter table 表名 add primary key(把誰建為主鍵索引);
5.刪除索引
非主鍵
drop index 索引名字 on 表名;
alter tables 表名 drop index 索引名字;
主鍵索引
alter table 表名 drop primary key;
事物處理控制命令
begin 開始一個事務
commit 提交一個事務
rollback 回滾一個事物
set 命令進行控制
set autocommit=0; #禁止自動提交 set autocommit=0; #開啟自動提交
MySQL 內連接、左(外)連接、右(外)連接
內連接
就是找兩個表之間的交集
關鍵字:inner join on
select * from 表名1 自定義的表1的別名 inner join 表名2 自定義的表2的別名 on 表一的別名.a_id = 表2的別名.b_id; select * from a_table a inner join b_table b on a.a_id = b.b_id;
查看表內所有 表a_table 定義別名a 兩個表之間的交集 表b_table 定義別名b 通過格式上的b_id作對比找出b_id的並集
左(外)連接
以左邊表為基准,找右邊表里和左邊一樣的列出來
關鍵字:left join on 或 left outer join on #兩種寫法都行,沒區別,前者是后者的簡寫
select * from a_table a left join b_table b on a.a_id = b.b_id;
右(外)連接
跟左連接差不多,以右邊表為基准,右邊的都列出來,找左邊表里和右邊一樣的列出來
關鍵字:right join on 或 right outer join on
select * from a_table a right join b_table b on a.a_id = b.b_id;