MySQL:進階應用

一、進階應用

1、可以在 SELECT, UPDATE 和 DELETE 語句中使用 Mysql 的 JOIN 來聯合多表查詢。

JOIN 按照功能大致分為如下三類:

  • INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關系的記錄。
  • **LEFT JOIN(左連接):**獲取左表所有記錄,即使右表沒有對應匹配的記錄。
  • RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應匹配的記錄。

2、MySQL NULL 值處理

我們已經知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句來讀取數據表中的數據,但是當提供的查詢條件字段為 NULL 時,該命令可能就無法正常工作。

為了處理這種情況,MySQL提供了三大運算符:

  • IS NULL: 當列的值是 NULL,此運算符返回 true。
  • IS NOT NULL: 當列的值不為 NULL, 運算符返回 true。
  • <=>: 比較操作符(不同于 = 運算符),當比較的的兩個值相等或者都為 NULL 時返回 true。

關于 NULL 的條件比較運算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

在 MySQL 中,NULL 值與任何其它值的比較(即使是 NULL)永遠返回 NULL,即 NULL = NULL 返回 NULL 。

MySQL 中處理 NULL 使用 IS NULL 和 IS NOT NULL 運算符。

注意:

select * , columnName1+ifnull(columnName2,0) from tableName;

columnName1,columnName2 為 int 型,當 columnName2 中,有值為 null 時,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值轉為 0。


3、MySQL 正則表達式

MySQL 支持正則表達式的匹配, MySQL中使用 REGEXP 操作符來進行正則表達式匹配。

如果您了解PHP或Perl,那么操作起來就非常簡單,因為MySQL的正則表達式匹配與這些腳本的類似。

下表中的正則模式可應用于 REGEXP 操作符中。

模式描述
^匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$匹配輸入字符串的結束位置。如果設置了RegExp 對象的 Multiline 屬性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
.匹配除 “\n” 之外的任何單個字符。要匹配包括 ‘\n’ 在內的任何字符,請使用像 ‘[.\n]’ 的模式。
[…]字符集合。匹配所包含的任意一個字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[^…]負值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。
p1|p2|p3匹配 p1 或 p2 或 p3。例如,‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 則匹配 “zood” 或 “food”。
*匹配前面的子表達式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等價于{0,}。
+匹配前面的子表達式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價于 {1,}。
{n}n 是一個非負整數。匹配確定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的兩個 o。
{n,m}m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。

4、MySQL 事務

MySQL 事務主要用于處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操作語句就構成一個事務!

  • 在 MySQL 中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務。
  • 事務處理可以用來維護數據庫的完整性,保證成批的 SQL 語句要么全部執行,要么全部不執行。
  • 事務用來管理 insert,update,delete 語句

一般來說,事務是必須滿足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。

  • **原子性:**一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
  • **一致性:**在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及后續數據庫可以自發性地完成預定的工作。
  • **隔離性:**數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。
  • **持久性:**事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。

在 MySQL 命令行的默認設置下,事務都是自動提交的,即執行 SQL 語句后就會馬上執行 COMMIT 操作。因此要顯式地開啟一個事務務須使用命令 BEGIN 或 START TRANSACTION,或者執行命令 SET AUTOCOMMIT=0,用來禁止使用當前會話的自動提交。

事務控制語句:
  • BEGIN 或 START TRANSACTION 顯式地開啟一個事務;
  • COMMIT 也可以使用 COMMIT WORK,不過二者是等價的。COMMIT 會提交事務,并使已對數據庫進行的所有修改成為永久性的;
  • ROLLBACK 也可以使用 ROLLBACK WORK,不過二者是等價的。回滾會結束用戶的事務,并撤銷正在進行的所有未提交的修改;
  • SAVEPOINT identifier,SAVEPOINT 允許在事務中創建一個保存點,一個事務中可以有多個 SAVEPOINT;
  • RELEASE SAVEPOINT identifier 刪除一個事務的保存點,當沒有指定的保存點時,執行該語句會拋出一個異常;
  • ROLLBACK TO identifier 把事務回滾到標記點;
  • SET TRANSACTION 用來設置事務的隔離級別。InnoDB 存儲引擎提供事務的隔離級別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
MYSQL 事務處理主要有兩種方法:

1、用 BEGIN, ROLLBACK, COMMIT來實現

  • BEGIN 開始一個事務
  • ROLLBACK 事務回滾
  • COMMIT 事務確認

2、直接用 SET 來改變 MySQL 的自動提交模式:

  • SET AUTOCOMMIT=0 禁止自動提交
  • SET AUTOCOMMIT=1 開啟自動提交

5、MySQL ALTER命令

當我們需要修改數據表名或者修改數據表字段時,就需要使用到MySQL ALTER命令。

如下命令使用了 ALTER 命令及 DROP 子句來刪除以上創建表的 i 字段:

mysql> ALTER TABLE testalter_tbl  DROP i;

如果數據表中只剩余一個字段則無法使用DROP來刪除字段。

MySQL 中使用 ADD 子句來向數據表中添加列,如下實例在表 testalter_tbl 中添加 i 字段,并定義數據類型:

mysql> ALTER TABLE testalter_tbl ADD i INT;

執行以上命令后,i 字段會自動添加到數據表字段的末尾。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535697.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hive-常用操作

一. 數據庫操作 1、創建數據庫 //用戶可以用 IF NOT EXISTS 選項來忽略這個異常。create database [ if not exists ] myhive ;2、創建數據庫并指定hdfs存儲位置 create database myhive2 location /myhive2;3、修改數據庫&#xff0c;可以使用alter database 命令來修改數據…

linux下nmap工具的使用

nmap NMap&#xff0c;也就是Network Mapper&#xff0c;是Linux下的網絡掃描和嗅探工 具包&#xff0c;其基本功能有三個&#xff0c;一是探測一組主機是否在線&#xff1b;其次是掃描主機端口&#xff0c;嗅探所提供的網絡服務&#xff1b;還可以推斷主機所用的操作系統 。N…

Hive-分區分桶概述

一、分區 簡介 為了對表進行合理的管理以及提高查詢效率&#xff0c;Hive可以將表組織成“分區”。 分區是表的部分列的集合&#xff0c;可以為頻繁使用的數據建立分區&#xff0c;這樣查找分區中的數據時就不需要掃描全表&#xff0c;這對于提高查找效率很有幫助。 分區是…

定時提醒你休息的腳本

本文來源于阿里西西WEB開發社區http://www.alixixi.com收集整理&#xff0c;歡迎訪問。 定時彈窗提醒功能腳本..把以下代碼存為.vbs運行即可. 以下是引用片段&#xff1a;set WshShell WScript.CreateObject("WScript.Shell") ’對話框標題 alerttitle "你的…

Hive-分區分桶操作

在大數據中&#xff0c;最常用的一種思想就是分治&#xff0c;我們可以把大的文件切割劃分成一個個的小的文件&#xff0c;這樣每次操作一個小的文件就會很容易了&#xff0c;同樣的道理&#xff0c;在hive當中也是支持這種思想的&#xff0c;就是我們可以把大的數據&#xff0…

ubuntu好文收集

ubuntu全程配置手冊 http://ljlau.blogdriver.com/ljlau/1220277.html ubuntu下向系統日志寫記錄 http://linux0818.bokee.com/viewdiary.14153197.html aptitude 使用快速參考 http://linuxtoy.org/archives/aptitude_quick_reference.html

Flume簡單介紹

在一個完整的離線大數據處理系統中&#xff0c;除了HDFSMapReduceHive組成分析系統的核心之外&#xff0c;還需要數據采集、結果數據導出、任務調度等不可或缺的輔助系統&#xff0c;而這些輔助工具在hadoop生態體系中都有便捷的開源框架&#xff0c;在此&#xff0c;我們首先來…

linux系統優化篇之---top

top命令是Linux下常用的性能分析工具&#xff0c;能夠實時顯示系統中各個進程的資源占用狀況&#xff0c;類似于Windows的任務管理器。下面詳細介紹它的使用方法。 top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48Tasks: 29 total, 1 running, 28 sleeping, …

Flume安裝部署

1.安裝部署 1、解壓tar -zxvf apache-flume-1.9.0-bin.tar.gz 2、改名mv apache-flume-1.9.0-bin flume-1.9.0 3、配置環境變量 vi /etc/profile,source /etc/profile #flume export FLUME_HOME/usr/local/apps/flume-1.9.0 export PATH$PATH:$FLUME_HOME/bin4、將conf下的…

ubuntu學習摘要-ubuntu root用戶

在我安裝好后root的密碼是什么&#xff1f;我怎樣使用root帳號&#xff1f; 當你第一次安裝好Ubuntu后&#xff0c;root帳號不能用。在安裝期間創建的第一個用戶對系統有管理權&#xff0c;通過“sudo”能象root運行程序.使用時僅需它的普通用戶密碼。例如: sudo apt-get updat…

Elasticsearch 簡介入門

Elasticsearch 是一個分布式的開源搜索和分析引擎&#xff0c;適用于所有類型的數據&#xff0c;包括文本、數字、地理空間、結構化和非結構化數據。Elasticsearch 在 Apache Lucene 的基礎上開發而成&#xff0c;由 Elasticsearch N.V.&#xff08;即現在的 Elastic&#xff0…

Elasticsearch 7.x 安裝及配置

一、下載安裝 1、下載地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch 2、解壓安裝&#xff1a;tar -zxcf elasticsearch-7.9.0-linux-x86_64.tar.gz 二、新建es用戶 在某個版本以后&#xff0c;elasticsearch為了安全性&#xff0c;是不能用root用戶啟…

Ubuntu下面apache2安裝

Ubuntu為我們提供了 su apt-get install 命令&#xff0c;通過它你可以很方便地安裝一些軟件&#xff0c;這些軟件是放在Ubuntu放置在各個地方的服務器上面&#xff0c;如果你想安裝的軟件是比較常見的&#xff0c;一般都可以通過它來下載.當然 Apache 這個軟件服務器上面是有…

Java并發篇_樂觀鎖與悲觀鎖

樂觀鎖對應于生活中樂觀的人總是想著事情往好的方向發展&#xff0c;悲觀鎖對應于生活中悲觀的人總是想著事情往壞的方向發展。 一、引入概念 1、悲觀鎖 總是假設最壞的情況&#xff0c;每次去拿數據的時候都認為別人會修改&#xff0c;所以每次在拿數據的時候都會上鎖&#…

Redhat與ubuntu配置網卡

redhat linux中設置網卡固定ip之前在xwindow下的redhat-config-network 設置網卡固定ip發現不起作用&#xff0c;設置好后就是ping不通。就查了些資料&#xff0c;更改 /etc/sysconfig/network-scripts/ifcfg-eth0(第一個網卡為eth0)&#xff0c;配置dns的文件為 /etc/resolv.c…

SSH軟件包:Sftp,scp和ssh-agent

這篇文章的中心是介紹在ssh軟件包中非常有用的程序如&#xff1a;sftp&#xff0c;scp&#xff0c;ssh-agent&#xff0c;和ssh-add。在下文中我們假設sshd2守護進程很好地被設置并且運行良好。Sftp和scp總覽讓我們把注意力集中到sftp和scp上。第一個&#xff08;sftp安全文件傳…

JAVA并發篇_公平鎖與非公平鎖

簡單的來說&#xff0c;如果一個線程組里&#xff0c;能保證每個線程都能拿到鎖&#xff0c;那么這個鎖就是公平鎖。相反&#xff0c;如果保證不了每個線程都能拿到鎖&#xff0c;也就是存在有線程餓死&#xff0c;那么這個鎖就是非公平鎖。 一、引入概念 1、公平鎖&#xff1…

Java并發篇_進程線程

一個進程包括由操作系統分配的內存空間&#xff0c;包含一個或多個線程。一個線程不能獨立的存在&#xff0c;它必須是進程的一部分。一個進程一直運行&#xff0c;直到所有的非守護線程都結束運行后才能結束。 多線程能滿足程序員編寫高效率的程序來達到充分利用 CPU 的目的。…

Real提示“作為受限用戶,您無足夠的windows操作權限”的解決辦法

運行Regedit.exe&#xff0c;翻到HKEY_CLASSES_ROOT/Software&#xff0c;刪除Software&#xff1b;然后關閉注冊表&#xff0c;再運行Regedit.exe&#xff0c;翻到HKEY_CLASSES_ROOT/Software&#xff0c;點右鍵選擇“權限”&#xff0c;各個組都設置為“完全控制”和“讀取”…

Java并發篇_線程詳解

線程&#xff08;thread&#xff09; 是操作系統能夠進行運算調度的最小單位。它被包含在進程之中&#xff0c;是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流&#xff0c;一個進程中可以并發多個線程&#xff0c;每條線程并行執行不同的任務。 一、線程的…