mysql知識點
阿新 • • 發佈:2020-12-11
mysql總結
基礎概念
什麼是mysql以及描述
mysql(dbms)就是一個操作檔案的軟體。對於資料庫我們可以把它作為一個資料夾,而表就可以看作是一個檔案(excel、csv)等等。
mysql屬於什麼型別的資料庫
資料庫分為關係型資料庫和非關係型資料庫。其中關係型資料庫包括:sql server 、sqlite、mysql、orcle、db2等等;非關係型資料庫包括:mongodb、redis等等。
基本操作
資料庫
- 建立資料庫
create databases name default character set 'utf8'
- 刪除資料庫
drop database name
使用者
- 建立
create user name%'ip' indentified by password
- 授權
grant viliges on database[.table] to user
- 撤權
revoke viliges on database[.table] from user
- 修改密碼
set password for user = new_password
表
-
建立表
create table name(id int not null auto_increment primary key, name char(10)) engine = innodb default character set 'utf8';
-
刪除表
drop table name
- 當涉及到多個相關聯的表時,先刪除有外來鍵的表。
-
外來鍵
-
一種約束,提高資料的安全性,分別查詢,節省空間。
-
` create table tb1( id int not null auto_increment primary key, name char(10), class_id int, constraint foreign key (tb1.class_id) references tb2(id) ) engine = innodb character set 'utf8';`
-
-
索引
-
建立
-
create index ix_name on table(column_name);
-
-
刪除
drop index ix_name on table;
-
-
資料型別
- 整型
- int tinyint bigint
- 浮點數
- float double decimal
- 字元
- varchar char text
- 日期
- date datetime
- 整型
-
集合
-
通過集合,在建立表的時候就可以使用集合的子集。
-
` create table tb1( id int not null auto_increment primary key, name char(10), style set('red', 'big', 'blue','small') ) engine = innodb character set 'utf8';`
-
-
列舉
-
` create table tb1( id int not null auto_increment primary key, name char(10), gender enum('男', '女') ) engine = innodb character set 'utf8';`
-
行
-
增
-
單
insert into table(age, name) values(age_value, name_value);
-
多
-
insert into table(age, name) select age, name from table2;
-
-
-
刪
- 刪除表
drop table name;
- 刪除內容
delete from table;
truncate from table;
- 刪除表
-
查
- 單表
select * from table;
- 多表
select * from tb1, tb2 where tb1.id = tb2.id;
select * from tb1 left join tb2 on tb1.id = tb2.id;
,inner join、left join、right join。left join 以左邊的表格為基準在右邊的的表格中進行匹配,若右邊的表格中沒有則為null。inner join作用類似於left join,但是它會就見值為null的行給遮蔽了。
- 單表
-
改
update table_name set age = ? where id = ?
高階操作
觸發器
-
建立(before -->new/after -->odd)
-
delimiter // create trigger name on table before/after insert/update/delete for each row begin select * from table2; end // delimiter ;
-
-
刪除
-
drop trigger name;
-
儲存過程
儲存過程就是將多個操作語句封裝在一起,通過一個名字呼叫。
-
建立
-
delimiter // create procedure name() begin select * from table; end // delimiter ;
-
-
刪除
-
drop procedure name;
-
-
使用
-
call name();
-
-
高階(含引數)
-
in
-
out
-
inout
-
delimiter // create procedure name( in var1 int, out var2 int, inout var3 int ) begin declare var4 int; set var4 = xxxx; end // delimiter ;
-
檢視
-
建立
-
create view name as ( select * from table; )
-
-
使用
-
select * from name;
-
-
刪除
-
drop view name;
-
分頁效能優化
- 資料較少時
select * from table limit 10;
- 當資料較大時(當前頁面的最大id -->max_id, 最小id-->min_id
- 下一頁
select * from table where id > max_id limit 10;
- 上一頁
select * from table where id < min_id order by id desc limit 10;
- 特殊情況,當前處於192 193 194 195,要194的
select * from (select * from table where id > 192.max_id limit 20) order by id desc limit 10;
- 下一頁
導致不能命中索引的情況
- like
- or
- order by(主鍵除外)
- >=(主鍵除外)
- !=(主鍵除外)
- 型別不一致(主鍵除外)
不推薦的情況
- select *
- 多使用count(1) 代替count(*)
設定變數
-
自動增長步長
set session auto_increment_increment = xxx;
基於會話
-
自動增長的起始值
set session auto_increment_offset = xxx;
-
設定變數
set session/global varible = xxx;
python操作資料庫
基本
-
pymysql
-
import pymysql conn = pymysql cursor = sql = 'select * from table' cursor.execute(sql, []) result = cursor.fetchall() cursor.close() conn.close()
-
高階
- sqlalchemy