MySQL數據庫基礎學習

數據庫概述

一、常見的概念

數據庫(DataBase):數據庫是按照數據結構來組織、存儲和管理數據的倉庫。數據庫管理系統(Database Management SystemDBMS):是專門用於管理數據庫的計算機系統軟件。數據庫管理系統能夠爲數據庫提供數據的定義、建立、維護、查詢和統計等操作功能,並完成對數據完整性、安全性進行控制的功能。

二、發展歷程

我們一般說的數據庫,就是指的DBMS: 數據庫服務器。數據庫技術發展歷程如下:

  • 層次數據庫和網狀數據庫技術階段:使用指針來表示數據之間的聯繫。
  • 關係數據庫技術階段:經典的里程碑階段。代表DBMS有Oracle、DB2、MySQL、SQL Server等。
  • 後關係數據庫技術階段:關係型數據庫存在數據模型,性能,拓展伸縮性的缺點,出現了:
    ORDBMS:面向對象數據庫技術。
    NoSQL :結構化數據庫技術。

隨着大數據的不斷髮展,非關係型的數據庫現在成了一個極其熱門的新領域,非關係數據庫產品的發展非常迅速,產生了一系列出色的NoSQL數據庫。

常見的NoSQL數據庫分爲四大類

  • 鍵值存儲數據庫:Oracle BDB,Redis,BeansDB
  • 列式儲數數據庫:HBase,Cassandra,Riak
  • 文檔型數據庫:MongoDB,CouchDB
  • 圖形數據庫:Neo4J,InfoGrid,Infinite Graph

常見的關係數據庫:

數據庫系 所屬公司
Oracle Oracle
SQL Server MS
DB2 IBM
MySQL AB–>SUN–>Oracle

特點比較:

  • Oracle:運行穩定,可移植性高,功能齊全,性能超羣!適用於大型企業領域,但是價格昂貴。

  • DB2:速度快、可靠性好,適於海量數據,恢復性極強。適用於大中型企業領域,但是價格昂貴。

  • SQL Server:全面,效率高,界面友好,操作容易,但是不跨平臺。適用於中小型企業領域。

  • MySQL:開源,體積小,速度快。適用於中小型企業領域。

數據庫基礎

數據庫和數據庫對象
一般來說我們說的數據庫(MySQL/Oracle等)指的都是數據庫服務器(DBMS)
數據庫:存儲數據庫對象的容器。
數據庫對象:存儲,管理和使用數據的不同結構形式,如:表、視圖、存儲過程、函數、觸發器、事件等。
數據庫分兩種:

  • 系統數據庫(系統自帶的數據庫):不能修改
    information_schema:存儲數據庫對象信息,如:用戶表信息,列信息,權限,字符,分區等信息
    performance_schema:存儲數據庫服務器性能參數信息。
    mysql:存儲數據庫用戶權限信息。
    sys:系統配置信息。
  • 用戶數據庫(用戶自定義的數據庫):一般的,一個項目一個用戶數據庫。

(一)數據庫操作

1、創建數據庫

create database 數據庫名;

create database runoob;

2、選擇數據庫

use 數據庫名;

use runoob;

3、刪除數據庫

drop database 數據庫名;

drop database runoob;

4、查看數據庫

查看數據庫服務器存在哪些數據庫: SHOW DATABASES;
查看指定的數據庫中有哪些數據表: SHOW TABLES;

(二)數值類型

在這裏插入圖片描述

(三)數據表

1、創建數據表

表的約束:表的約束(針對於某一列):

  • 非空約束:NOT NULL(NK),不允許某列的內容爲空。
  • 設置列的默認值:DEFAULT。
  • 唯一約束:UNIQUE(UK),在該表中,該列的內容必須唯一。
  • 主鍵約束:PRIMARY KEY(PK), 非空且唯一。
  • 主鍵自增長:AUTO_INCREMENT,從1開始,步長爲1。(MySQL特有)
  • 外鍵約束:FOREIGN KEY(FK),A表中的外鍵列的值必須參照於B表中的某一列(B表主鍵)。

主鍵設計:

1:單列主鍵,單列作爲主鍵,建議使用。
     複合主鍵,使用多列充當主鍵,不建議。
2:主鍵分爲兩種:
   1)自然主鍵:使用有業務含義的列作爲主鍵(不推薦使用);
   2)代理主鍵:使用沒有業務含義的列作爲主鍵(推薦使用);
CREATE TABLE 數據表名 (字段名 字段類型);

CREATE TABLE `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、刪除數據表

刪除表:DROP TABLE table_name;

DROP TABLE 數據表名 ;

DROP TABLE runoob_tbl ;

3、查看數據表

  • 查看錶目錄:SHOW TABLES;
  • 查看錶結構: DESC table_name;
  • 查看DDL語句:SHOW CREATE TABLE table_name;

(四)數據操作

1、增

INSERT INTO table_name ( field1, field2,...fieldN ) 
VALUES 
( value1, value2,...valueN );

INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date)
VALUES
("學習 PHP", "菜鳥教程", NOW());

2、刪

DELETE FROM table_name [WHERE Clause];

DELETE FROM runoob_tbl WHERE runoob_id=1;

3、改

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause];

UPDATE runoob_tbl SET runoob_title='學習 C++' WHERE runoob_id=1;

4、查

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....

SELECT * from runoob_tbl WHERE runoob_author='菜鳥教程';

(五)查詢

1、WHERE
在這裏插入圖片描述2、ORDER BY

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]];

SELECT * from runoob_tbl ORDER BY submission_date ASC;

3、GROUP BY

GROUP BY 語句根據一個或多個列對結果集進行分組。

在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;

4、HAVING

通過HAVING子句對分組結果進行二次篩選

5、LIMIT

LIMIT限制查詢結果顯示條數

LIMIT 顯示條數

SELECT * FROM table LIMIT 5; // 檢索記錄前5行

LIMIT 偏移量 顯示條數

SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15

6、聯合查詢
UNION 操作符用於連接兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的數據。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

參數

  • expression1, expression2, … expression_n: 要檢索的列。

  • tables: 要檢索的數據表。

  • WHERE conditions: 可選, 檢索條件。

  • DISTINCT: 可選,刪除結果集中重複的數據。默認情況下 UNION 操作符已經刪除了重複數據,所以 DISTINCT 修飾符對結果沒啥影響。

  • ALL: 可選,返回所有結果集,包含重複數據。

7、子查詢

子查詢是將一個查詢語句嵌套在另一個查詢語句中,內查詢語句查詢的結果,可以作爲外查詢語句提供條件

使用【NOT】 IN 的子查詢
employee 員工表
depId 員工表 中所屬部門id
department 部門表

SELECT id,username FROM employee WHERE depId IN(SELECT id FROM department);

使用比較運算符的子查詢 = 、> 、<、>=、<=、<>、!=、< >、<=>

使用【NOT】 EXISTS的子查詢

使用ANY|SOME或者ALL的子查詢
在這裏插入圖片描述
8、範圍查詢 BTEWEEN AND

使用BETWEEN運算符顯示某一值域範圍的記錄,這個操作符最常見的使用在數字類型數據的範圍上,但對於字符類型數據和日期類型數據同樣可用。
格式:
SELECT <columnList> FROM table_name
WHERE 列名 BETWEEN minvalue AND maxvalue:閉區間。

9、空值查詢 IS NULL

IS NULL:判斷列的值是否爲空。
格式:WHERE  列名 IS NULL;

10、JOIN

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

INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關係的記錄。
LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
在這裏插入圖片描述

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a 
INNER JOIN tcount_tbl b 
ON a.runoob_author = b.runoob_author

(六)正則表達式

在這裏插入圖片描述
查找name字段中以’st’爲開頭的所有數據:

SELECT name FROM person_tbl WHERE name REGEXP '^st';

(七)MySQL 事務

1、事務介紹

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

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

2、事務控制語句

BEGIN或START TRANSACTION;顯式地開啓一個事務;

COMMIT;也可以使用COMMIT WORK,不過二者是等價的。COMMIT會提交事務,並使已對數據庫進行的所有修改成爲永久性的;

ROLLBACK;有可以使用ROLLBACK WORK,不過二者是等價的。回滾會結束用戶的事務,並撤銷正在進行的所有未提交的修改;

(八)字段操作

1、增

ALTER TABLE 數據表名 ADD 新增字段 字段類型;

ALTER TABLE runoob_tbl ADD status tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態 0正常 1刪除';

2、刪

ALTER TABLE 數據表名 DROP 字段名;

ALTER TABLE runoob_tbl  DROP status;

3、改

#例如,把字段 c 的類型從 CHAR(1) 改爲 CHAR(10),可以執行以下命令:
ALTER TABLE testalter_tbl MODIFY c CHAR(10);
ALTER TABLE testalter_tbl CHANGE c c CHAR(10);

#修改字段類型及名稱
#在 CHANGE 關鍵字之後,緊跟着的是你要修改的字段名,然後指定新字段名及類型。嘗試如下實例:
#例如,把字段 c 改成 字段 j ,類型從 CHAR(1) 改爲 CHAR(10),可以執行以下命令:
ALTER TABLE testalter_tbl CHANGE c j CHAR(10);

#ALTER TABLE 對 Null 值和默認值的影響
ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;

#修改字段默認值
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

#修改表名
ALTER TABLE testalter_tbl RENAME TO alter_tbl;

(九)索引

1、創建普通索引

#這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:
#(1)創建索引

CREATE INDEX indexName ON mytable(username(length)); 
#如果是CHAR,VARCHAR類型,length可以小於字段實際長度;如果是BLOB和TEXT類型,必須指定 length。

#(2)創建表的時候直接指定
CREATE TABLE mytable(  
	ID INT NOT NULL,   
	username VARCHAR(16) NOT NULL,  
	INDEX [indexName] (username(length)) 
); 

2、創建唯一索引

#它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它#有以下幾種創建方式:

#(1)創建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length)) ;

#(2)創建表的時候直接指定
CREATE TABLE mytable( 
	ID INT NOT NULL,  
	username VARCHAR(16) NOT NULL,  
	UNIQUE [indexName] (username(length))  
);  

3、刪除索引

DROP INDEX [indexName] ON mytable; 

4、使用ALTER 命令添加和刪除索引

有四種方式來添加數據表的索引:
#(1)該語句添加一個主鍵,這意味着索引值必須是唯一的,且不能爲NULL。
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);

#(2)這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list);

#(3)添加普通索引,索引值可出現多次。
ALTER TABLE tbl_name ADD INDEX index_name (column_list);

#(4)該語句指定了索引爲 FULLTEXT ,用於全文索引。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list);

#添加索引實例
ALTER TABLE testalter_tbl ADD INDEX (c);

#刪除索引實例
ALTER TABLE testalter_tbl DROP INDEX c;

MySQL數據庫思維導圖

在這裏插入圖片描述

發佈了57 篇原創文章 · 獲贊 149 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章