此文發表在簡書,復制過來,在下方放上鏈接。
https://www.jianshu.com/p/e6a9005c697b
MySQL入門教程
一、了解SQL
1.1 數據庫基礎
數據庫(database):保存有組織的數據的容器(通常是一個文件或一組文件)
表(table):某種特定類型數據的結構化清單
備注:數據庫中的每個表用表名標識自己,此名字是唯一的。
數據類型(datatype):所容許的數據的類型。每個表列都有都有相應的數據類型,它限制(或容許)該列中存儲的數據
SQL(發音為字母S-Q-L或sequel)是結構化查詢語言(Structured Query Language)的縮寫。SQL是一種專門用來與數據庫通信的語言
MySQL是一個客戶機—服務器DBMS
表頭(header):每一列的名稱
行(row):表中的一個記錄
值(value)行的具體信息,每個值必須與該列的數據類型相同
主鍵(primary key)一列(或一組列),其值能夠唯一區分表中每一行
列(column)表中的一個字段,所有表都是由一個或多個列組成的
外鍵(foreign key)外鍵為某個表中的一列,它包含另一個表中的主鍵值
1.2 MySQL腳本的基本組成
MySQL通過執行SQL腳本來完成對數據庫的操作,該腳本由一條或多條MySQL語句(SQL語句+擴展語句)組成,保存時腳本文件后綴名一般為.sql,在控制台下,MySQL客戶端也可以對語句進行單句的執行而不用保存為.sql文件
標識符
標識符用來命名一些對象, 如數據庫、表、列、變量等, 以便在腳本中的其他地方引用。MySQL標識符命名規則稍微有點繁瑣, 這里我們使用萬能命名規則: 標識符由字母、數字或下划線(_)組成, 且第一個字符必須是字母或下划線。
對於標識符是否區分大小寫取決於當前的操作系統, Windows下是不敏感的, 但對於大多數 linux\unix 系統來說, 這些標識符大小寫是敏感的。
關鍵字:
MySQL的關鍵字眾多, 這里不一一列出, 在學習中學習。 這些關鍵字有自己特定的含義, 盡量避免作為標識符。
語句:
MySQL語句是組成MySQL腳本的基本單位, 每條語句能完成特定的操作, 他是由 SQL 標准語句 + MySQL 擴展語句組成。
函數:
MySQL函數用來實現數據庫操作的一些高級功能, 這些函數大致分為以下幾類: 字符串函數、數學函數、日期時間函數、搜索函數、加密函數、信息函數。
1.3 MySQL中的數據類型
MySQL有三大類數據類型, 分別為數字、日期\時間、字符串, 這三大類中又更細致的划分了許多子類型:
數字類型
整數: tinyint、smallint、mediumint、int、bigint
浮點數: float、double、real、decimal
日期和時間: date、time、datetime、timestamp、year
字符串類型
字符串: char、varchar
文本: tinytext、text、mediumtext、longtext
二進制(可用來存儲圖片、音樂等): tinyblob、blob、mediumblob、longblob
二、使用MySQL數據庫
2.1.創建一個數據庫
create database 數據庫名
例如我們需要創建一個名為 test 的數據庫, 在命令行下執行以下命令:
create database test character set gbk;
為了便於在命令提示符下顯示中文, 在創建時通過 character set gbk 將數據庫字符編碼指定為 gbk。創建成功時會得到 Query OK, 1 row affected(0.02 sec) 的響應。
2.2.選擇要操作的數據庫
use database;
use 語句可以不加分號, 執行 use samp_db 來選擇剛剛創建的數據庫, 選擇成功后會提示: Database changed
2.3創建數據庫表
create table 表名稱(列聲明);
2.4.刪除數據庫
基本形式:drop database 數據庫名;
drop database test;
三、操作MySQL數據庫
3.1.增
3.1.1插入數據
插入完整的行
Insert into 表名 值()
插入完整的行更安全的方法:
插入多個行
插入檢索出的數據
3.1.2 增加一列數據
基本形式:alter table 表名 add 列名 列的數據類型 [after 插入位置]
alter table customers add tel char(11);
在cust_id之后增添列sex:
alter table customers add sex char(11) after cust_name;
3.2.查
3.2.1 查詢語句
基本形式:select 列名 from 表名[查詢條件];
查詢顧客姓名和城市
select cust_name,cust_city from customers;
使用通配符*查詢表中所有的內容,基本形式:select * from 表名;
Select * from customers;
按照特定條件查詢:基本形式 select * from 表名 where 條件;
查詢產品中產品名稱是fuses的信息
select * from products where prod_name = 'fuses';
查詢產品中產品價格<=10的信息
select * from products where prod_price <=10;
3.2.2操作符
And 操作符
檢索匹配and連接的所有條件的行
查詢產品中產品id是1003 and產品價格<=10的信息
select * from products where vend_id =1003 and prod_price <=10;
- or 操作符
檢索匹配任一條件的行
查詢產品中產品id是1003 或者 產品價格<=10的信息
select * from products where vend_id =1003 or prod_price <=10;
In操作符
用來指定條件范圍,范圍中的每個條件都可以進行匹配
- order by 操作符
用來指定列以字母順序排序數據
select * from products where vend_id in (1002,1003)
- order by prod_name;
3.2.3通配符進行操作
like操作符
通配符:用來匹配值的一部分的特殊字符
百分號(%)通配符:匹配0到多個字符
select * from products where prod_name like '%anvil%'
- order by prod_name;
下划線(_)通配符:只匹配單個字符而不是多個字符
3.2.4正則表達式進行搜索
.表示匹配任一一個字符
|表示匹配兩個串之一
[123]表示匹配1或2或3,[123]ton表示匹配1ton或2ton或3ton
匹配特殊字符
\\.表示查找. , \\-表示查找- 。
匹配多個實例
select * from products where prod_name regexp '[[:digit:]]{4}'
- order by prod_name;
定位符
select * from products where prod_name regexp '^[0-9\\.]'
- order by prod_name;
3.2.5創建計算字段
拼接字段
cancat()拼接串
執行算術計算
3.2.6使用數據處理函數
left()返回串左邊的字符
length()返回串的長度
locate()找出串的一個子串
lower()將串轉換為小寫
ltrim()去掉串左邊的空格
right()返回串右邊的字符
rtrim()去掉串右邊的空格
soundex()返回串soundex值,soundex是一個將任何文本串轉換為描述其語音表示的字母數字模式的算法。
substring()返回子串的字符
upper()將串轉換為大寫
日期和時間處理函數
查詢日期,請使用date()
檢索一個時間段的所有訂單:
數值處理函數
Abs()返回一個數的絕對值
3.2.7匯總數據
Avg()函數
count()函數
count(*)
count(column)
Max()函數
Min()函數
Sum()函數
組合聚焦函數
3.2.8分組數據
創建分組
過濾分組
Having()函數
Having()函數和where條件同時使用。
Limit 檢索的行數
3.2.9子查詢
3.2.10聯結表
創建聯結表
select vendors.vend_id,vend_name,prod_name,prod_price from vendors,products
where vendors.vend_id = products.vend_id
- order by vend_name,prod_name;
內部聯結
創建3個連接表
select vendors.vend_id,vend_name,prod_name,prod_price,order_num,quantity from vendors,products,orderitems
where vendors.vend_id = products.vend_id and orderitems.prod_id = products.prod_id and order_num = 20005
- order by vend_name,prod_name;
高級聯結
自聯結
內部聯結
外部聯結
3.2.11組合查詢
3.3.改
3.3.1更新數據
基本形式:updata 表名稱 set 列名稱 = 新值 where 更新條件
更新一個列的值
update customers set cust_email = 'elmer@fudd.com'
where cust_name = 'm.martian';
更新多個列的數據
update customers
set cust_name = 'the fudds',
cust_email = 'elmer@fudd.com'
where cust_id = 2;
3.3.2重命名表
rename table customers2 to customers; 重命名表customers2變成customers。
3.3.3修改列名
基本形式:alter table 表名 change 列名稱 列新名稱 新列數據類型;
alter table customers change cust_email email char(5);
3.4.刪
3.4.1刪除特定的行
基本形式:delete from 表名 where 刪除條件
delete from customers
where cust_id = 4;
刪除所有的行
truncate table 表名
3.4.2刪除表中的一列
基本形式:alter table 表名 drop 列名稱;
alter table customers drop sex;
3.4.3刪除整個表
基本形式:drop table 表名;
drop table customers;