1. 資料庫
- 1. 資料庫 :存儲資料的倉庫
- 2. 資料庫軟體分類 :
* 1. MySQL,Oracle,SQL Server,MongoDB,DB2,
MariaDB,Redis...
* 2. 分類 :
根據資料的存儲方式不同,劃分為 :
+ 1. 關系型資料庫
采用标準化的行和列建構二維表存儲資料,
表與表之間的邏輯關聯稱為關系。
MySQL, Oracle, SQL Server,DB2,MariaDB
+ 2. 非關系型資料庫 (NoSQL-Not Only SQL)
采用鍵值對的形式存儲資料
MongoDB,Redis(緩存)
* 3. 如何選擇
+ 1. 資料存儲方式
+ 2. 是否開源 :
開源 :MySQL MariaDB MongoDB
閉源 :Oracle DB2 ,SQL Server
+ 3. 是否跨平台 :
不跨平台 : SQL Server
跨平台 :...
2. 資料庫與資料倉庫
資料庫 :提供資料存儲和資料操作的服務(DataBase)
資料倉庫 :存儲海量資料,提供資料分析與挖掘
(Data WareHouse - DW/DWH)
3. MySQL 資料庫
1. 關系型資料庫 :
1. 資料以二維表形式存儲
2. 表中的每一行,稱為一條記錄
3. 表中的每一列,稱為一個字段
示例 :
1. 關系型資料庫存儲資料
表1 學生資訊表
姓名 年齡 班級
星矢 20 一班
水冰月 18 二班
表2 班級資訊表
班級 班主任 人數
一班 老王 30
二班 老張 50
2. 非關系資料庫存儲資料
{"姓名":"星矢","年齡":"20"}
2. 跨平台 :
Ubuntu,windows, CentOS, Linux...
3. 支援多種開發語言 :
Python,Java,PHP...
4. MySQL 安裝
1. Ubuntu :
1. 安裝服務端
sudo apt-get install mysql-server
2. 安裝用戶端
sudo apt-get install mysql-client
3. ubuntu 軟體更新
1. sudo apt-get update
通路源清單中的所有網址,讀取軟體清單,儲存
到本地(/var/lib/apt/lists/)
2. sudo apt-get upgrade
把本地已安裝軟體與剛下載下傳的軟體清單進行對比
如果目前軟體版本低,則更新
3. 修複依賴關系
sudo apt-get -f install
2. windows :
下載下傳安裝包 xxx.msi
3. Mac :
下載下傳安裝包 8.0
5. 啟動和連接配接資料庫
1. 服務端啟動 :
1. 檢視MySQL狀态
sudo /etc/init.d/mysql status
連接配接服務端
sudo /etc/init.d/mysql start | stop | restart
2. 連接配接用戶端
1. 指令格式 :
mysql -h主機位址 -u使用者名 -p密碼
本機 :
mysql -hlocalhost -uroot -p123456
mysql -uroot -p123456
6. MySQL 語句規範
1. 每一條指令以;結束
2. SQL指令不區分大小寫
3. 使用/c終止目前指令
7. 基本SQL指令
1. 庫的基本操作
1. 檢視已有庫
show databases;
2. 建立資料庫
create database 庫名; (預設字元集為Latin1)
create database 庫名 character set utf8;
建庫的同時指定字元集
3. 檢視建立庫的語句(檢視字元集)
show create database 庫名;
4. 檢視目前所在庫
select database();
5. 使用已有庫/切換資料庫
use 庫名;
6. 檢視目前資料庫中的所有表
show tables;
7. 删除資料庫
drop database 庫名;
2. 庫名的命名規範
1. 庫名自定義,由數字,字母,下劃線組成,禁止
與關鍵字沖突,禁止使用純數字,盡量見名知意
2. 為了區分庫名和表名,可以在庫名後添加db
例: studb
3. 庫名和表名大小寫敏感
例: stuDB
3. 練習
1. 建立資料庫testdb ,指定字元集為utf8
create database testdb character set utf8;
2. 進入資料庫 testdb
use testdb;
3. 檢視目前所在庫
select database();
4. 建立資料庫testdb2
create database testdb2;
5. 檢視testdb2的字元集
show create database testdb2;
6. 删除testdb和testdb2
drop database testdb;
drop database testdb2;
4. 表的基本操作
1. 建立表
create table 表名(字段名 資料類型,
字段名 資料類型,
字段名 資料類型);
2. 檢視表的字元集
show create table 表名;
3. 檢視表結構(表中包含哪些字段)
desc 表名;
4. 删除表
drop table 表名;
5. 練習 :
1. 建立庫 pyDB,指定字元集為utf8
create database pyDB character set utf8;
2. 在資料庫中建立表,tab1,指定 id name age
三個字段(int char(10) int)
use pyDB;
create table tab1(id int,name char(10),age int);
3. 檢視表的字元集
show create table tab1;
4. 檢視表結構
desc tab1;
5. 删除表,删除庫
drop table tab1;
drop database pyDB;
5. 表記錄管理
1. 插入記錄
insert into 表名 values (字段值,字段值),(字段值,字段值);
指定字段插入資料:
insert into 表名(字段1,字段2) values(字段值,字段值);
2. 查詢記錄
select * from 表名; (查詢所有資料)
select 字段名,字段名 from 表名; (查詢指定字段)
指定查詢條件
select * from 表名 where 條件;
3. 練習
1. 檢視所在庫,檢視已有庫
2. 建立新庫,userdb
3. 在新庫中建立表 userInfo,設定字元集為utf8,
設定字段 id name age
4. 檢視表結構
desc userInfo;
5. 在表中插入幾條記錄
6. 在表中針對name,age兩個字段插入兩條資料
7. 查詢表中所有資料
8. 查詢表中所有姓名
9. 查詢表中所有年齡大于20的姓名資訊
select name from userInfo where age>20;
6. 更改資料庫預設字元集
1. 方法 :修改資料庫的配置檔案
2. 步驟 :
1. 擷取root權限
sudo -i
2. cd /etc/mysql/mysql.conf.d/
3. 檔案備份(必須執行)
cp mysqld.cnf mysqld.cnf.bak
4. 修改配置檔案
subl mysqld.cnf
找 :
[mysqld]
添加
character_set_server = utf8
5. 儲存檔案,重新開機服務
sudo /etc/init.d/mysql restart
Mac :
/etc/my.cnf
8. 用戶端的連接配接與斷開
連接配接 : mysql -h主機名 -u使用者名 -p密碼
隻有連接配接成功,才可以使用資料庫服務,書寫
SQL語句
斷開 :
exit; | quit; | \q;
斷開與用戶端的連結,并不會結束服務
結束服務使用 :
sudo /etc/init.d/mysql stop
9. 資料類型
1. 數值類型
1. 整數
1. int (大)整型 (占據4個位元組)
取值範圍 :
無符号整型(unsigned) :0 ~ 2(32)-1
有符号整型(signed 預設為有符号) : -2(31)~2(31)-1
2. tinyint 微小整型 (占據1個位元組)
有符号整型 :-128 ~ 127
無符号整型 :0 ~ 255
例 :
age tinyint unsigned
3. smallint 小整型 (占據2個位元組)
4. bigint (極)大整型 (占據8個位元組)
2. 浮點數
1. float (4個位元組,最多表示小數點後7位)
用法 :
字段名 float(m,n)
m表示總位數,n表示小數位的位數
2. double(8個位元組,最多表示小數點後15位)
3. decimal 最多表示到小數點後28位
用法 :
decimal(m,n)
3. 練習
1. 建立庫 studb,在庫中建立表stuInfo,要求
id 大整型(int)
name 字元型 char(10)
age 無符号微小整型
height 浮點型表示,2位小數位,3位整數位
weight 浮點型,3位整數位,3位小數位
---------------------------------
create table stuInfo(
id int,
name char(10),
age tinyint unsigned,
height float(5,2),
weight decimal(6,3)
);
2. 檢視表結構
3. 檢視字元集
4. 插入一條完整記錄
5. 在 id name兩個字段下插入兩條資料
6. 查詢所有學生的id和姓名
4. 浮點型使用注意 :
1. 如果插入的是整數資料,小數位會自動補0
2. 如果插入資料的小數位超出指定位數,會自動
四舍五入
3. 整數位超出限制,插入失敗
2. 字元類型
1. 定長 char(長度)
長度取值範圍 :1 ~ 255
2. 變長 varchar(長度)
長度取值範圍 :1 ~ 65535
定長與變長的差別 :
定長 :根據指定的長度固定配置設定存儲空間
char(10)
存儲'a',也要配置設定10個字元的空間
優點 :效率高,速度快
缺點 :浪費存儲空間
變長 :在不超過指定長度的情況下,動态配置設定存儲
空間
varchar(10)
存儲'a',動态根據資料的字元長度配置設定空間
優點 :節省存儲空間
缺點 :效率比定長存儲要低
共同點 :
給出的長度,就是最大輸入的字元數,超出則
無法存儲
例 :
name varchar(10)
"wangzhaojun" 超出無法存儲
3. 長文本存儲
text
longtext (4G)
4. 二進制資料存儲
blob
longblob (4G)
5. 數值類型的顯示寬度與字元型的最大字元數
int(11) 顯示寬度與存儲空間無關
借助zerofill關鍵字,檢視整型的顯示寬度
例 :
id int(5) zerofill
存儲資料 :
insert ... (5) ->顯示00005
insert ... (1234567) -> 顯示1234567
insert ... (123456789012345):
error : 超過了目前資料類型的表示範圍
int unsigned : 2(32) - 1 (42億多)
char(10)設定資料的存儲空間,超出則無法存儲
3. 枚舉類型
1. enum 類型 (表示單選)
枚舉是一個字元串對象,可以将一些
不重複的字元串存儲成一個預定義的集合,字段存儲
資料時,必須從集合中選擇,不在集合範圍的都是非法值
例 :
gender enum('男','女','保密');
枚舉類型會自動為集合中的字元串選項配置設定下标
查詢時,可根據下标表示對應的值
select * from ...where gender="男";
等價于
select * from ...where gender=1;
2. set 類型 (實作多選)
特殊的枚舉類型,用法與enum一緻,提供字元串類型
的集合(選項)
例 :
sportcourse set('籃球',"足球");
inert ... values(1,"zhangsan","籃球,足球");