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