mysql函數操作數據庫,mysql數據庫基本操作語句

本文目錄一覽:

掌握Python 操作 MySQL 數據庫

本文Python 操作 MySQL 數據庫需要是使用到 PyMySQL 驅動

Python 操作 MySQL 前提是要安裝好 MySQL 數據庫並能正常連接使用,安裝步驟詳見下文。

注意: 安裝過程我們需要通過開啟管理員權限來安裝,否則會由於權限不足導致無法安裝。

首先需要先下載 MySQL 安裝包, 官網下載地址 下載對應版本即可,或直接在網上拉取並安裝:

權限設置:

初始化 MySQL:

啟動 MySQL:

查看 MySQL 運行狀態:

Mysql安裝成功後,默認的root用戶密碼為空,你可以使用以下命令來創建root用戶的密碼:

登陸:

創建數據庫:

查看數據庫:

PyMySQL 模塊使用 pip命令進行安裝:

假如系統不支持 pip 命令,可以使用以下方式安裝:

pymysql .connect 函數:連接上數據庫

輸出結果顯示如下:表面數據庫連接成功

使用 pymysql 的 connect() 方法連接數據庫,connect 參數解釋如下:

conn.cursor():獲取游標

如果要操作數據庫,光連接數據是不夠的,咱們必須拿到操作數據庫的游標,才能進行後續的操作,游標的主要作用是用來接收數據庫操作後的返回結果,比如讀取數據、添加數據。通過獲取到的數據庫連接實例 conn 下的 cursor() 方法來創建游標,實例如下:

輸出結果為:

cursor 返回一個游標實例對象,其中包含了很多操作數據的方法,如執行sql語句,sql 執行命令: execute() 和 executemany()

execute(query,args=None):

executemany(query,args=None):

其他游標對象如下表:

完整數據庫連接操作實例如下:

以上結果輸出為:

創建表代碼如下:

如下所示數據庫表創建成功:

插入數據實現代碼:

插入數據結果:

Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。

查詢數據代碼如下:

輸出結果:

DB API中定義了一些數據庫操作的錯誤及異常,下表列出了這些錯誤和異常:

本文給大家介紹 Python 如何連接 Mysql 進行數據的增刪改查操作,文章通過簡潔的代碼方式進行示例演示,給使用 Python 操作 Mysql 的工程師提供支撐。

MySQL(DML數據操作語言,添加/刪除/修改數據庫數據)

插入數據

insert into 表名(字段) values(‘數據’);

insert into 表名1(name,age) select name,age from 表2; #表2 數據信息複製到表1

修改數據

update 表名 set ‘字段’=’數據’;    #修改數據

delect from 表名 where 字段=值;   #刪除數據

truncate table 表名;           #清空所有數據 且無法恢復

DQL (數據查詢語言,用來查詢數據)

select 要查詢字段 from 表名 [where 滿足條件];

[group by 分組依據]

[order by 排序依據]

[limit 限定輸出結果]

select * from 表名;         #查詢 表 所有數據

select 字段 字段 from 表名;      #查詢指定字段數據

select st.name,st.age,th.name,th.age from st,th;            #查詢一個或多個  表中的數據

SELECT 字段名 FROM 表名 WHERE 條件1 OR 條件2 […OR 條件n];

例:SELECT * FROM students WHERE age20 OR education!=’大專’; #查詢年齡小於20或 者學歷不等於大專的學生信息

SELECT 字段名 FROM 表名 WHERE 條件1 AND 條件2 […AND 條件n];

例:SELECT * FROM students WHERE age22 AND education=’大專’; # 查詢年齡大於22 且學歷為大專的學生信息

select 字段 from 表名 where age in (12,17,23);              #數據在指定 數據 裡面

select 字段 from 表名 where age between 23 and 28;       #數據在23-28 之間

select * from 表名 order by 字段名;                      #排序,升序

select 字段 from 表名 order by desc;                        #   字段降序

select 字段1,字段2…… from 表名 group by  分組依據字段;          #每個字段只顯示一條

例:SELECT id,sname,age,phone,place,GROUP_CONCAT(age,place) FROM students GROUP BY age,place; #查詢學生信息,根據age,place分組並顯示每一組的記 錄

select  distinct  字段 from  表名;                          #去除結果重複行

例:SELECT DISTINCT age FROM students; # 查詢學生的年齡段情況

selcet 字段1,字段2,group_concat(分組依賴字段名) from 表名 group by 分組依賴字段名;    #查詢每個組中記錄數量,顯示出來(使用關鍵字GROUP BY與GROUP_CONCAT()函數一起使用,可以將每個組中的記錄數量都顯 示出來)

例:selcet id,sname,age,phone,GROUP_CONCAT(age) FROM students GROUP BY age; # 查詢學生id,姓名,年齡,電話,根據age分組並顯示每一組的記錄

SELECT 字段名 FROM 表名 [其他條件] LIMIT int,int; 參數1是開始讀取的第一條記錄的 編號,參數2是要查詢記錄的個數

例:SELECT * FROM students ORDER BY age LIMIT 0,5; # 查詢學生信息,根據age 排序從第0位開始顯示,只顯示5條

select 字段名 from 表名where字段名 regexp ‘匹配方式’;

(^匹配以特定字符或 字符串開頭的記錄,

$匹配以特定字符或 字符串結尾的記錄

[^字符集 合]匹配除“字符集合”以 外的任意一個字符

S1|S2|S3匹配S1 S2 S3中 的任意一個字符串

字符串{N }匹配字符串出現N次

字符串 {M,N}匹配字符串出現至 少M次,最多N次)

聚合函數查詢

select count(字段名) from 表名;           #對於除”*”以外的任何參數,返回所選擇集合中非NULL值的行的數目;對於參數“*”,返回選擇集 合中所有行的數據,包含NULL值的行

例:SELECT COUNT(*) FROM students;

select sum(字段名) from 表名;          #表中某個字段取值的總和

select avg(字段名) from 表名;       #表中某個字段取值的平均值

select max(字段名) from 表名;        #表中某個字段取值的最大值

select min(字段名) from 表名;         #表中某個字段取值的最小值

連接查詢

a.內連接:列出數據表中與連接條件相匹配的數據行,組合成新記錄【只有滿足條件的記錄才出現在查詢結 果】 內連接的最常見的例子是相等連接,也就是連接後的表中的某個字段與每個表中的都相同

select 字段名1,字段名2  from 表名1 inner join 表名2 where 連接條件;

例:select s.name,d.dname from staff s inner join department d WHERE s.dpid = d.id; # 連接員工表的dpid字段和部門表的id字段,並查詢員工姓名和部門名稱

b.外連接:與內連接不同,外連接是指使用OUTER JOIN關鍵字將兩個表連接起來。外連接生成的結果集不僅 包含符合連接條件的行數據 ,而且還包含左表(左外連接時的表) 右表(右外連接時的表)或 兩邊連接表(全外連接時的表)中所有的數據行。

select 字段名稱 from 表名1 LEFT|RIGHT join 表名2 on 表名1.字段名1 = 表名2.字段名2;

例:select s.name,d.dname FROM staff s LEFT JOIN department d ON s.dpid = d.id; #連接員工表的dpid字段和部門表的id字段,並查詢員工姓名和部門名稱,如果右表中沒有對應的 連接數據,會自動添加NULL值

例:SELECT s.name,d.dname FROM staff s RIGHT JOIN department d ON s.dpid = d.id; # 連接員工表的dpid字段和部門表的id字段,並查詢員工姓名和部門名稱,如果左表中沒有對應 的連接數據,會自動添加NULL值

例:SELECT 字段名1,字段名2 FROM 表名1,表名2 WHERE 連接條件 AND 限制條件; 例:SELECT s.name,d.dname FROM staff s,department d WHERE s.dpid = d.id AND s.dpid1; # 查詢員工姓名和部門名稱,條件是員工表的dpid字段與部門表中的id字段相等,並且dpid大於1

合併查詢結果

select 字段名 from  表名 UNION select 字段名  from 表名;   #關鍵字UNION是將所 有的查詢結果合併到一起,並且去除相同記錄

例:SELECT dpid FROM staff UNION SELECT id FROM department; # 查詢員工表dpid與部門表id,如果有重複數據,只顯示一次

select 字段名 drom 表名 UNION ALL select 字段名from表名;   #關鍵字UNION ALL 則只是簡單地將結果合併到一 起

例:SELECT dpid FROM staff UNION ALL SELECT id FROM department; # 查詢員工表dpid與部門表id,全部顯示

MYSQL使用基礎、進階分享

MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB公司開發,屬於Oracle旗下產品,是最流行的關係型數據庫管理系統之一。

端口是3306。

表很多時,使用linux腳本,需要根據需要修改一下:

和創建一樣,可以加上 if exists

可兩篇文章:

如:

用於在已有的表中添加、刪除或修改列。

添加 ADD

默認是添加到最後,但可以指定位置。 FIRST :添加最前

AFTER 字段名 :添加指定字段之後

例子:

刪除 DROP

修改 MODIFY 主要修改原列的類型或約束條件 同樣可以用 FIRST 和 AFTER 字段名 ,代表的是修改到哪裡。

修改字段名 CHANGE

可以把表2的數據複製到表1中,但 不能複製約束性條件 。

單行

多行,注意 只有一個VALUES :

不寫 (行1, 行2…) 這一部分的話,默認一一對應

除了以上方法外,還可以用SET為每一行附上相應的值。

假如沒有篩選的話,就給全部都修改了。可以用 WHERE 篩選。

假如 沒有篩選的話,就給全部刪除了 。相當於清空。

清空

先把表刪除,然後再建一個。與 DELETE FROM 相比, TRUNCATE 的效率更快,因為 DELETE FROM 是把記錄逐條刪除的。

查詢執行的順序

FROM — WHERE — SELECT — GROUP BY — HAVING — ORDER BY — LIMIT

注意

當數據很大,上百萬的時候,使用LIMIT … OFFSET ..的方式進行分頁十分浪費資源且耗時長。最好是結合WHERE使用,如:

REGEXP 使用正則表達進行匹配。 查詢時,需要搭配WHERE或HAVING使用 。

兩個表之間有交集且要用到兩個表的數據時,可以使用內連接查詢。

LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果為 NULL。

用法:

RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL。 把LEFT JOIN的表1、表2調換順序,就是REGHT JOIN 。

FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行. 相當於結合了 LEFT JOIN 和 RIGHT JOIN 的結果。

但 MySQL中不支持 FULL OUTER JOIN 。

即SELECT嵌套。

IN 一個查詢結果作為另一個查詢的條件。 如:

EXISTS 用於判斷查詢子句是否有記錄,如果有一條或多條記錄存在返回 True,否則返回 False。True時執行。 如:

索引的本質是一種排好序的數據結構。利用索引可以提高查詢速度。

常見的索引有:

MySQL通過外鍵約束來保證表與表之間的數據的完整性和準確性。 外鍵的使用條件:

外鍵的好處:可以使得兩張表關聯,保證數據的一致性和實現一些級聯操作。

對已有的兩個表增加外鍵 比如:主表為A,子表為B,外鍵為aid,外鍵約束名字為a_fk_b

為子表添加一個字段,當做外鍵

為子表添加外鍵約束條件

假如刪除記錄報錯: [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (…)

這是因為MySQL中設置了foreign key關聯,造成無法更新或刪除數據。可以通過設置 FOREIGN_KEY_CHECKS 變量來避免這種情況。 第一步:禁用外鍵約束,我們可以使用: SETFOREIGN_KEY_CHECKS=0; 第二步:刪除數據 第三步:啟動外鍵約束,我們可以使用: SETFOREIGN_KEY_CHECKS=1; 查看當前FOREIGN_KEY_CHECKS的值,可用如下命令: SELECT @@FOREIGN_KEY_CHECKS;

使用 UNION 來組合兩個查詢,如果第一個查詢返回 M 行,第二個查詢返回 N 行,那麼組合查詢的結果一般為 M+N 行。

每個查詢必須包含相同的列、表達式和聚集函數。

默認會去除相同行,如果需要 保留 相同行,使用 UNION ALL 。

只能包含一個 ORDER BY 子句,並且必須位於語句的最後 。

內置函數很多, 見: MySQL 函數

我們一般使用 START TRANSACTION 或 BEGIN 開啟事務, COMMIT 提交事務中的命令, SAVEPOINT : 相當於設置一個還原點, ROLLBACK TO : 回滾到某個還原點下

一般的使用格式如下:

開啟事務時, 默認加鎖

根據類型可分為共享鎖(SHARED LOCK)和排他鎖(EXCLUSIVE LOCK)或者叫讀鎖(READ LOCK)和寫鎖(WRITE LOCK)。

根據粒度劃分又分表鎖和行鎖。表鎖由數據庫服務器實現,行鎖由存儲引擎實現。

除此之外,我們可以顯示加鎖

加鎖時, 如果沒有索引,會鎖表,如果加了索引,就會鎖行

InnoDB默認支持行鎖,獲取鎖是分步的,並不是一次性獲取所有的鎖,因此在鎖競爭的時候就會出現死鎖的情況

解決方法:

即ACID特性:

由於並發事務會引發上面這些問題, 我們可以設置事務的隔離級別解決上面的問題.

MySQL的默認隔離級別(可重複讀)

查看當前會話隔離級別

方式1

方式2

設置隔離級別

主從集群的示意圖如下:

主要涉及三個線程: binlog 線程、 I/O 線程和 SQL 線程。

同步流程:

由於MySQL主從集群只會從主節點同步到從節點, 不會反過來同步, 所以需要讀寫分離

讀寫分離需要在業務層面實現 , 寫數據只能在主節點上完成, 而讀數據可以在主節點或從節點上完成

索引是幫助MySQL高效獲取數據的排好序的數據結構

MySQL的索引有

推薦兩個在線工具:

簡單來說, B樹是在紅黑樹(一個平衡二叉樹)的基礎上將一個節點存放多個值, 實現的, 降低了樹的高度, 每個節點都存放索引及對應數據指針, 同一層的節點是遞增的

而B+樹在B樹的基礎上進行優化, 非葉子節點存放 子節點的開始的索引, 葉子節點存放索引和數據的指針, 且葉子節點之間有雙向的指針

如下示意圖:

不同的引擎, 主鍵索引存放的數據也不一樣, 比如常見的 MyISAM 和 InnoDB

MyISAM 的B+樹葉子節點存放表數據的指針, InnoDB 的B+樹葉子節點存放處主鍵外的數據

其他的:

即多個列組成一個索引, 語法:

由於聯合索引的B+樹的結構, 根據列建立, 所以我們的查找條件也要根據索引列的順序( where column1=x, column2=y,columnN… ), 否則會全表掃描

如果你對列進行了 (+,-,*,/,!) , 那麼都將不會走索引。

OR 引起的索引失效

OR 導致索引是在特定情況下的,並不是所有的 OR 都是使索引失效,如果OR連接的是 同 一個字段,那麼索引 不會失效 , 反之索引失效 。

這個我相信大家都明白,模糊搜索如果你前綴也進行模糊搜索,那麼不會走索引。

這兩種用法,也將使索引失效。另 IN 會走索引,但是當IN的取值範圍較大時會導致索引失效,走全表掃描, 見: MySQL中使用IN會不會走索引

不走索引。

走索引。

所以設計表的時候, 建議不可為空, 而是將默認值設置為 “” ( NOT NULL DEFAULT “” )

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/232183.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 12:49
下一篇 2024-12-11 12:49

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python3支持多行語句

    Python3是一種高級編程語言,開發人員可以輕鬆地使用該語言編寫簡單到複雜的代碼。其中Python3支持多行語句,方便開發人員編寫複雜的代碼,提高代碼的可讀性和可維護性。 一、使…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29

發表回復

登錄後才能評論