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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

数据库

从mysql学起_MySQL学习从这里出发!

發(fā)布時(shí)間:2024/3/13 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从mysql学起_MySQL学习从这里出发! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL數(shù)據(jù)庫(kù)開(kāi)發(fā)學(xué)習(xí)中,想滿(mǎn)足一些需求,無(wú)疑需要經(jīng)常與數(shù)據(jù)打交道,例如,我們?cè)谑褂肐O的一些技術(shù)的時(shí)候,常常需要將一些數(shù)據(jù)存儲(chǔ)到外部文件,可能大家會(huì)問(wèn),我們初學(xué)的時(shí)候常常會(huì)簡(jiǎn)單的保存一些數(shù)據(jù)到 .txt 文件中,為什么還需要數(shù)據(jù)庫(kù)呢?

(一) 為什么使用數(shù)據(jù)庫(kù)?

(1) 查詢(xún)速度

假定我們將數(shù)據(jù)全部存儲(chǔ)在一個(gè)普通文件中(data.txt)_(以逗號(hào)間隔)

......

"Eminem",male,1972,"USA"

"Rihanna",female,1988,"Barbados"

"Taylor Swift",1989,female,"USA"

"Aavril Lavigne",1984,female,"Canada"

......

如果在我們的數(shù)據(jù)極為龐大的情況下,我們需要查詢(xún)其中的一些數(shù)據(jù),例如,查詢(xún)Eminem的國(guó)籍,我們一般會(huì)使用遍歷,但是毫無(wú)疑問(wèn),這個(gè)響應(yīng)時(shí)間會(huì)變得極其緩慢,但是使用數(shù)據(jù)庫(kù)后,它所提供的一些索引技術(shù)等就可以解決這樣的問(wèn)題

(2) 保證數(shù)據(jù)完整有效

"Rihanna",female,1988,"Barbados"

"Rihanna",female,1995,"USA"

如果數(shù)據(jù)中出現(xiàn)了重名的情況,又如何判斷是不是同一個(gè)人呢?

如果data.txt文件中的數(shù)據(jù)被錯(cuò)誤的修改,例如出生年份被修改為其他類(lèi)型字符串這種無(wú)效表達(dá)怎么辦?

或許你可以在程序中寫(xiě)一些邏輯判斷語(yǔ)句進(jìn)而篩選處理這些問(wèn)題,但是仍舊在數(shù)據(jù)較為龐大的情況下,會(huì)出現(xiàn)各種各樣的問(wèn)題,增加了開(kāi)發(fā)者的開(kāi)發(fā)難度,而數(shù)據(jù)庫(kù)本身就制定了一些約束,從而保證了數(shù)據(jù)的完整且,有效,從而使開(kāi)發(fā)者只需要更加注重于程序本身的設(shè)計(jì),而不用花費(fèi)過(guò)多的時(shí)間去處理數(shù)據(jù)上的一些細(xì)節(jié)問(wèn)題

(3) 數(shù)據(jù)共享

常用來(lái)簡(jiǎn)單存儲(chǔ)數(shù)據(jù)的 txt/excel 等均屬于單一文件,并且都是無(wú)法共享的,只支持當(dāng)前用戶(hù)使用并且修改

而數(shù)據(jù)庫(kù)則允許用戶(hù)共享,不同的用戶(hù)可以同時(shí)存取數(shù)據(jù)庫(kù)中的數(shù)據(jù),用戶(hù)也可以用各種方式通過(guò)接口使用數(shù)據(jù)庫(kù),并提供數(shù)據(jù)共享

(4) 數(shù)據(jù)的安全性

在我們前者中,數(shù)據(jù)的修改是很隨意的

但是在實(shí)際開(kāi)發(fā)中,我們有時(shí)候需要面臨,多個(gè)用戶(hù)檢索、修改同一文件中的數(shù)據(jù),或者在并發(fā)情況下,寫(xiě)同一文件或者記錄,而數(shù)據(jù)庫(kù)基于鎖等的一些技術(shù)便可以幫助我們解決這些問(wèn)題

(5) 故障恢復(fù)

由于邏輯或者物理上的錯(cuò)誤,導(dǎo)致了系統(tǒng)的錯(cuò)誤操作,從而使得數(shù)據(jù)被皮懷,如何快速恢復(fù)數(shù)據(jù),我們上面的單一文件系統(tǒng)顯然無(wú)法幫助我們解決問(wèn)題,而數(shù)據(jù)庫(kù)卻有相關(guān)機(jī)制去彌補(bǔ)、處理相關(guān)問(wèn)題

上面我們僅僅從幾個(gè)常見(jiàn)的點(diǎn)分析了為什么使用數(shù)據(jù)庫(kù),當(dāng)然遠(yuǎn)遠(yuǎn)不止這些,所以總的來(lái)說(shuō)就是數(shù)據(jù)庫(kù)其特殊的存儲(chǔ)以及管理方式,既提高了效率,也極大的減少了開(kāi)發(fā)人員的負(fù)擔(dān)

(二) 數(shù)據(jù)庫(kù)的基本概念

(1) 概述

數(shù)據(jù)庫(kù)(DateBase,簡(jiǎn)稱(chēng)DB)是一種用于存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù),簡(jiǎn)單的說(shuō)就是一個(gè)容器內(nèi),內(nèi)部按照一定方式存儲(chǔ)著一些數(shù)據(jù)

(2) 特點(diǎn)持久化存儲(chǔ)數(shù)據(jù)的。其實(shí)數(shù)據(jù)庫(kù)就是一個(gè)文件系統(tǒng)

數(shù)據(jù)獨(dú)立存儲(chǔ),且集中控制,方便存儲(chǔ)和管理數(shù)據(jù)

使用了統(tǒng)一的方式操作數(shù)據(jù)庫(kù) -- SQL

實(shí)現(xiàn)數(shù)據(jù)共享

數(shù)據(jù)一致性和可維護(hù)性,保證數(shù)據(jù)安全可靠

(三) MySQL數(shù)據(jù)庫(kù)的基本操作

MySQL服務(wù)啟動(dòng)(兩種方式)

1. cmd--> services.msc 打開(kāi)服務(wù)的窗口

2. 使用管理員打開(kāi)cmd

A: net start mysql : 啟動(dòng)mysql的服務(wù)

B: net stop mysql : 關(guān)閉mysql服務(wù)

MySQL登錄

1. 點(diǎn)擊 MySQL 5.7 Command Line Client,輸入密碼即可

2. 命令行登錄(配置好環(huán)境變量)

A: mysql -uroot -p密碼 //root為用戶(hù)名

B: mysql -hip -uroot -p連接目標(biāo)的密碼

C: mysql --host=ip --user=root --password=連接目標(biāo)的密碼

MySQL退出

1. exit

2. quit

(四) SQL簡(jiǎn)單認(rèn)識(shí)

(1) 什么是SQL?

Structured Query Language:結(jié)構(gòu)化查詢(xún)語(yǔ)言

SQL就是訪(fǎng)問(wèn)和處理關(guān)系數(shù)據(jù)庫(kù)的計(jì)算機(jī)標(biāo)準(zhǔn)語(yǔ)言,它定義了操作所有關(guān)系型數(shù)據(jù)庫(kù)的規(guī)則

大部分?jǐn)?shù)據(jù)庫(kù)在SQL的標(biāo)準(zhǔn)上進(jìn)行了擴(kuò)展。而每一種數(shù)據(jù)庫(kù)操作的方式存在不一樣的地方,稱(chēng)為方言。

但凡涉及到關(guān)系型數(shù)據(jù)庫(kù)就離不開(kāi)SQL,例如在電商網(wǎng)站中存入商品信息,游戲中存儲(chǔ)裝備道具信息等

補(bǔ)充:

常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù):Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL

商用:Oracle、DB2、Microsoft SQL Server

開(kāi)源:MySQL

桌面:Microsoft Access

常見(jiàn)的非關(guān)系型數(shù)據(jù)庫(kù):NoSql、Cloudant、MongoDb、redis、HBase

(2) SQL通用語(yǔ)法

1. SQL語(yǔ)句 單行或多行書(shū)寫(xiě),以分號(hào)結(jié)尾,并且可以使用空格和縮進(jìn)來(lái)增強(qiáng)語(yǔ)句的可讀性

2. MySQL 數(shù)據(jù)庫(kù)的 SQL 語(yǔ)句不區(qū)分大小寫(xiě),關(guān)鍵字建議使用大寫(xiě)

3. 3 種注釋

A: 單行注釋: -- 注釋內(nèi)容 或 # 注釋內(nèi)容(mysql 特有)

B: 多行注釋: /* 注釋 */

(五) SQL分類(lèi)

數(shù)據(jù)定義語(yǔ)言——DDL(Data Definition Language)

允許用戶(hù)定義 (創(chuàng)建) 數(shù)據(jù)庫(kù)對(duì)象:數(shù)據(jù)庫(kù),表,列等

數(shù)據(jù)操作語(yǔ)言——DML(Data Manipulation Language)

允許用戶(hù)對(duì)數(shù)據(jù)庫(kù)中表的數(shù)據(jù)進(jìn)行增刪改

數(shù)據(jù)查詢(xún)語(yǔ)言——DQL(Data Query Language)

允許用戶(hù)查詢(xún)數(shù)據(jù)庫(kù)中表的記錄(數(shù)據(jù))

數(shù)據(jù)控制語(yǔ)言——DCL(Data Control Language)

用來(lái)定義數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)權(quán)限和安全級(jí)別,及創(chuàng)建用戶(hù)

(1) DDL:操作數(shù)據(jù)庫(kù)、表

1. 操作數(shù)據(jù)庫(kù) —— CRUE

-- CURE ---> C(Create):創(chuàng)建 + R(Retrieve):查詢(xún) + U(Update):修改 + D(Delete):刪除

1. C(Create):創(chuàng)建

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

CREATE DATABASE 數(shù)據(jù)庫(kù)名稱(chēng);

-- 創(chuàng)建數(shù)據(jù)庫(kù),判斷不存在,再創(chuàng)建

CREATE DATABASE IF NOT EXISTS 數(shù)據(jù)庫(kù)名稱(chēng);

-- 創(chuàng)建數(shù)據(jù)庫(kù),并且制定字符集

CREATE DATABASE 數(shù)據(jù)庫(kù)名稱(chēng) CHARACTER SET 字符集名;

2. R(Retrieve):查詢(xún)

-- 查詢(xún)所有數(shù)據(jù)庫(kù)名稱(chēng)

SHOW DATABASES

-- 查詢(xún)某個(gè)數(shù)據(jù)庫(kù)的字符集 : 查詢(xún)某個(gè)數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句

SHOW CREATE DATABASE 數(shù)據(jù)庫(kù)名稱(chēng);

3. U(Update):修改

-- 修改數(shù)據(jù)庫(kù)的字符集

ALTER DATABASE 數(shù)據(jù)庫(kù)名稱(chēng) CHARACTER SET 字符集名稱(chēng);

4. D(Delete):刪除

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

DROP DATABASE 數(shù)據(jù)庫(kù)名稱(chēng);

-- 判斷數(shù)據(jù)庫(kù)存在,存在再刪除

DROP DATABASE IF EXISTS 數(shù)據(jù)庫(kù)名稱(chēng);

5. 使用數(shù)據(jù)庫(kù)

-- 查詢(xún)當(dāng)前正在使用的數(shù)據(jù)庫(kù)名稱(chēng)

SELECT DATABASE();

-- 使用數(shù)據(jù)庫(kù)

USE 數(shù)據(jù)庫(kù)名稱(chēng);

2. 操作表

1. C(Create):創(chuàng)建

-- 語(yǔ)法 * 注意最后一行不需要加逗號(hào)(,)

CREATE TABLE 表名(

列名1 數(shù)據(jù)類(lèi)型1,

列名2 數(shù)據(jù)類(lèi)型2,

......

列名n 數(shù)據(jù)類(lèi)型n

);

-- 數(shù)據(jù)類(lèi)型

1. INT:整數(shù)類(lèi)型

2. DOUBLE:小數(shù)類(lèi)型

3. DATE:日期,只包含年月日,yyyy-MM-dd

4. DATETIME:日期,包含年月日時(shí)分秒 yyyy-MM-dd HH:mm:ss

5. TIMESTAMP:時(shí)間錯(cuò)類(lèi)型 包含年月日時(shí)分秒 yyyy-MM-dd HH:mm:ss

6. VARCHAR:字符串

-- 注意:time如果將來(lái)不給這個(gè)字段賦值,或賦值為null,則默認(rèn)使用當(dāng)前的系統(tǒng)時(shí)間來(lái)自動(dòng)賦值

-- DOUBLE(6,3) 代表共保留6位數(shù)字,小數(shù)點(diǎn)后保留3位

-- 復(fù)制表

CREATE TABLE 表名 LIKE 被復(fù)制的表名;

2. R(Retrieve):查詢(xún)

-- 查詢(xún)某個(gè)數(shù)據(jù)庫(kù)中所有的表名

SHOW TABLES;

-- 查詢(xún)表結(jié)構(gòu)

DESC 表名;

3. U(Update):修改

-- 修改表名

ALTER TABLE 表名 RENAME TO 新表名

-- 修改表的字符集

ALTER TABLE 表名 CHARACTER SET 字符集名稱(chēng);

-- 添加一列

ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類(lèi)型

-- 修改列名稱(chēng) 類(lèi)型

ALTER TABLE 表名 CHANGE 列名 新列名 新數(shù)據(jù)類(lèi)型;

ALTER TABLE 表名 MODIFY 列名 新數(shù)據(jù)類(lèi)型;

-- 刪除列

DROP TABLE 表名;

DROP TABLE IF EXISTS 表名;

4. D(Delete):刪除

DROP TABLE 表名;

Drop TABLE IF EXISTS 表名;

(2) DML:增刪改表中的數(shù)據(jù)

1. 表中添加數(shù)據(jù)

-- 語(yǔ)法:

INSERT INTO 表名(列名1,列名2,...列名n) VALUES(值1,值2,...值n);

-- 注意:

A: 列名和值要一一對(duì)應(yīng)。

B: 如果表名后,不定義列名,則默認(rèn)給所有列添加值

Eg:INSERT INTO 表名 Values(值1,值2,...值n);

C: 除了數(shù)字類(lèi)型,其他類(lèi)型需要使用引號(hào)(單雙都可以)引起來(lái)

2. 刪除表中數(shù)據(jù)

-- 語(yǔ)法:

DELETE FROM 表名 [WHERE 條件]

-- 注意:

若不加條件,則刪除表中所有記錄

-- 刪除所有記錄的兩種方式

A: DELETE FROM 表名; -- 不推薦使用,有多少條記錄就會(huì)執(zhí)行多少次刪除操作

B: TRUNCATE TABLE 表名; -- 推薦使用,先刪除表,然后再創(chuàng)建一張一樣的表,效率更高

3. 修改表中數(shù)據(jù)

-- 語(yǔ)法:

UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2,... [WHERE 條件];

-- 注意:

若不限定條件,則會(huì)修改表中的所有記錄

(3) DQL:查詢(xún)表中的記錄

SELECT * FROM 表名;

1. 語(yǔ)法:

SELECT

字段列表

FROM

表名列表

WHERE

條件列表

GROUP BY

分組字段

HAVING

分組之后的條件

ORDER BY

排序

LIMIT

分頁(yè)限定

2. 基礎(chǔ)查詢(xún)

-- 多個(gè)字段的查詢(xún)

SELECT 字段名1,字段名2... FROM 表名;

注意:

如果查詢(xún)所有字段,則可以使用*來(lái)替代字段列表。

-- 去除重復(fù):

DISTINCT

-- 計(jì)算列

一般可以使用四則運(yùn)算計(jì)算一些列的值。(一般只會(huì)進(jìn)行數(shù)值型的計(jì)算)

IFNULL(表達(dá)式1,表達(dá)式2):null參與的運(yùn)算,計(jì)算結(jié)果都為null

表達(dá)式1:哪個(gè)字段需要判斷是否為null

如果該字段為null后的替換值。

-- 起別名:

as:as也可以省略

3. 條件查詢(xún)

1. where子句后跟條件

2. 運(yùn)算符

> 、< 、<= 、>= 、= 、<>

BETWEEN...AND

IN( 集合)

LIKE:模糊查詢(xún)

占位符:

_:單個(gè)任意字符

%:多個(gè)任意字符

IS NULL

AND 或 &&

OR 或 ||

NOT 或 !

-- 查詢(xún)年齡不等于20歲

SELECT * FROM student WHERE age != 20;

SELECT * FROM student WHERE age <> 20;

-- 查詢(xún)年齡大于等于20 小于等于30(三種方式)

SELECT * FROM student WHERE age >= 20 && age <=30;

SELECT * FROM student WHERE age >= 20 AND age <=30;

SELECT * FROM student WHERE age BETWEEN 20 AND 30;

-- 查詢(xún)年齡22歲,18歲,25歲的信息

SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25

SELECT * FROM student WHERE age IN (22,18,25);

-- 查詢(xún)英語(yǔ)成績(jī)?yōu)閚ull

-- 下面第一句是錯(cuò)誤的,null值不能使用 = 和(!=) 判斷

SELECT * FROM student WHERE english = NULL; (×)

SELECT * FROM student WHERE english IS NULL; (√)

-- 查詢(xún)英語(yǔ)成績(jī)不為null

SELECT * FROM student WHERE english IS NOT NULL;

-- 查詢(xún)姓張的有哪些? like

SELECT * FROM student WHERE NAME LIKE '張%';

-- 查詢(xún)姓名第二個(gè)是杰的人

SELECT * FROM student WHERE NAME LIKE "_杰%";

-- 查詢(xún)姓名是3個(gè)字的人

SELECT * FROM student WHERE NAME LIKE '___';

-- 查詢(xún)姓名中包含文的人

SELECT * FROM student WHERE NAME LIKE '%文%';

DQL:查詢(xún)語(yǔ)句

1. 排序查詢(xún)

-- 語(yǔ)法:

ORDER BY 子句

* ORDER BY 排序字段1 排序方式1 ,排序字段2 排序方式2...

-- 排序方式:

ASC:升序,默認(rèn)的。

DESC:降序

-- 注意:如果有多個(gè)排序條件,則當(dāng)前邊的條件值一樣時(shí),才會(huì)判斷第二條件。

2. 聚合函數(shù):將一列數(shù)據(jù)作為一個(gè)整體,進(jìn)行縱向的計(jì)算。

COUNT:計(jì)算個(gè)數(shù)

-- 一般選擇非空的列:主鍵

-- count(*)

MAX:計(jì)算最大值

MIN:計(jì)算最小值

SUM:計(jì)算和

AVG:計(jì)算平均值

-- 注意:聚合函數(shù)的計(jì)算,排除null值。

解決方案:

1. 選擇不包含非空的列進(jìn)行計(jì)算

2. IFNULL函數(shù)

3. 分組查詢(xún):

-- 語(yǔ)法:

group BY 分組字段;

-- WHERE 和 HAVING 的區(qū)別?

WHERE 在分組之前進(jìn)行限定,不滿(mǎn)足則不分組

HAVING在分組之后進(jìn)行限定,不滿(mǎn)足則查不到

WHERE 后不可以跟聚合函數(shù),having可以進(jìn)行聚合函數(shù)的判斷

-- 常見(jiàn)舉例,鞏固一下語(yǔ)法

-- 按照性別分組,分別查詢(xún)男、女同學(xué)的平均分

SELECT sex , AVG(math) FROM student GROUP BY sex;

-- 按照性別分組,分別查詢(xún)男、女同學(xué)的平均分,人數(shù)

SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;

-- 按照性別分組,分別查詢(xún)男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于60分的人,不參與分組

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex;

-- 按照性別分組,分別查詢(xún)男、女同學(xué)的平均分,人數(shù)

-- 要求:分?jǐn)?shù)低于60分的人,不參與分組或分組之后,人數(shù)要大于2個(gè)人

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex HAVING COUNT(id) > 2;

SELECT sex , AVG(math),COUNT(id) 人數(shù) FROM student WHERE math > 60 GROUP BY sex HAVING 人數(shù) > 2;

4. 分頁(yè)查詢(xún)

-- 語(yǔ)法:

limit 開(kāi)始的索引,每頁(yè)查詢(xún)的條數(shù);

-- 公式:

開(kāi)始的索引 = (當(dāng)前的頁(yè)碼 - 1) * 每頁(yè)顯示的條數(shù)

每頁(yè)顯示5條記錄

SELECT * FROM student LIMIT 0,5; -- 第1頁(yè)

SELECT * FROM student LIMIT 5,5; -- 第2頁(yè)

SELECT * FROM student LIMIT 10,5;-- 第3頁(yè)

-- LIMIT 是一個(gè)MySQL"方言"

結(jié)尾:

如果內(nèi)容中有什么不足,或者錯(cuò)誤的地方,歡迎大家給我留言提出意見(jiàn), 蟹蟹大家 !^_^

如果能幫到你的話(huà),那就來(lái)關(guān)注我吧!

我是小架,我們下篇文章見(jiàn)!

總結(jié)

以上是生活随笔為你收集整理的从mysql学起_MySQL学习从这里出发!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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