日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库的初印象

發(fā)布時(shí)間:2024/4/17 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库的初印象 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、數(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 Code

2.創(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 Code

3.操作數(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 Code

Python查詢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é)

以上是生活随笔為你收集整理的数据库的初印象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。