MySQL基礎入門

在任何一組東西中,最重 要的只占其中一小部分,約20%,其余80%盡管是多數(shù),卻是次要的,這就是大家所知道的** 二八原則 ,換句話說:可以用最少的時間和精力學習到最核心的知識,即用20%的時間和精力來做到80%的效果,這也是這篇文章的初衷。本文將總結(jié)出MySQL中最常用的知識,以此達到快速學習的目的。MySQL是一個實用性工具,學習的最好方式是實踐,實踐,實踐**。


本文主要分為下面幾部分:

  • 數(shù)據(jù)庫中涉及到的基本概念
  • MySql安裝與連接及工具
  • 數(shù)據(jù)操作
  • 索引的簡單介紹

1 基本概念

數(shù)據(jù)庫

  • 按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫,可以理解為一個文件夾或者是倉庫,里面存放各種有結(jié)構(gòu)的數(shù)據(jù)

  • 某種特定類型數(shù)據(jù)的結(jié)構(gòu)化列表,類似于EXCEL中的表格

模式

  • 關于數(shù)據(jù)庫或表的描述信息,如表包含哪些列,每列的數(shù)據(jù)是數(shù)字還是文本等

  • 表中的一個字段。所有表都是由一個或多個列組成的,同一列數(shù)據(jù)類型相同

  • 表中的一個記錄,MySQL 中以行的形式存儲數(shù)據(jù)

主鍵

  • 表中能夠唯一標識每一行數(shù)據(jù)的的一列或多列,如登記學生的信息,學生都有唯一的學號,這個學號就可以設置為主鍵,當然也可以用身份證號

2 MySql的安裝與工具

MySql的安裝

  • mysql下載地址
    訪問上述下載地址,根據(jù)自己的操作系統(tǒng)選擇對應的安裝包,目前最新的版本已經(jīng)到了8.0,但是現(xiàn)在好多公司還是使用5.7左右的版本,因此也說明了版本不是越新越好的。

連接工具

安裝mysql后,連接數(shù)據(jù)庫有多種方法:

  • 命令行連接
> mysql -h 127.0.0.1 -u root -p
-- 使用root用戶登錄到本地3306端口上的數(shù)據(jù)庫,也可以登錄遠程的,只要把-h 后面地址改成遠程ip即可

  • 使用工具連接
    主要圖形化工具有

兩個都是可以通過圖形界面的形式訪問數(shù)據(jù)庫。可根據(jù)個人使用喜好選擇。

3 SQL 語法

SQL 用于訪問和處理數(shù)據(jù)庫的標準的計算機語言,主要操作包括對數(shù)據(jù)庫,表及表中記錄的 增刪改查(CRUD)。在我們新安裝的數(shù)據(jù)庫系統(tǒng)中,只有系統(tǒng)庫,需要新建數(shù)據(jù)庫才能進行后續(xù)操作,所以先學習數(shù)據(jù)庫 的CRUD操作。

數(shù)據(jù)庫的操作

  • create database db_name;
  • drop database db_name;
  • RENAME DATABASE db_name TO new_db_name
  • show databases;
    以上是數(shù)據(jù)庫所有的命令,很簡單吧,需要注意的是 SQL 命令是不區(qū)分大小寫的,一般習慣 sql支持的命令名稱 用大寫,其他自定義名稱用小寫,; 表示 一條命令的結(jié)束,命令行時要查詢哪個數(shù)據(jù)庫下的表有兩種方式,一是用 use db_name; 切到對應數(shù)據(jù)庫下,以后的操作就是針對這個數(shù)據(jù)庫下的操作,二是可以使用db_name.table_name 的全限定的方式查詢對應表。

表的操作

表的操作也有CRUD,不過稍微復雜一點。

  • show tables;
  • drop table table_name;
  • alter table old_table_name rename to new_table_name
CREATE TABLE tablename
(
column1 datatype [NULL|NOT NULL] [CONSTRAINTS],
column2 datatype [NULL|NOT NULL] [CONSTRAINTS],
...,
primary key(column1 )
);

注, [ ] 表示這一項可寫可不寫。

舉個例子,建一個名稱為 student 的表,有姓名 name,年齡 age,性別sex三列,建表語句如下:

CREATE TABLE `student` (
  `name` varchar(30) CHARACTER SET utf8 NOT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` char(1) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

表中記錄的操作

插入 insert

為了能進行實操,先學習如何插入記錄到表中,上面的例子中已經(jīng)新建了表student,假設插入如下數(shù)據(jù)到表中

姓名 年齡 性別
張三 20
李四 18
王五 16
韓梅梅 14
李雷 14

插入語句為:

INSERT INTO student(name,age,sex) VALUES('張三',20,'男');
INSERT INTO student(name,age,sex) VALUES('李四',18,'男');
INSERT INTO student(name,age,sex) VALUES('王五',16,'男');
INSERT INTO student(name,age,sex) VALUES('韓梅梅',14,'女');
INSERT INTO student(name,age,sex) VALUES('李雷',14,'男');

這樣我們就得到了5條數(shù)據(jù),也可以指定部分列進行插入,后面的值要和列對應??梢钥闯鱿虮碇胁迦霐?shù)據(jù)的基本格式為:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
// 如果插入所有字段,table_name 后面的列可以省略。

特別的,可以從別的表中查詢插入,如向student2(和student表結(jié)構(gòu)一致) 表插入數(shù)據(jù)年齡大于15的學生(關于如何查詢下章介紹),SQL如下:

INSERT INTO student2 
SELECT name,age,sex 
FROM student
WHERE age > 15;
// 語句形式為:Insert into Table2(字段1,字段2
,...) select 字段1,字段2,... from Table1;

檢索

從表中查詢需要的數(shù)據(jù)又稱為檢索,支持查詢,去重,排序,分組,統(tǒng)計等操作。

單列,多列,所有列的檢索

語法格式:

SELECT col1[,col2,col3...] FROM table_name;
或:
SELECT *  FROM table_name;

上面一條語句可以選擇表中的一列或者多列進行展示,而第二條語句則進行所有列展示,可用于不知道表中字段情況查詢。

去重 distinct

  • distinct 作用于所有的列
SELECT DISTINCT col1[,col2,col3...] FROM table_name;

限制結(jié)果 limit

有時不需要展示太多條數(shù)據(jù),可以使用limit進行限制,語法如下:

SELECT  col1[,col2,col3...] 
FROM table_name
LIMIT n[,m];

limit 后面可帶一個數(shù)字,表示取幾條數(shù)據(jù),也可以用逗號隔開的兩條數(shù)據(jù),表示從第n條開始取,取m條數(shù)據(jù)。

注釋

注釋主要用來備注說明,或者有時候忽略掉不需要的語句,主要有兩種方式:

  • 行內(nèi)注釋 -- 或#
  • 多行注釋 /* */
    如:
-- 這是行注釋, 注意-- 后面是要有一個空格的
# 這也是行注釋
SELECT * FROM table_name ...;
...
/*
這是多行注釋,可以換行
*/
SQL語句...

排序 order by

如果需要對查詢結(jié)果進行排序(升序或者降序),可以使用order by 子句,order by子句一定是select的最后一條子句,其還有如下特點:

  • 后可加 多列
  • 可按照列位置排序 即order by 1,2(1,2 表示select 后字段位置序號)
  • 可按非選擇列排序,即不在select 后展示的列
  • 默認升序asc, 倒序用desc

條件過濾 where

當需要按照條件進行篩選數(shù)據(jù)時,可用where 子句,where子句一般跟在表名之后,

  • 支持的操作符有: + ,<> ,!= ,<, <=, >, >= ,BETWEEN ... AND ...,IS NULL,IS NOT NULL, 注意,IS NULL 不能用 = NULL 去判斷
  • 邏輯操作符 AND OR
  • 邏輯操作符優(yōu)先級
  • 通配符過濾 like
    • % 表示 任何字符出現(xiàn)任何次數(shù),但不會匹配NULL
    • _ 只匹配單個字符
    • [] 指定一個字符集,匹配指定位置的一個字符,可使用[^ ] 來否定

字段的計算

有時需要對多列字段進行組合或者一些計算以達到目的,主要支持的計算有:

  • 字段拼接 concate函數(shù)
  • 去前后空格 trim
  • 字段別名(或叫導出列) As
  • 算術運算 +-*/

函數(shù)

函數(shù)是輔助字段計算的方式,一般給定一定個數(shù)輸入,函數(shù)會輸出一個值,主要可以分為以下幾類,

  • 文本處理函數(shù)

CONCAT(str1, str2, ...):拼接字符串
CONCAT_WS(separator, str1, str2, ...):使用指定分隔符連接字符串
LEFT(str, length):從左截取指定長度的子字符串
RIGHT(str, length):從右截取指定長度的子字符串
SUBSTRING(str, index, length):從指定位置處開始截取指定長度的子字符串
LENGTH(str):返回字符串的長度
LOWER(str):將字符串轉(zhuǎn)換為小寫格式
UPPER(str):將字符串轉(zhuǎn)換為大寫格式
LTRIM(str):去除字符串左側(cè)的空格
RTRIM(str):去除字符串右側(cè)的空格
TRIM(str):去除字符串兩側(cè)的空格
FORMAT(X, D):按照指定的小數(shù)位數(shù)D將數(shù)值X轉(zhuǎn)化為字符串
LPAD(str, length, padStr):在字符串左側(cè)用padStr將原字符串填充至指定長度,當指定長度小于原字符串長度時,截斷原字符串
RPAD(str, length, padStr):在字符串右側(cè)用padStr將原字符串填充至指定長度,當指定長度小于原字符串長度時,截斷原字符串
REPLACE(str, from_str, to_str):將字符串中的所有匹配的字符串替換為新字符串
REVERSE(str):將字符串逆序輸出


  • 日期和時間處理函數(shù)
NOW():返回當前的時間和日期
CURDATE():返回當前的日期
CURTIME():返回當前時間
DATE(dateAndTime):提取日期時間表達式中的日期部分
DAY():返回日期時間表達式中的天數(shù)部分
YEAR():返回日期時間表達式中的年部分
EXTRACT(unit FROM date):按照指定的時間單位從日期時間表達式中提取年、月、日、時間等部分
DATE_FORMAT(date, format):按照指定格式顯示時間日期
DATE_ADD(date, INTERVAL exp unit)、DATE_SUB(date, INTERVAL exp unit):日期和時間的加減操作。返回值是否包含時間取決于給定的時間日期的表達式和時間單位。
DATEDIFF(date1, date2):返回兩個日期的差值,會忽略表達式中的時間,僅對日期進行運算
ADDDATE(date, INTERVAL exp unit):等同于DATE_ADD()
ADDDATE(date, days):在給定的日期上加上給定的天數(shù)
ADDTIME(time1, time2):將兩個時間表達式相加

  • 數(shù)值處理函數(shù)
ABS() 返回一個數(shù)的絕對值
COS() 返回一個角度的余弦
EXP() 返回一個數(shù)的指數(shù)值
PI() 返回圓周率
SIN() 返回一個角度的正弦
SQRT() 返回一個數(shù)的平方根
TAN() 返回一個角度的正切

數(shù)據(jù)匯總

  • 聚集函數(shù):對某些行運行的函數(shù),計算并返回一個值
AVG() 返回某列的平均值
COUNT() 返回某列的行數(shù),使用COUNT(*)對表中行的數(shù)目進行計數(shù),不管表列中包含的是空值(NULL)還是非空值。
使用COUNT(column)對特定列中具有值的行進行計數(shù),忽略NULL值
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

數(shù)據(jù)分組

分組即根據(jù)一列或者幾列,將一個數(shù)據(jù)集劃分成若干個“子集”,然后針對若干個“子集”進行數(shù)據(jù)處理

  • 分組是使用SELECT語句的GROUP BY子句建立的
  • 在非分組的列(即非group by 后面的列)上可以使用 COUNT, SUM, AVG,等函數(shù)
  • 過濾分組 having,支持所有WHERE操作符
    語法:
SELECT column_name, function1(col1[,col2...])[, function2(col3,col4...)]
FROM table_name
WHERE condition
GROUP BY column_name

SELECT子句順序

子  句 說  明 是否必須使用
SELECT 要返回的列或表達式
FROM 從中檢索數(shù)據(jù)的表 僅在從表選擇數(shù)據(jù)時使用
WHERE 行級過濾
GROUP BY 分組說明 僅在按組計算聚集時使用
HAVING 組級過濾
ORDER BY 輸出排序順序

修改 update

  • UPDATE table_name SET field = new_val[, field = new_val] [ WHERE condition1 [and condition2]]

刪除 delete

  • DELETE FROM table_name WHERE condition1 [and condition2]
  • 全表內(nèi)容刪除 DELETE FROM table_name or TRUNCATE TABLE table_name

組合與連接 union / join

組合 UNION /UNION ALL

UNION/UNION ALL 操作符用于連接兩個以上的 SELECT 語句的結(jié)果組合到一個結(jié)果集合中。UNION多個 SELECT 語句會刪除重復的數(shù)據(jù),而UNION ALL多個 SELECT 語句不會刪除重復的數(shù)據(jù)。
語法:

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

連接JOIN

前面主要是在一張表中讀取數(shù)據(jù),但是在真正的應用中經(jīng)常需要從多個數(shù)據(jù)表中讀取數(shù)據(jù)。本節(jié)介紹多表關聯(lián)連接操作JOIN。在 SELECT, UPDATE 和 DELETE 語句中都可使用 JOIN 來聯(lián)合多表查詢。
JOIN 按照功能大致分為如下三類:

  • INNER JOIN(內(nèi)連接,或等值連接):獲取兩個表中字段匹配關系的記錄。
  • LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
  • RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應匹配的記錄。
    語法:
SELECT col1,col2 ... 
FROM table1 
INNER|LEFT|RIGHT JOIN table2 
ON condition1[,condition2,...]

INNER JOIN

img_innerjoin.gif

INNER JOIN,內(nèi)連接,或等值連接,主要產(chǎn)生同時符合table1和table2的一組數(shù)據(jù)

LEFT JOIN

img_leftjoin.gif

LEFT JOIN左連接以左表table1為主表,即以主表產(chǎn)生一套完整的記錄,去右表中匹配的記錄 .如果沒有匹配到,則置為null

RIGTH JOIN

img_rightjoin.gif

RIGTH JOIN右連接和 LEFT JOIN 正好相反,以右表table2為主表,即以右表產(chǎn)生一套完整的記錄,去左表中匹配的記錄 .如果沒有匹配到,則置為null。如果把 LEFT JOIN 中table1和table2互換位置,則結(jié)果等價于 RIGTH JOIN。

4 MySQL索引操作

索引的知識可以寫成一本書,這里只簡單介紹一部分。索引是一種特殊的文件,它們包含著對數(shù)據(jù)表里所有記錄的引用指針。更通俗的說,數(shù)據(jù)庫索引好比是一本書的目錄,能加快數(shù)據(jù)庫的查詢速度。

直接創(chuàng)建索引

CREATE [UNIQUE] INDEX index_name ON table_name(column1(length)[,column2(length),...]) ;

修改表結(jié)構(gòu)的方式添加索引

ALTER TABLE table_name ADD [UNIQUE] INDEX index_name ON (column1(length)[,column2(length),...]);

創(chuàng)建表的時候同時創(chuàng)建索引

CREATE TABLE `table_name` (

`id` int(11) NOT NULL AUTO_INCREMENT ,

`name` varchar(50)  NOT NULL ,

`sex` char(3) NULL ,

`age` int(11) NULL DEFAULT NULL ,

PRIMARY KEY (`id`),

[UNIQUE] INDEX index_name (name(length))

);

刪除索引

DROP INDEX index_name ON table_name;

幫助文檔使用

在 MySQL 使用過程中,可能經(jīng)常會遇到以下問題:

  • 某個操作語法突然忘記了
  • 當前版本上,都支持哪些函數(shù)?
  • 當前版本上,是否支持某個功能?

當然我們可能想到查找 MySQL 的文檔。但是卻要耗費大量的時間和精力。 所以對于以上問題,最好的解決辦法是使用 MySQL 安裝后自帶的幫助文檔,在遇到問題時可以方便快捷地進行查詢

按照層次看幫助

如果不知道幫助能夠提供些什么,可以用?contents 或者 help contents命令來顯示所有可供查詢的的分類,然后對于列出的分類,可以使用help 類別名稱的方式針對用戶感興趣的內(nèi)容做進一步的查看。

快速查閱幫助

在實際應用當中,如果需要快速查閱某項語法時,可以使用關鍵字進行快速查詢。例如,想知道 show 命令都能看些什么東西,可以用如下命令:? showhelp show

又如,想查看 CREATE TABLE 的語法,可以使用以下命令:
? CREATE TABLEhelp CREATE TABLE

常用的網(wǎng)絡資源

https://www.mysql.com/ 是 MySQL 的官方網(wǎng)站,可以下載到各個版本的 MySQL 以及相關客戶端開發(fā)工具等,提供了目前最權(quán)威的 MySQL 數(shù)據(jù)庫及工具的在線手冊。


至此已經(jīng)把MySQL 中基礎部分總結(jié)完成,后續(xù)文章將總結(jié)MYSQL一些其他特性,如視圖,存儲過程,觸發(fā)器,事務,游標,索引原理,性能優(yōu)化等


<END>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應用程序。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,144評論 0 19
  • MySQL技術內(nèi)幕:SQL編程 姜承堯 第1章 SQL編程 >> B是由MySQL創(chuàng)始人之一Monty分支的一個版...
    沉默劍士閱讀 2,636評論 0 3
  • 手動不易,轉(zhuǎn)發(fā)請注明出處 --Trance 數(shù)據(jù)庫系統(tǒng)命令: (1).查看存儲過程狀態(tài):show pro...
    Trance_b54c閱讀 1,830評論 0 8
  • 1. 了解SQL 1.1 數(shù)據(jù)庫基礎 ? 學習到目前這個階段,我們就需要以某種方式與數(shù)據(jù)庫打交道。在深入學習MyS...
    鋒享前端閱讀 1,327評論 0 1
  • 這些日子過得太逍遙,自來醒自來睡,無所顧及無所期盼。幾日就無趣了,看來人活下來就得有事做呢,要不就會自來的找事做,...
    水杯閱讀 322評論 0 1

友情鏈接更多精彩內(nèi)容