国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL數(shù)據(jù)庫基礎(chǔ)知識,基礎(chǔ)操作詳細(xì)整理

這篇具有很好參考價值的文章主要介紹了MySQL數(shù)據(jù)庫基礎(chǔ)知識,基礎(chǔ)操作詳細(xì)整理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 數(shù)據(jù)庫概念介紹,應(yīng)用場景

引入:
淘寶網(wǎng),京東、微信,抖音等都有各自的功能,那么當(dāng)我們退出系統(tǒng)的時候,下次再訪問時,為什么信息還存在?

什么是數(shù)據(jù)庫

數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫。

每個數(shù)據(jù)庫都有一個或多個不同的 API 用于創(chuàng)建,訪問,管理,搜索和復(fù)制所保存的數(shù)據(jù)。

我們也可以將數(shù)據(jù)存儲在文件中,但是在文件中讀寫數(shù)據(jù)速度相對較慢。

所以,現(xiàn)在我們使用關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)來存儲和管理大數(shù)據(jù)量。所謂的關(guān)系型數(shù)據(jù)庫,是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。

RDBMS 即關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System)的特點:

  • 1.數(shù)據(jù)以表格的形式出現(xiàn)
  • 2.每行為各種記錄名稱
  • 3.每列為記錄名稱所對應(yīng)的數(shù)據(jù)域
  • 4.許多的行和列組成一張表單
  • 5.若干的表單組成database

MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在 WEB 應(yīng)用方面 MySQL 是最好的RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。

術(shù)語解釋

  • 數(shù)據(jù)庫: 數(shù)據(jù)庫是一些關(guān)聯(lián)表的集合。
  • 數(shù)據(jù)表: 表是數(shù)據(jù)的矩陣。在一個數(shù)據(jù)庫中的表看起來像一個簡單的電子表格。
  • : 一列(數(shù)據(jù)元素) 包含了相同類型的數(shù)據(jù)。
  • :一行(=元組,或記錄)是一組相關(guān)的數(shù)據(jù)。
  • 主鍵:主鍵是唯一的。一個數(shù)據(jù)表中只能包含一個主鍵。你可以使用主鍵來查詢數(shù)據(jù)。
  • 外鍵:外鍵用于關(guān)聯(lián)兩個表。
  • 復(fù)合鍵:復(fù)合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復(fù)合索引。
  • 索引:使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。類似于書籍的目錄。
  • 參照完整性: 參照的完整性要求關(guān)系中不允許引用不存在的實體。與實體完整性是關(guān)系模型必須滿足的完整性約束條件,目的是保證數(shù)據(jù)的一致性

2. 關(guān)系型數(shù)據(jù)庫Mysql

a) 數(shù)據(jù)庫的組成部分介紹(服務(wù)器、數(shù)據(jù)庫、表、行和列)

  1. 所謂安裝Mysql數(shù)據(jù)庫,就是在主機安裝一個數(shù)據(jù)庫管理系統(tǒng)(DBMS),這個管理程序可以管理多個數(shù)據(jù)庫。DBMS(database manage system)
  2. 一個數(shù)據(jù)庫中可以創(chuàng)建多個表,以保存數(shù)據(jù)(信息)。
  3. 數(shù)據(jù)庫管理系統(tǒng)(DBMS)、數(shù)據(jù)庫和表的關(guān)系如圖所示:示意圖
    mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

b) Mysql數(shù)據(jù)庫安裝、navicat數(shù)據(jù)庫可視化管理工具安裝與基本使用

Mysql安裝

參考鏈接:https://blog.csdn.net/GCTTTTTT/article/details/121436300?spm=1001.2014.3001.5502

驗證安裝是否成功
命令行窗口中輸入:mysql --version
查看是否能成功顯示版本號

然后保證mysql服務(wù)開啟:
命令:net start mysql

使用命令行窗口(cmd)連接mysql數(shù)據(jù)庫:
命令:mysql -uroot -p
然后輸入自己修改后的密碼(若沒有按教程修改密碼,則需輸入安裝數(shù)據(jù)庫時給的原密碼)

若能成功進(jìn)入數(shù)據(jù)庫中,則證明MySQL安裝成功(如下圖所示):
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
命令解釋:
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

Navicat安裝

安裝教程:
http://fankey.blog365.cn/database/129.html
https://cloud.tencent.com/developer/article/1804255
注:官網(wǎng)下載navicat安裝后,不按教程方法進(jìn)行完整激活也可免費使用14天

Navicat的基本使用

培訓(xùn)時會一步步教學(xué)

  • Navicat連接數(shù)據(jù)庫方法
  • Navicat導(dǎo)入sql文件方法

講解完sql相關(guān)命令后講

  • 使用Navicat操作數(shù)據(jù)庫
  • 使用Navicat操作數(shù)據(jù)表
  • 使用Navicat操作數(shù)據(jù)表數(shù)據(jù)

c) mysql數(shù)據(jù)類型

數(shù)值類型

MySQL 支持所有標(biāo)準(zhǔn) SQL 數(shù)值數(shù)據(jù)類型。

這些類型包括嚴(yán)格數(shù)值數(shù)據(jù)類型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似數(shù)值數(shù)據(jù)類型(FLOAT、REAL 和 DOUBLE PRECISION)。

常用數(shù)值類型:
TINYINT :小整數(shù)值
SMALLINT:大整數(shù)值
MEDIUMINT:大整數(shù)值
INT或INTEGER:大整數(shù)值
BIGINT:極大整數(shù)值
FLOAT:單精度 浮點數(shù)值
DOUBLE:雙精度 浮點數(shù)值
DECIMAL :小數(shù)值

日期和時間類型

表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR

DATETIME:YYYY-MM-DD hh:mm:ss 混合日期和時間值
DATE:YYYY-MM-DD 日期值
TIMESTAMP:YYYY-MM-DD hh:mm:ss 混合日期和時間值,時間戳
TIME:HH:MM:SS 時間值或持續(xù)時間
YEAR:YYYY 年份值

字符串類型

字符串類型指CHAR、VARCHAR、TEXT、BLOB等。

CHAR:定長字符串(char(n) 和 varchar(n) 中括號中 n 代表字符的個數(shù),比如 CHAR(30) 就可以存儲 30 個字符)
VARCHAR :變長字符串
TINYBLOB:不超過 255 個字符的二進(jìn)制字符串
TINYTEXT :短文本字符串
BLOB: 二進(jìn)制形式的長文本數(shù)據(jù)
TEXT:長文本數(shù)據(jù)
MEDIUMBLOB:二進(jìn)制形式的中等長度文本數(shù)據(jù)
MEDIUMTEXT:中等長度文本數(shù)據(jù)
LONGBLOB:二進(jìn)制形式的極大文本數(shù)據(jù)
LONGTEXT:極大文本數(shù)據(jù)

d) 數(shù)據(jù)庫級別操作(查看現(xiàn)有數(shù)據(jù)庫、建庫、刪庫、切換數(shù)據(jù)庫等)

查看現(xiàn)有數(shù)據(jù)庫

列出 MySQL 數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)庫列表

show databases;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

創(chuàng)建數(shù)據(jù)庫

create database 數(shù)據(jù)庫名;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

刪除數(shù)據(jù)庫

drop database <數(shù)據(jù)庫名>;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

切換數(shù)據(jù)庫

選擇要操作的Mysql數(shù)據(jù)庫,使用該命令后所有Mysql命令都只針對該數(shù)據(jù)庫。

use 數(shù)據(jù)庫名;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

顯示指定數(shù)據(jù)庫中的所有表

使用該命令前需要使用 use 命令來選擇要操作的數(shù)據(jù)庫。

show tables;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

顯示表結(jié)構(gòu)

顯示數(shù)據(jù)表的屬性,屬性類型,主鍵信息 ,是否為 NULL,默認(rèn)值等其他信息

有三種命令都可以實現(xiàn):

show columns from 數(shù)據(jù)表名;
describe 數(shù)據(jù)表名;
desc 數(shù)據(jù)表名;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

e) 表級別操作(建表、刪表、清空表格、增加刪除字段等)

創(chuàng)建數(shù)據(jù)表

CREATE TABLE table_name (column_name column_type);

實例解釋

CREATE TABLE IF NOT EXISTS `users`(
   `user_id` INT UNSIGNED AUTO_INCREMENT,
   `username` VARCHAR(100) NOT NULL,
   `password` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY (`user_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

刪除數(shù)據(jù)表

DROP TABLE 數(shù)據(jù)表名;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

增加字段

ALTER TABLE 表名 ADD 新字段名 數(shù)據(jù)類型 [約束條件] [FIRST|AFTER 已存在字段名];

實例解釋:

alter table users add age int(10) after password;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

修改字段

ALTER TABLE <表名> CHANGE <舊字段名> <新字段名> <新數(shù)據(jù)類型>;
  • 舊字段名:指修改前的字段名;
  • 新字段名:指修改后的字段名;
  • 新數(shù)據(jù)類型:指修改后的數(shù)據(jù)類型,如果不需要修改字段的數(shù)據(jù)類型,可以將新數(shù)據(jù)類型設(shè)置成與原來一樣,但數(shù)據(jù)類型不能為空。
    mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

刪除字段

ALTER TABLE <表名> DROP <字段名>;

實例:

alter table users drop age_test;

其中,“字段名”指需要從表中刪除的字段的名稱。
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

清空數(shù)據(jù)表

TRUNCATE [TABLE] 數(shù)據(jù)表名;   

其中,TABLE 關(guān)鍵字可省略。

TRUNCATE 和 DELETE 的區(qū)別
從邏輯上說,TRUNCATE 語句與 DELETE 語句作用相同,但是在某些情況下,兩者在使用上有所區(qū)別。

  • DELETE 是 DML 類型的語句;TRUNCATE 是 DDL 類型的語句。它們都用來清空表中的數(shù)據(jù)。

  • DELETE 是逐行一條一條刪除記錄的;TRUNCATE則是直接刪除原來的表,再重新創(chuàng)建一個一模一樣的新表,而不是逐行刪除表中的數(shù)據(jù),執(zhí)行數(shù)據(jù)比 DELETE快。因此需要刪除表中全部的數(shù)據(jù)行時,盡量使用 TRUNCATE 語句, 可以縮短執(zhí)行時間。

  • DELETE 刪除數(shù)據(jù)后,配合事件回滾可以找回數(shù)據(jù);TRUNCATE 不支持事務(wù)的回滾,數(shù)據(jù)刪除后無法找回。

  • DELETE 刪除數(shù)據(jù)后,系統(tǒng)不會重新設(shè)置自增字段的計數(shù)器TRUNCATE 清空表記錄后,系統(tǒng)會重新設(shè)置自增字段的計數(shù)器

  • DELETE 的使用范圍更廣,因為它可以通過 WHERE 子句指定條件來刪除部分?jǐn)?shù)據(jù);而 TRUNCATE 不支持 WHERE 子句,只能刪除整體。

  • DELETE 會返回刪除數(shù)據(jù)的行數(shù),但是TRUNCATE 只會返回 0,沒有任何意義。

f) 約束(非空、主鍵、外鍵、唯一鍵等約束、自增字段)

  • 如果你不想字段為 NULL 可以設(shè)置字段的屬性為 NOT NULL, 在操作數(shù)據(jù)庫時如果輸入該字段的數(shù)據(jù)為NULL ,就會報錯。
  • AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數(shù)值會自動加1。
  • PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
  • ENGINE 設(shè)置存儲引擎CHARSET 設(shè)置編碼。
    mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

g) 增加數(shù)據(jù):insert 語句

INSERT INTO 數(shù)據(jù)表名(列名1, 列名2,...列名N ) VALUES (值1, 值2,...值N );

注意該SQL語句中各個列名與值為一一對應(yīng)的關(guān)系,要注意以下幾種情況:

  1. 關(guān)于默認(rèn)值:當(dāng)該字段為not null且insert語句中沒有對該字段賦值時,會默認(rèn)使用默認(rèn)值
    (1)整形,我們一般使用0作為默認(rèn)值。
    (2)字符串,默認(rèn)空字符串(“”)
    (3)時間,可以默認(rèn)1970-01-01 08:00:01
    mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
  2. 若主鍵設(shè)置了自動遞增當(dāng)主鍵被賦值null時,該主鍵字段值會自動遞增
  3. 增加數(shù)據(jù)時,當(dāng)想要往每一列中都設(shè)置值,可省略命令中的列名,即使用如下命令格式:
INSERT INTO 數(shù)據(jù)表名 VALUES (值1, 值2,...值N );

但注意這種情況下命令中的values括號中一定要每一列都賦值且與列名一一對應(yīng),若對應(yīng)列為not null則可以為其賦默認(rèn)值,若列可以為null可以賦值為null,總之若省略列名,則值需要賦完全
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

  1. 列名可以為數(shù)據(jù)表中一個或多個列名,同樣要與values括號中值一一對應(yīng),而沒有賦值的列若為not null則會被賦值為默認(rèn)值,若可為null則會被賦為null
    mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

h) 查找數(shù)據(jù):select語句

常用命令格式:

SELECT {* | <字段列名>} FROM <1>, <2>[WHERE <表達(dá)式>]

比較完整的命令格式:
中括號[]中的內(nèi)容表示該內(nèi)容是可選的,即按照需求選擇是否使用

SELECT {* | <字段列名>} FROM <表 1>, <表 2>… 
[WHERE <表達(dá)式>] 
[GROUP BY <group by definition>] 
[HAVING <expression> [{<operator> <expression>}…]] 
[ORDER BY <order by definition>] 
[LIMIT[<offset>,] <row count>]

注意事項:

  • 查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,并使用WHERE語句來設(shè)定查詢條件。
  • SELECT 命令可以讀取一條或者多條記錄
  • 你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數(shù)據(jù)
  • 你可以使用 WHERE 語句來包含任何條件。
  • 你可以使用 LIMIT 屬性來設(shè)定返回的記錄數(shù)。

實例:
查詢users表中所有信息:

select * from users;

查詢users表中username列與password列信息:

select username,password from users;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

i) 條件:where子句、邏輯運算符

基本命令格式:

SELECT {* | <字段列名>} FROM <表 1>, <表 2>… [WHERE <表達(dá)式>]
  • 查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,并使用WHERE語句來設(shè)定查詢條件。
  • 你可以在 WHERE 子句中指定任何條件。
  • 你可以使用 AND 或者 OR 指定一個或多個條件。
  • WHERE 子句也可以運用于 SQL 的 DELETE 或者 UPDATE 命令
  • WHERE 子句類似于程序語言中的 if 條件,根據(jù) MySQL 表中的字段值來讀取指定的數(shù)據(jù)。

  • 使用Navicat新建數(shù)據(jù)庫DB_test
  • 使用Navicat導(dǎo)入DB_test.sql文件

實例:
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

j) 限制數(shù)目:limit子句

基本命令格式:

SELECT {* | <字段列名>} FROM <表 1>, <表 2>… [WHERE <表達(dá)式>] LIMIT {記錄數(shù)|初始位置,記錄數(shù)};

實例:
1、

select * from account limit 初始位置,記錄數(shù);

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
由結(jié)果可以看到,該語句返回的分別是從第1、第3條記錄開始的之后的 3 條記錄。LIMIT 關(guān)鍵字后的第一個數(shù)字0、2分別表示從第 1、3 行開始(記錄的位置從 0 開始,第 1、3 行的位置為 0、2),第二個數(shù)字 3 表示返回的行數(shù)。

2、

select * from account limit 記錄數(shù);

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
如果“記錄數(shù)”的值小于查詢結(jié)果的總數(shù),則會從第一條記錄開始,顯示指定條數(shù)的記錄。如果“記錄數(shù)”的值大于查詢結(jié)果的總數(shù),則會直接顯示查詢出來的所有記錄。

k) 刪除數(shù)據(jù):delete語句

DELETE FROM 數(shù)據(jù)表名 [WHERE <條件>]
  • 如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。
  • 你可以在 WHERE 子句中指定任何條件
  • 您可以在單個表中一次性刪除記錄。
  • 當(dāng)想刪除數(shù)據(jù)表中指定的記錄時需要使用WHERE 子句
    實例:
delete from users where password="eee";

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

l) 更新數(shù)據(jù):update語句

常用命令格式:

UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]

較完整命令格式:

UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] 
[WHERE 子句 ]
[LIMIT 子句]
  • <表名>:用于指定要更新的表名稱。
  • SET 子句:用于指定表中要修改的列名及其列值。其中,每個指定的列值可以是表達(dá)式,也可以是該列對應(yīng)的默認(rèn)值。如果指定的是默認(rèn)值,可用關(guān)鍵字 DEFAULT 表示列值。
  • WHERE 子句:可選項。用于限定表中要修改的行。若不指定,則修改表中所有的行。
  • LIMIT 子句:可選項。用于限定被修改的行數(shù)。
  • 可以同時更新一個或多個字段。
  • 可以在 WHERE 子句中指定任何條件。
  • 可以在一個單獨表中同時更新數(shù)據(jù)。
  • 當(dāng)需要更新數(shù)據(jù)表中指定行的數(shù)據(jù)時需使用WHERE 子句

實例:

update users set age=666 where username="test1";

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

update users set age=1;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

m) 排序:order by語句

基本語法格式:
SELECT 列名1[,…] FROM 表名 ORDER BY <字段名> [ASC|DESC]

語法說明如下:

  • 字段名:表示需要排序的字段名稱,多個字段時用逗號隔開。
  • ASC|DESCASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC為默認(rèn)值。

使用 ORDER BY 關(guān)鍵字應(yīng)該注意以下幾個方面:

  • ORDER BY 關(guān)鍵字后可以跟子查詢
  • 當(dāng)排序的字段中存在空值時,ORDER BY 會將該空值作為最小值來對待。
  • ORDER BY 指定多個字段進(jìn)行排序時,MySQL 會按照字段的順序從左到右依次進(jìn)行排序。

單字段排序

下面通過一個具體的實例來說明當(dāng) ORDER BY 指定單個字段時,MySQL 如何對查詢結(jié)果進(jìn)行排序。

select * from emp order by sal;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
由結(jié)果可以看到,MySQL 對查詢的 SAL 字段的數(shù)據(jù)按數(shù)值的大小進(jìn)行了升序排序。

多字段排序

下面通過一個具體的實例來說明當(dāng) ORDER BY 指定多個字段時,MySQL 如何對查詢結(jié)果進(jìn)行排序。

 select * from emp order by sal,hiredate;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
注意:在對多個字段進(jìn)行排序時,排序的第一個字段必須有相同的值,才會對第二個字段進(jìn)行排序。如果第一個字段數(shù)據(jù)中所有的值都是唯一的,MySQL 將不再對第二個字段進(jìn)行排序。

關(guān)于字母排序:

默認(rèn)情況下,查詢數(shù)據(jù)按字母升序進(jìn)行排序(A~Z),但數(shù)據(jù)的排序并不僅限于此,還可以使用 ORDER BY 中的 DESC 對查詢結(jié)果進(jìn)行降序排序(Z~A)。
實例:

select * from emp order by ENAME;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

n) 聚集函數(shù)(count、sum、max、average等)

count:

count返回符合條件的行的總數(shù)
基本格式:

select count(*|列名) from 數(shù)據(jù)表名 [WHERE ...]

實例:
查看雇員表emp雇員數(shù)量:

select count(*) from emp;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
查看雇員表emp薪資sal大于1500的雇員數(shù)量:

select count(*) from emp where sal > 1500;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

sum:

sum函數(shù)返回滿足where條件的行的和,一般使用在數(shù)值列
基本格式:

select sum(列名){,sum(列名)...} from 數(shù)據(jù)表名 [WHERE ...]

實例:

select sum(sal) from emp;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

select sum(sal) from emp where sal>1500;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

avg:

AVG函數(shù)返回滿足where條件的一列的平均值
基本格式:

Select avg(列名){,avg(列名)..} from 數(shù)據(jù)表名 [WHERE ...]

實例:

select avg(sal) from emp;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

max/min:

Max/min函數(shù)返回滿足where條件的一列的最大/最小值
基本格式:

select max(列名) from 數(shù)據(jù)表名 [WHERE ...]
select min(列名) from 數(shù)據(jù)表名 [WHERE ...]

實例:

select max(sal) from emp;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

select min(sal) from emp;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

o) group by 語句

在 MySQL 中,GROUP BY 關(guān)鍵字可以根據(jù)一個或多個字段對查詢結(jié)果進(jìn)行分組。=

  • 單獨使用 GROUP BY 關(guān)鍵字時,查詢結(jié)果會只顯示每個分組的第一條記錄。
  • GROUP BY 關(guān)鍵字可以和 GROUP_CONCAT() 函數(shù)一起使用。GROUP_CONCAT() 函數(shù)會把每個分組的字段值都顯示出來。
  • 在數(shù)據(jù)統(tǒng)計時,GROUP BY 關(guān)鍵字經(jīng)常和聚合函數(shù)一起使用。
  • GROUP BY 與 WITH ROLLUP:WITH ROLLUP 可以實現(xiàn)在分組統(tǒng)計數(shù)據(jù)基礎(chǔ)上再進(jìn)行相同的統(tǒng)計(SUM,AVG,COUNT…)。
    基本格式:
SELECT column1[,列名2..] FROM table group by 列名

實例:
顯示每個部門的平均工資和最高工資:

SELECT AVG(sal), MAX(sal),deptno FROM emp GROUP BY deptno;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
使用FORMAT方法,對小數(shù)點進(jìn)行處理
保留兩位小數(shù):

SELECT FORMAT(AVG(sal),2), MAX(sal),deptno FROM emp GROUP BY deptno;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
顯示每個部門(deptno)的每種崗位(job)的平均工資和最高工資

select avg(sal),max(sal),deptno,job from emp group by deptno,job;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

GROUP BY 關(guān)鍵字可以和 GROUP_CONCAT() 函數(shù)一起使用:

GROUP_CONCAT() 函數(shù)會把每個分組的字段值都顯示出來
實例:
查找出各個部門(deptno)中員工名字(ename)

select deptno,group_concat(ename) from emp group by deptno;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

GROUP BY 與 WITH ROLLUP:

WITH ROLLUP 可以實現(xiàn)在分組統(tǒng)計數(shù)據(jù)基礎(chǔ)上再進(jìn)行相同的統(tǒng)計(SUM,AVG,COUNT…)。
實例:
統(tǒng)計各個部門(deptno)各自的薪資(sal)平均值,并統(tǒng)計各個部門薪資平均值 的平均值

select deptno,avg(sal) from emp group by deptno with rollup;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
統(tǒng)計各個部門(deptno)各自的薪資(sal)最大值,并統(tǒng)計各個部門薪資最大值 的最大值

select deptno,max(sal) from emp group by deptno with rollup;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

p) 分組篩選:having語句

使用 having 子句分組后的結(jié)果進(jìn)行過濾
基本格式:

SELECT column1[,列名2..] FROM table group by 列名 having 條件

實例:
顯示平均工資低于 2000 的部門號和它的平均工資

select deptno,avg(sal) from emp group by deptno having avg(sal)<2000;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
使用別名:

select deptno,avg(sal) as avgSal from emp group by deptno having avgSal<2000;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

q) 高級查詢

i. 嵌套子查詢

子查詢是指嵌入在其它 sql 語句中的 select 語句,也叫嵌套查詢

子查詢在 WHERE 中的語法格式如下:

WHERE <表達(dá)式> <操作符> (子查詢)

其中,操作符可以是比較運算符和 IN、NOT IN、EXISTS、NOT EXISTS 等關(guān)鍵字
實例:
如何顯示與 SMITH 同一部門的所有員工?

  1. 先查詢得到 SMITH 的部門號
select deptno from emp where ename='SMITH';
  1. 把上面的 select 語句當(dāng)做一個子查詢來使用
select * from emp where deptno = (select deptno from emp where ename='SMITH');

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

ii. exists|not exists子句

用于判斷子查詢的結(jié)果集是否為空,若子查詢的結(jié)果集不為空,返回 TRUE,否則返回 FALSE;若使用關(guān)鍵字 NOT,則返回的值正好相反。

EXISTS 關(guān)鍵字可以和其它查詢條件一起使用,條件表達(dá)式與 EXISTS 關(guān)鍵字之間用 AND 和 OR 連接。

實例:
查詢emp表中是否存在deptno=10的部門,如果存在,就查詢出account表中的記錄:

select * from account where exists (select deptno from emp where deptno='10');

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

iii. In|not in子句

in子句:當(dāng)表達(dá)式與子查詢返回的結(jié)果集中的某個值相等,返回 TRUE,否則返回 FALSE;若使用關(guān)鍵字 NOT,則返回值正好相反。
實例:
如何顯示與 SMITH ALLEN 同一部門的所有員工?
1、先查詢SMITH和ALLEN分別在哪個部門:

 select deptno from emp where ename='SMITH' or ename='ALLEN';

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
2、將上面select語句作為子查詢

select * from emp where deptno in 
(select deptno from emp where ename='SMITH' or ename='ALLEN');

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

iv.**連接:(交叉連接(笛卡爾積)、內(nèi)連接、外連接(左連接、右連接) ) (選講)

在 MySQL 中,多表查詢主要有交叉連接、內(nèi)連接和外連接(外連接又包括左外連接和右外連接)

交叉連接(CROSS JOIN或,)

交叉連接(CROSS JOIN)一般用來返回連接表的笛卡爾積。
交叉連接的語法格式如下:

SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]

SELECT <字段名> FROM <表1>, <表2> [WHERE子句] 

語法說明如下:

  • 字段名:需要查詢的字段名稱。
  • <表1><表2>:需要交叉連接的表名。
  • WHERE 子句:用來設(shè)置交叉連接的查詢條件。

注意:多個表交叉連接時,在 FROM 后的表名之間連續(xù)使用 CROSS JOIN 或逗號,即可。以上兩種語法的返回結(jié)果是相同的,但是第一種語法才是官方建議的標(biāo)準(zhǔn)寫法。

當(dāng)連接的表之間沒有關(guān)系時,我們會省略掉 WHERE 子句,這時返回結(jié)果就是兩個表的笛卡爾積,返回結(jié)果數(shù)量就是兩個表的數(shù)據(jù)行相乘。需要注意的是,如果每個表有 1000 行,那么返回結(jié)果的數(shù)量就有 1000×1000 = 1000000 行,數(shù)據(jù)量是非常巨大的。

實例:
笛卡爾積實例:

select ename,sal,dname,emp.deptno from emp CROSS JOIN dept;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
交叉查詢也可以使用where子句進(jìn)行結(jié)果過濾:
實例:
顯示雇員名,雇員工資及所在部門的名字

分析:

  1. 雇員名,雇員工資 來自 emp 表
  2. 部門的名字 來自 dept 表
  3. 需要對 emp 和 dept 查詢 ename,sal,dname,deptno字段
  4. 當(dāng)我們指定顯示某個表的列時,需要使用:表.列名

使用CROSS JOIN連接表名寫法:

select ename,sal,dname,emp.deptno from emp CROSS JOIN dept 
where emp.deptno = dept.deptno;

使用逗號,連接表名寫法:

select ename,sal,dname,emp.deptno from emp,dept where emp.deptno = dept.deptno;

兩種方法的返回結(jié)果是相同的:
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

內(nèi)連接(INNER JOIN)

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
內(nèi)連接(INNER JOIN)主要通過設(shè)置連接條件的方式,來移除查詢結(jié)果中某些數(shù)據(jù)行的交叉連接。簡單來說,就是利用條件表達(dá)式來消除交叉連接的某些數(shù)據(jù)行。

內(nèi)連接使用 INNER JOIN 關(guān)鍵字連接兩張表,并使用 ON 子句來設(shè)置連接條件。如果沒有連接條件,INNER JOIN 和 CROSS JOIN 在語法上是等同的,兩者可以互換。

內(nèi)連接的語法格式如下:

SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句]

語法說明如下:

  • 字段名:需要查詢的字段名稱。
  • <表1><表2>:需要內(nèi)連接的表名。
  • INNER JOIN內(nèi)連接中可以省略 INNER 關(guān)鍵字,只用關(guān)鍵字 JOIN。
  • ON 子句:用來設(shè)置內(nèi)連接的連接條件

INNER JOIN 也可以使用 WHERE 子句指定連接條件,但是 INNER JOIN … ON 語法是官方的標(biāo)準(zhǔn)寫法,而且 WHERE 子句在某些時候會影響查詢的性能。

多個表內(nèi)連接時,在 FROM 后連續(xù)使用 INNER JOIN 或 JOIN 即可。

內(nèi)連接可以查詢兩個或兩個以上的表。為了讓大家更好的理解,暫時只講解兩個表的連接查詢。
實例:
顯示雇員名,雇員工資及所在部門的名字

分析:

  1. 雇員名,雇員工資 來自 emp 表
  2. 部門的名字 來自 dept 表
  3. 需求對 emp 和 dept 查詢 ename,sal,dname,deptno字段
  4. 當(dāng)我們需要指定顯示某個表的列時,需要使用:表.列名

使用INNER JOIN連接表名,ON后設(shè)置連接條件:

select ename,sal,dname,emp.deptno from 
emp INNER JOIN dept 
ON emp.deptno = dept.deptno;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
以上命令也相當(dāng)于:

select ename,sal,dname,emp.deptno from 
emp, dept 
where emp.deptno = dept.deptno;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
注意:當(dāng)對多個表進(jìn)行查詢時,要在 SELECT 語句后面指定字段是來源于哪一張表。因此,在多表查詢時,SELECT 語句后面的寫法是表名.列名。另外,如果表名非常長的話,也可以給表設(shè)置別名,這樣就可以直接在 SELECT 語句后面寫上表的別名.列名。

外連接(左連接、右連接)

外連接可以分為左外連接和右外連接

左連接(…LEFT JOIN…ON…)

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
獲取左表所有記錄,即使右表沒有對應(yīng)匹配的記錄

左外連接又稱為左連接,使用 LEFT OUTER JOIN 關(guān)鍵字連接兩個表,并使用 ON 子句來設(shè)置連接條件。

左連接的語法格式如下:

SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>

語法說明如下。

  • 字段名:需要查詢的字段名稱。
  • <表1><表2>:需要左連接的表名。
  • LEFT OUTER JOIN:左連接中可以省略 OUTER 關(guān)鍵字,只使用關(guān)鍵字 LEFT JOIN。
  • ON 子句:用來設(shè)置左連接的連接條件,不能省略。

上述語法中,“表1”為基表,“表2”為參考表。左連接查詢時,可以查詢出“表1”中的所有記錄和“表2”中匹配連接條件的記錄。如果“表1”的某行在“表2”中沒有匹配行,那么在返回結(jié)果中,“表2”的字段值均為空值(NULL)。

實例解釋:
顯示所有人的成績,如果沒有成績,也要顯示該人的姓名和 id 號,成績顯示為空

select `name`,stu.id,grade from 
stu LEFT JOIN exam 
ON stu.id=exam.id;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql

右連接

與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應(yīng)匹配的記錄。
mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
右外連接又稱為右連接,右連接是左連接的反向連接。使用 RIGHT OUTER JOIN 關(guān)鍵字連接兩個表,并使用 ON 子句來設(shè)置連接條件。

**右連接的語法格式如下:**
SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>

語法說明如下。

  • 字段名:需要查詢的字段名稱。
  • <表1><表2>:需要右連接的表名。
  • RIGHT OUTER JOIN:右連接中可以省略 OUTER 關(guān)鍵字,只使用關(guān)鍵字 RIGHT JOIN。
  • ON 子句:用來設(shè)置右連接的連接條件,不能省略。

與左連接相反,右連接以“表2”為基表,“表1”為參考表。右連接查詢時,可以查詢出“表2”中的所有記錄和“表1”中匹配連接條件的記錄。如果“表2”的某行在“表1”中沒有匹配行,那么在返回結(jié)果中,“表1”的字段值均為空值(NULL)

實例解釋:
顯示所有成績,如果沒有名字匹配,顯示空
即:右邊的表(exam) 和左表(stu)沒有匹配的記錄,也會把右表的記錄顯示出來

select `name`,stu.id,grade from 
stu RIGHT JOIN exam 
ON stu.id=exam.id;

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
使用外連接查詢時,一定要分清需要查詢的結(jié)果,是需要顯示左表的全部記錄還是右表的全部記錄,然后選擇相應(yīng)的左連接和右連接

r) **字符串查找:like子句(選講)

在 MySQL 中,LIKE 關(guān)鍵字主要用于搜索匹配字段中的指定內(nèi)容。
其基本語法格式如下:

SELECT {* | <字段列名>} FROM 表名 WHERE 字段列名 [NOT] LIKE  '字符串';

其中:

  • NOT :可選參數(shù),字段中的內(nèi)容與指定的字符串不匹配時滿足條件。
  • 字符串:指定用來匹配的字符串。“字符串”可以是一個很完整的字符串,也可以包含通配符。
  • LIKE 關(guān)鍵字支持百分號“%”和下劃線“_”通配符(通配符是一種特殊語句,主要用來模糊查詢。當(dāng)不知道真正字符或者懶得輸入完整名稱時,可以使用通配符來代替一個或多個真正的字符)。
  • 注意:匹配的字符串必須加單引號或雙引號

帶有“%”通配符的查詢
“%”是 MySQL 中最常用的通配符,它能代表任何長度的字符串,字符串的長度可以為 0。例如,a%b表示以字母 a 開頭,以字母 b 結(jié)尾的任意長度的字符串。該字符串可以代表 ab、acb、accb、accrb 等字符串。
實例:

select * from users where username like "tes%";

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
帶有“_”通配符的查詢
“_”只能代表單個字符,字符的長度不能為 0。例如,a_b可以代表 acb、adb、aub 等字符串。
實例:

select * from users where username like "test_";

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
如何讓LIKE 區(qū)分大小寫:
默認(rèn)情況下,LIKE 關(guān)鍵字匹配字符的時候是不區(qū)分大小寫的。如果需要區(qū)分大小寫,可以加入 BINARY 關(guān)鍵字。
實例:

select * from users where username like binary "Test_";

mysql數(shù)據(jù)庫基礎(chǔ)知識,數(shù)據(jù)庫系統(tǒng)概念,數(shù)據(jù)庫,mysql,sql,database,nosql
使用通配符的注意事項和技巧
下面是使用通配符的一些注意事項:

  • 注意大小寫。MySQL 默認(rèn)是不區(qū)分大小寫的。如果區(qū)分大小寫,像“Tom”這樣的數(shù)據(jù)就不能被“t%”所匹配到。
  • 注意尾部空格,尾部空格會干擾通配符的匹配。例如,“T% ”就不能匹配到“Tom”。
  • 注意 NULL?!?mark>%”通配符可以到匹配任意字符,但是不能匹配 NULL。也就是說 “%”匹配不到 tb_students_info 數(shù)據(jù)表中值為 NULL 的記錄。

下面是一些使用通配符要記住的技巧。

  • 不要過度使用通配符,如果其它操作符能達(dá)到相同的目的,應(yīng)該使用其它操作符。因為 MySQL 對通配符的處理一般會比其他操作符花費更長的時間。
  • 在確定使用通配符后,除非絕對有必要,否則不要把它們用在字符串的開始處。把通配符置于搜索模式的開始處,搜索起來是最慢的。
  • 仔細(xì)注意通配符的位置。如果放錯地方,可能不會返回想要的數(shù)據(jù)。

拓展
如果查詢內(nèi)容中包含通配符,可以使用“\”轉(zhuǎn)義符轉(zhuǎn)義。

3. **非關(guān)系型數(shù)據(jù)庫mongodb簡介(選講)

簡介:

MongoDB是一個基于分布式文件存儲 [1] 的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。

MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點是它支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。

4. **非關(guān)系型數(shù)據(jù)庫redis簡介(選講)

簡介

Redis 是完全開源免費的,遵守 BSD 協(xié)議,是一個靈活的高性能 key-value 數(shù)據(jù)結(jié)構(gòu)存儲,可以用來作為數(shù)據(jù)庫、緩存和消息隊列。

Redis 比其他 key-value 緩存產(chǎn)品有以下三個特點:

  • Redis 支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載到內(nèi)存使用。
  • Redis 不僅支持簡單的 key-value 類型的數(shù)據(jù),同時還提供 list,set,zset,hash 等數(shù)據(jù)結(jié)構(gòu)的存儲。
  • Redis 支持主從復(fù)制,即 master-slave 模式的數(shù)據(jù)備份。

Redis 的特點

  • 高性能: Redis 將所有數(shù)據(jù)集存儲在內(nèi)存中,可以在入門級 Linux 機器中每秒寫(SET)11 萬次,讀(GET)8.1 萬次。Redis 支持 Pipelining 命令,可一次發(fā)送多條命令來提高吞吐率,減少通信延遲。
  • 持久化:當(dāng)所有數(shù)據(jù)都存在于內(nèi)存中時,可以根據(jù)自上次保存以來經(jīng)過的時間和/或更新次數(shù),使用靈活的策略將更改異步保存在磁盤上。Redis 支持僅附加文件(AOF)持久化模式。
  • 數(shù)據(jù)結(jié)構(gòu): Redis 支持各種類型的數(shù)據(jù)結(jié)構(gòu),例如字符串、散列、集合、列表、帶有范圍查詢的有序集、位圖、超級日志和帶有半徑查詢的地理空間索引。
  • 原子操作:處理不同數(shù)據(jù)類型的 Redis 操作是原子操作,因此可以安全地 SET 或 INCR 鍵,添加和刪除集合中的元素等。
  • 支持的語言: Redis 支持許多語言,如 C、C++、Erlang、Go、Haskell、Java、JavaScript(Node.js)、Lua、Objective-C、Perl、PHP、Python、R、Ruby、Rust、Scala、Smalltalk 等。
  • 主/從復(fù)制: Redis 遵循非常簡單快速的主/從復(fù)制。配置文件中只需要一行來設(shè)置它,而 Slave 在 Amazon EC2 實例上完成 10 MM key 集的初始同步只需要 21 秒。
  • 分片: Redis 支持分片。與其他鍵值存儲一樣,跨多個 Redis 實例分發(fā)數(shù)據(jù)集非常容易。
  • 可移植: Redis 是用 C 編寫的,適用于大多數(shù) POSIX 系統(tǒng),如 Linux、BSD、Mac OS X、Solaris 等。

與其他 key-value 存儲有什么不同?

Redis 有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對它們的原子性操作,這是一個不同于其他數(shù)據(jù)庫的進(jìn)化路徑。Redis 的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時對程序員透明,無需進(jìn)行額外的抽象。

Redis 運行在內(nèi)存中但是可以持久化到磁盤,所以在對不同數(shù)據(jù)集進(jìn)行高速讀寫時需要權(quán)衡內(nèi)存,因為數(shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫方面的另一個優(yōu)點是,相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來非常簡單,這樣 Redis 可以做很多內(nèi)部復(fù)雜性很強的事情。同時,因 RDB 和 AOF 兩種磁盤持久化方式是不適合隨機訪問,因為它們是順序?qū)懭氲摹?/p>

Redis 架構(gòu)

Redis 主要由有兩個程序組成:

  • Redis 客戶端 redis-cli
  • Redis 服務(wù)器 redis-server

客戶端、服務(wù)器可以位于同一臺計算機或兩臺不同的計算機中。文章來源地址http://www.zghlxwxcb.cn/news/detail-854311.html

到了這里,關(guān)于MySQL數(shù)據(jù)庫基礎(chǔ)知識,基礎(chǔ)操作詳細(xì)整理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)庫】MySQL基礎(chǔ)知識全解

    【數(shù)據(jù)庫】MySQL基礎(chǔ)知識全解

    系列綜述: ??目的:本系列是個人整理為了 秋招面試 的,整理期間苛求每個知識點,平衡理解簡易度與深入程度。 ??來源:材料主要源于拓跋阿秀、小林coding等大佬博客進(jìn)行的,每個知識點的修正和深入主要參考各平臺大佬的文章,其中也可能含有少量的個人實驗自證。

    2024年02月09日
    瀏覽(22)
  • Mysql數(shù)據(jù)庫基礎(chǔ)知識總復(fù)習(xí)

    Mysql數(shù)據(jù)庫基礎(chǔ)知識總復(fù)習(xí)

    小亭子正在努力的學(xué)習(xí)編程,接下來將開啟javaEE的學(xué)習(xí)~~ 分享的文章都是學(xué)習(xí)的筆記和感悟,如有不妥之處希望大佬們批評指正~~ 同時如果本文對你有幫助的話,煩請點贊關(guān)注支持一波, 感激不盡~~ 目錄 前言 數(shù)據(jù)庫基礎(chǔ)知識 數(shù)據(jù),數(shù)據(jù)庫,數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫系統(tǒng) 數(shù)據(jù)

    2024年02月02日
    瀏覽(20)
  • MySQL數(shù)據(jù)庫基礎(chǔ)初學(xué)者必備知識

    MySQL數(shù)據(jù)庫基礎(chǔ)初學(xué)者必備知識

    目錄 1.數(shù)據(jù)庫的基本操作 1.1顯示所有數(shù)據(jù)庫 1.2創(chuàng)建數(shù)據(jù)庫 1.3刪除數(shù)據(jù)庫 2.數(shù)據(jù)庫的類型 2.1數(shù)值類型 2.2字符串類型 2.3日期類型 3.表的簡單操作 3.1創(chuàng)建一個表 3.2顯示表的結(jié)構(gòu) 3.3顯示數(shù)據(jù)庫中的所有表 3.4刪除指定表 4.實戰(zhàn)練習(xí) 數(shù)據(jù)庫的基本操作為:顯示數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫

    2023年04月11日
    瀏覽(33)
  • 【數(shù)據(jù)庫】MySQL概念性基礎(chǔ)知識期末復(fù)習(xí)

    第一章 3 二維表結(jié)構(gòu)……數(shù)據(jù)模型—— 關(guān)系數(shù)據(jù)模型 5 描述全部數(shù)據(jù)整體邏輯結(jié)構(gòu)—— 模式 6 邏輯數(shù)據(jù)獨立性—— 模式變,外模式和應(yīng)用程序不變 7 物理數(shù)據(jù)獨立性—— 內(nèi)模式變,外模式和應(yīng)用程序不變 9 R-(R-S)—— R∩S 10 從兩個關(guān)系笛卡爾積中選取他們屬性間滿足一定條

    2024年02月02日
    瀏覽(25)
  • MySQL 基礎(chǔ)知識(一)之?dāng)?shù)據(jù)庫和 SQL 概述

    MySQL 基礎(chǔ)知識(一)之?dāng)?shù)據(jù)庫和 SQL 概述

    目錄 1 數(shù)據(jù)庫相關(guān)概念 2 數(shù)據(jù)庫的結(jié)構(gòu) ?3 SQL 概要 4 SQL 的基本書寫規(guī)則 1 數(shù)據(jù)庫相關(guān)概念 數(shù)據(jù)庫是將大量的數(shù)據(jù)保存起來,通過計算機加工而成的可以進(jìn)行高效訪問的數(shù)據(jù)集合 數(shù)據(jù)庫管理系統(tǒng)(DBMS)是用來管理數(shù)據(jù)庫的計算機系統(tǒng),通過使用 DBMS,多個用戶可以安全、簡單

    2024年02月20日
    瀏覽(28)
  • MySQL基礎(chǔ)篇——MySQL數(shù)據(jù)庫客戶端連接,數(shù)據(jù)模型,SQL知識

    MySQL基礎(chǔ)篇——MySQL數(shù)據(jù)庫客戶端連接,數(shù)據(jù)模型,SQL知識

    作者簡介:一名云計算網(wǎng)絡(luò)運維人員、每天分享網(wǎng)絡(luò)與運維的技術(shù)與干貨。? ?座右銘:低頭趕路,敬事如儀 個人主頁:網(wǎng)絡(luò)豆的主頁?????? 目錄 前言 一.客戶端連接MySQL 二. 數(shù)據(jù)模型 1.關(guān)系型數(shù)據(jù)庫(RDBMS) 2.數(shù)據(jù)模型 三.SQL 1.SQL通用語法 2.SQL分類 3.數(shù)據(jù)庫操作 1). 查

    2024年02月06日
    瀏覽(25)
  • mysql+sqlyog的超詳細(xì)完整安裝+數(shù)據(jù)庫基礎(chǔ)知識

    mysql+sqlyog的超詳細(xì)完整安裝+數(shù)據(jù)庫基礎(chǔ)知識

    地址:https://dev.mysql.com/downloads/mysql/5.5.html#downloads 注冊或登錄Oracle賬戶下載 復(fù)制到文件路徑至bin的到 此電腦——高級系統(tǒng)設(shè)置——高級——環(huán)境變量—— 點下面的path 新建粘貼路徑即可 一路確定 環(huán)境配置完成后,打開文件夾,創(chuàng)建一個新的文件后綴名為 .ini 的 my.ini空白文

    2024年02月06日
    瀏覽(19)
  • 計算機復(fù)試面試基礎(chǔ)知識(八股文)(數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計網(wǎng)、機組等)

    數(shù)據(jù)庫緒論 1、簡述三層模式、兩級映射,分別有什么作用? 模式(邏輯模式):是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是數(shù)據(jù)庫系統(tǒng)模式結(jié)構(gòu)的中間層,即不涉及數(shù)據(jù)的物理存儲細(xì)節(jié),也與具體應(yīng)用程序開發(fā)工具語言無關(guān)。 外模式(用戶模式):是用戶能看見和使

    2023年04月09日
    瀏覽(73)
  • mysql數(shù)據(jù)庫面試題基礎(chǔ)知識,Hadoop之MapReduce04,騰訊java面試流程

    mysql數(shù)據(jù)庫面試題基礎(chǔ)知識,Hadoop之MapReduce04,騰訊java面試流程

    該方法的執(zhí)行過程比較復(fù)雜,我們慢慢來分析,首先來看下簡化的時序圖 3.1waitForCompletion public boolean waitForCompletion(boolean verbose ) throws IOException, InterruptedException, ClassNotFoundException { // 判斷任務(wù)的狀態(tài),如果是DEFINE就提交 if (state == JobState.DEFINE) { submit(); } if (verbose) { // 監(jiān)聽并且

    2024年04月14日
    瀏覽(33)
  • MySQL-創(chuàng)建和管理表:基礎(chǔ)知識、創(chuàng)建和管理數(shù)據(jù)庫、創(chuàng)建表、修改表、重命名表、刪除表、清空表、拓展

    MySQL-創(chuàng)建和管理表:基礎(chǔ)知識、創(chuàng)建和管理數(shù)據(jù)庫、創(chuàng)建表、修改表、重命名表、刪除表、清空表、拓展

    注:此為筆者學(xué)習(xí)尚硅谷-宋紅康MySQL的筆記,其中包含個人的筆記和理解,僅做學(xué)習(xí)筆記之用,更多詳細(xì)資訊請出門左拐B站:尚硅谷!!! 1.1 一條數(shù)據(jù)存儲的過程 存儲數(shù)據(jù)是處理數(shù)據(jù)的第一步 。只有正確地把數(shù)據(jù)存儲起來,我們才能進(jìn)行有效的處理和分析。否則,只能是一團

    2024年04月11日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包