数据库的初印象
一、數據庫管理系統(tǒng)
MySQL、 Qracle、SQLite、Access、MS SQL Server
數據庫系統(tǒng)的特點:1.數據結構化
2.數據共享、冗余度低、易擴充
3.數據獨立性高
4.數據由DBMS統(tǒng)一管理和控制:數據的安全性保護、數據的完整性檢查、并發(fā)控制、數據庫恢復
二、數據庫的優(yōu)點
程序穩(wěn)定性:服務的機器崩潰不影響數據和另外的服務。
數據一致性:操作和存儲的數據在一起。
并發(fā):支持并發(fā),數據庫的操作都是通過網絡,數據庫支持并發(fā)的網絡操作,不需要我們手寫socket
效率:使用數據庫對數據進行增刪改查高出我們對文件的處理。
ps:并發(fā)是指兩個或多個事件在同一時間間隔內發(fā)生。在多道程序環(huán)境下,并發(fā)性是指在一段時間宏觀上有多個程序在同時執(zhí)行,但在單處理機系統(tǒng)中,每一時刻只能有一道程序在執(zhí)行,所以微觀上這些程序只能交替執(zhí)行。
三、分類
關系型和非關系型
簡單的說,關系型數據庫需要有表結構,非關系型數據庫是key-value存儲的,沒有表結構
關系型:MySQL、SQLite,db2,Oracle,access,sql server
非關系型:mongodb,redis,memcache
四、初識sql語句
創(chuàng)建表:create+table+表名(字段名? [(寬度)? 約束條件])
create table staff_info (id int,name varchar(50),age int(3));
查看表結構:desc+表名? ? desc即describle
1.操作數據庫:增(create)、刪(drop)、改(alter)、查(show)+database+庫名
2.操作表:同上+table+表名? ? ??
3.操作字段:增(insert into+表名+values())、刪(delete from+表名where+字段)、改(updata+表名+字段)、查(select +字段)
清空表:
delete from t1; #如果有自增id,新增的數據,仍然是以刪除前的最后一樣作為起始。
truncate table t1;數據量大,刪除速度比上一條快,且直接從零開始,
建立表之間的關系:關聯(lián)方式(foreign key)
如:foreign key(press_id) references press(id)
on delete cascade
on update cascade;
? ? ? ?ps:括號里分別為兩個表中的一個字段、外鍵的字段一定要保證unique。cascade表示級聯(lián)刪除和更新
?五、表查詢
?1.單表:select? 字段? ......? ?from 表名/where 條件/Group? By field/Having? 篩選/Order by field/limit 限制條數? ? ? ? ? ? ?優(yōu)先級從高到低依次從左往右
2. 多表:
?select employee.id,employee.name,employee.age,department.name from employee inner/left/right join department on employee.dep_id=department.id;? ? ? ? ? 內聯(lián)左聯(lián)/右聯(lián)
?3.全外聯(lián)接:
select * from employee left join department on employee.dep_id = department.id
union
select * from employee right join department on employee.dep_id = department.id;
4.關鍵字IN查詢
?使用IN關鍵字,進行子查詢時,內層查詢語句返回一個數據列,這個數據列中的值,將供外層查詢語句進行比較操作
#查看技術部員工姓名 select name from employeewhere dep_id in (select id from department where name='技術'); View Code六、索引
本質:通過不斷地縮小想要獲取數據的范圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是說,有了這種索引機制,我們可以總是用同一種查找方式來鎖定數據。
?數據結構:b+樹
聚集索引:按照表中的主鍵構造一顆b+樹,葉子節(jié)點存放著所有的數據
輔助索引:每張表上可以有多個輔助索引,但只能有一個聚集索引。輔助索引的葉子節(jié)點不包含行記錄的全部數據。
覆蓋索引:從輔助索引中就可以得到查詢記錄,而不需要查詢聚集索引中的記錄。
使用覆蓋索引的一個好處是:輔助索引不包含整行記錄的所有信息,故其大小要遠小于聚集索引,因此可以減少大量的IO操作
聯(lián)合索引:聯(lián)合索引是指對表上的多個列合起來做一個索引,即多個索引列。好處:是在第一個鍵相同的情況下,已經對第二個鍵進行了排序處理。
七、操作mysql
mysql的安裝:pip install PyMySQL
1.python連接數據庫
import pymysqldb = pymysql.connect("數據庫ip","用戶","密碼","數據庫" ) # 打開數據庫連接 cursor.execute("SELECT VERSION()") # 使用 execute() 方法執(zhí)行 SQL 查詢 data = cursor.fetchone() # 使用 fetchone() 方法獲取單條數據 print ("Database version : %s " % data) db.close() # 關閉數據庫連接 View Code2.創(chuàng)建表操作
import pymysql# 打開數據庫連接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )# 使用 cursor() 方法創(chuàng)建一個游標對象 cursor cursor = db.cursor()# 使用 execute() 方法執(zhí)行 SQL,如果表存在則刪除 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 使用預處理語句創(chuàng)建表 sql = """CREATE TABLE EMPLOYEE (FIRST_NAME CHAR(20) NOT NULL,LAST_NAME CHAR(20),AGE INT, SEX CHAR(1),INCOME FLOAT )"""cursor.execute(sql)# 關閉數據庫連接 db.close() View Code3.操作數據
import pymysql# 打開數據庫連接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 插入語句 sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME)VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" # SQL 更新語句 sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M') # SQL 刪除語句 sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20) try:cursor.execute(sql) # 執(zhí)行sql語句db.commit() # 提交到數據庫執(zhí)行 except:db.rollback() # 如果發(fā)生錯誤則回滾# 關閉數據庫連接 db.close() View Code import pymysql# 打開數據庫連接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 查詢語句 sql = "SELECT * FROM EMPLOYEE \WHERE INCOME > %s" % (1000) try:cursor.execute(sql)# 執(zhí)行SQL語句results = cursor.fetchall()# 獲取所有記錄列表for row in results:fname = row[0]lname = row[1]age = row[2]sex = row[3]income = row[4]# 打印結果print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \(fname, lname, age, sex, income )) except:print ("Error: unable to fetch data")# 關閉數據庫連接 db.close() View CodePython查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。
- fetchone():?該方法獲取下一個查詢結果集。結果集是一個對象
- fetchall():?接收全部的返回結果行.
- rowcount:?這是一個只讀屬性,并返回執(zhí)行execute()方法后影響的行數。
轉載于:https://www.cnblogs.com/Bin-y/p/10339614.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 2.3 os 模块
- 下一篇: [洛谷P1822]魔法指纹