前言
本節學習mysql
1、安裝
教程很多了
比如
https://blog.csdn.net/aa541505/article/details/103147115?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158926711519724811830210%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.57652%2522%257D&request_id=158926711519724811830210&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-19-103147115.nonecase&utm_term=mysql
https://blog.csdn.net/bobo553443/article/details/81383194?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158926711519724811830210%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.57652%2522%257D&request_id=158926711519724811830210&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-4-81383194.nonecase&utm_term=mysql
2、簡單介紹
三範式
- 列不可拆分
- 唯一標誌
- 引用主鍵
數據完整性
數據庫啓動
3、操作
數據庫操作
create database animal charset=utf8;# 創建數據庫
show databases; #查看所有庫
drop database animal; #刪除數據庫
select database(); #查看當前庫
use animal; #切換數據庫
表操作
show tables; #查看所有表
show create table dog; #查看創建幫助
create table dog(
id int auto_increment primary key,
name varchar(10) not null
); #創建表
alter table dog add gender bit; #修改表
desc dog; #查看錶結構
rename table dog to cat; #改表名
數據操作
# 增
insert into dog values(1,"拉布拉多",0); #插入數據
insert into dog(name,gender) values("小獵犬",1); #缺省插入
insert into dog values(3,"臘腸",0),(4,"約克夏",1); #批量插入
# 改
update dog set name="泰迪" where id=4;
# 查
select * from dog;
# 刪
delete from dog where name="臘腸"; #物理刪除,刪完id不變
alter table dog add isdelete bit default 0; #搞個標誌位
update dog set isdelete=1 where id=2; #邏輯刪除
4、查詢
先搞個庫
create table stu(
id int auto_increment primary key,
name varchar(10) not null,
birthday datetime,
gender bit default 0,
isdelete bit default 0,
address varchar(100),
score int
);
insert into stu values(1,"小明","2008-01-01",0,0,"北京",90),
(2,"小紅","2007-01-01",1,0,"上海",80),
(3,"小蘭","2006-01-01",1,0,"廣州",100),
(4,"小王","2005-01-01",0,0,"深圳",20),
(5,"老王","2009-01-01",0,0,null,30),
(6,"老劉","2004-01-01",0,0,null,40),
(7,"小麗","2003-01-01",1,0,"東莞",50),
(8,"小芳","2002-01-01",1,0,"福建",60),
(9,"小粒","2001-01-01",0,0,"福州",70);
條件運算
select * from stu where id>=6;
select name from stu where id!=6;
邏輯運算
select name from stu where id>6 and gender=1;
select name from stu where id<4 or gender=0;
模糊查詢
select * from stu where name like "小%"; #%表示任意多個字符
範圍查詢
select * from stu where id in(1,3,5,7);
select * from stu where id between 1 and 5;
select * from stu where address is null;
聚合查詢
select count(*) from stu where gender=0; #個數
select Max(score) from stu; #最大值
select sum(score) from stu where gender=1; #求和
select avg(score) from stu where gender=0; #求平均
分組查詢
select gender as "性別", count(*) from stu group by gender; #男生女生的總數
排序
select * from stu where isdelete=0 order by score desc; #降序,升序用asc
分頁
select * from stu limit 0,3; #從0開始查3個
select * from stu limit 3,2; #從3開始查2個
去重
select distinct adress from stu;
5、表間關係
先建幾個表
# 科目表
create table subjects(
id int auto_increment primary key not null,
title varchar(10) not null
);
insert into subjects values(0,"語文"),
(0,"數學"),
(0,"英語"),
(0,"科學");
# 花名冊
create table stu(
id int auto_increment primary key not null,
name varchar(10) not null,
birthday datetime,
gender bit default 0,
isdelete bit default 0,
address varchar(100),
score int(10)
);
insert into stu values(1,"小明","2008-01-01",0,0,"北京",90),
(2,"小紅","2007-01-01",1,0,"上海",80),
(3,"小蘭","2006-01-01",1,0,"廣州",100),
(4,"小王","2005-01-01",0,0,"深圳",20),
(5,"老王","2009-01-01",0,0,null,30),
(6,"老劉","2004-01-01",0,0,null,40),
(7,"小麗","2003-01-01",1,0,"東莞",50),
(8,"小芳","2002-01-01",1,0,"福建",60),
(9,"小粒","2001-01-01",0,0,"福州",70);
# 分數表
create table scores(
id int primary key auto_increment,
stuid int, #對應花名冊id
subid int, #對應科目表id
score decimal(5,2), #小數,5位數,保留1位
foreign key(stuid) references stu(id), #外鍵關聯
foreign key(subid) references subjects(id)
);
insert into scores values(0,1,1,80),(0,2,2,60),(0,2,3,70),(0,3,1,90),(0,4,4,60),(0,5,2,75);
鏈接查詢
# 每個學生每個學科的成績
select stu.name,subjucts.title,scores.score from scores inner join stu on scores.stuid=stu.id inner join subjects on scores.subid=subjects.id;
# 左鏈接
select subjucts.title,scores.score from scores right join subjects on scores.subid=subjects.id;
例子
select stu.name,subjects.title,avg(scores.score),max(scores.score)
from scores
inner join stu on scores.stuid=stu.id
inner join subjects on scores.subid=subjects.id
group by stu.name;
6、視圖
用於對複雜查詢的封裝
# 創建視圖
create view studentscore as select stu.name,scores.score from scores inner join stu on scores.stuid=sut.id;
# 使用視圖
select * from studentscore;
# 刪除
drop view studentscore;
7、查詢效率
- 數據類型越小越好
- 能用整型最好
- 用0來代替null
索引
# 創建索引
create index name on tablename(key(length));
# 查看索引
show index from tablename;
# 刪除索引
drop index name on tablename;
8、備份
# 備份
mysqldump -u root -p db_name table_name > 備份文件的絕對路徑
# 恢復
mysql -u root -p db_name < 備份文件的絕對路徑
9、與python交互
# 安裝
# pip install pymysql
import pymysql
try:
# 1.鏈接 數據庫 鏈接對象 connection()
conn = pymysql.Connect(
host="localhost",
port=3306,
db='animal',
user='root',
passwd="mysql",
charset='utf8'
)
# 2. 創建 遊標對象 cursor()
cur = conn.cursor()
# 增加一條數據 科目表--GO語言
insert_sub = 'insert into subjects values(0,"GO語言")'
result = cur.execute(insert_sub)
print(result)
# 修改
update_sub = 'update subjects set title="區塊鏈" where id=7'
result = cur.execute(update_sub)
print(result)
# 刪除
delete_sub = 'delete from stu where id=8'
result = cur.execute(delete_sub)
print(result)
# 查找
find_sub = 'select * from subjects where id=1'
cur.execute(find_sub)
result = cur.fetchone() #一行數據一個元組
print(result)
find_sub = 'select * from subjects'
cur.execute(find_sub)
result = cur.fetchall() #一個大元組包含多個小元組
print(result)
# 提交事務
conn.commit()
# 關閉遊標
cur.close()
# 關閉鏈接
conn.close()
except Exception as e:
print(e)
結語
對mysql做了個簡單學習