數(shù)據(jù)庫介紹
數(shù)據(jù)庫的分類
- 層次數(shù)據(jù)庫
類似xml的文本結(jié)構(gòu)。 - 網(wǎng)狀數(shù)據(jù)庫
- 關(guān)系數(shù)據(jù)庫
MySQL,SQL server,oracle等更耻,下面主要介紹它
關(guān)系數(shù)據(jù)庫
SQL: Struct Query Language(結(jié)構(gòu)化查詢語言)测垛,它是一個"國際化標準"。各種關(guān)系數(shù)據(jù)庫都是實現(xiàn)該標準的一種產(chǎn)品秧均。
數(shù)據(jù)庫本質(zhì)和表現(xiàn)
本質(zhì):將大量的"數(shù)據(jù)值"通過數(shù)據(jù)庫管理系統(tǒng)進行復雜但邏輯結(jié)構(gòu)清晰有序的存儲食侮,效率高的驚人号涯。
表現(xiàn):存儲在指定文件夾中。
關(guān)系數(shù)據(jù)庫常見術(shù)語
數(shù)據(jù)data锯七,數(shù)據(jù)庫database链快,數(shù)據(jù)庫管理系統(tǒng)dbms,表(數(shù)據(jù)表)table起胰,字段field久又,行row,列column效五,記錄record
數(shù)據(jù)庫系統(tǒng)基本結(jié)構(gòu)
MySQL系統(tǒng)級操作
注意:如果使用MAMP集成環(huán)境地消,并希望在終端操作數(shù)據(jù)庫,請先配置靜態(tài)環(huán)境變量畏妖,在根目錄下找到.profile(沒有時創(chuàng)建),之后打開文件復制這句話
export PATH=/opt/local/bin:/opt/local/sbin:/Applications/MAMP/Library/bin:$PATH
保存脉执,重啟服務
登錄命令:mysql -h服務器地址 -u登錄名 -P端口號 -p密碼
備份數(shù)據(jù)庫:mysqldump -h服務器地址 -u登錄名 -p密碼 要保存的數(shù)據(jù)庫名>路徑+要保存為的文件名
恢復數(shù)據(jù)庫:mysql -h服務器地址 -u登錄名 -p密碼 要恢復的數(shù)據(jù)庫名<數(shù)據(jù)庫路徑+文件名
基礎語法規(guī)定
注釋:
- 單行注釋:#注釋內(nèi)容
- 單行注釋: -- 注釋內(nèi)容
- 多行注釋:/注釋內(nèi)容/
大小寫問題
MySQL語言本身不區(qū)分大小寫,但在某些區(qū)分大小寫的操作系統(tǒng)中戒劫,數(shù)據(jù)庫名和表名會區(qū)分大小寫半夷。推薦使用"下劃線命名法":單詞都用小寫字母,單詞之間用"_"分開迅细。
php中操作數(shù)據(jù)庫的基本代碼和流程
基本流程
- 連接數(shù)據(jù)庫:
$mylink = mysqli_connect("localhost",'root','root',"tempdb3");
坑:mysql_connect在 PHP 5.5.0 起已廢棄巫橄,并在將來會被移除。應使用 MySQLi 或 PDO_MySQL 擴展來替換之茵典。 - 執(zhí)行sql命令:
$result = $mylink->query("幾乎任何sql語句")
返回的結(jié)果通常分兩種情況進行處理
2.1 如果無返回數(shù)據(jù)的語句
2.1.1 如果$result為true,表示執(zhí)行成功
2.1.2 如果$result為false,表示執(zhí)行失敗
2.2 如果是有返回數(shù)據(jù)的語句
2.2.1 如果$result為false,表示執(zhí)行失敗
2.2.2 否則湘换,執(zhí)行成功,需要繼續(xù)從結(jié)果中取出數(shù)據(jù)并顯示出來
數(shù)據(jù)定義語句
創(chuàng)建數(shù)據(jù)庫
creat database [if not exists] 數(shù)據(jù)庫名 [charset 字符集] [collate 字符排序規(guī)則];
說明:
- if not exists:用于判斷是否存在該數(shù)據(jù)庫名统阿,如果存在則不執(zhí)行該語句彩倚。
- 字符集:數(shù)據(jù)存儲到數(shù)據(jù)庫中時用的編碼名稱
- 字符排序規(guī)則通常不設置,即使用默認排序規(guī)則
修改數(shù)據(jù)庫
alter database 數(shù)據(jù)庫名 character set =新字符集 collate=新校對集;
刪除數(shù)據(jù)庫
drop database 數(shù)據(jù)庫名;
其他數(shù)據(jù)庫相關(guān)語句
選擇進入某數(shù)據(jù)庫:use 數(shù)據(jù)庫名;
顯示所有數(shù)據(jù)庫: show datebases;
顯示某個數(shù)據(jù)庫的"創(chuàng)建語句":show create database 數(shù)據(jù)庫名
字段類型
通用定義形式
定義一個字段的時候的類型的寫法扶平,比如:
creat table tab1 (f1 數(shù)據(jù)類型);
數(shù)據(jù)類型:類型名 [(長度)][unsigned][zerofill]
zerofill:填充0帆离,是指如果一個數(shù)字的長度不夠指定長度的時候可以在左邊補充0,如果用zerofill則是無符號類型(表示范圍正數(shù)*2结澄,無負數(shù))
整數(shù)類型
小數(shù)類型
float:非精確
double:非精確
decimal:定點型哥谷,精確數(shù),需要設定長度麻献,形式為:decimal(總長呼巷,小數(shù)位數(shù))
時間日期類型
date:年月日
time:時分秒
datetime:年月日時分秒
year:可以是4位數(shù)字或4位純數(shù)字字符串,也可以是2位整數(shù)或2位純數(shù)字字符串
timetamp:時間戳
寫入數(shù)據(jù)庫時赎瑰,直接的時間日期數(shù)據(jù)王悍,應該用單引號引起來
字符串類型
varchar:可變長度字符串類型,最多能存儲2^16個字節(jié)餐曼,設定長度為最長長度压储,不足不用補空格
char:定長字符串類型鲜漩,最多存儲256個字符,不足補空格集惋,溢出的無法存儲
2個二進制文本
binary:類似char,存文本的二進制數(shù)據(jù)
varbinary:類似varchar,存文本的二進制數(shù)據(jù)
2個大文本
text:存儲超大文本孕似,varchar不夠用它,與char和varchar效率低
blob:可以存儲超大二進制數(shù)據(jù)刮刑,用于存儲圖片這種二進制數(shù)據(jù)
2個有關(guān)"選項"的文本存儲形式
enum:枚舉,類似于OC的枚舉.名稱 enum('選項1','選項2','選項3','選項4')
,本質(zhì)存儲的其實是數(shù)字
set:專門用于存儲類型表單中的"多選項"的值喉祭,名稱 set('選項1','選項2','選項3','選項4')
,本質(zhì)存儲的數(shù)字是1,2,4,8,16···這樣的數(shù)字,即每個選項代表二進制中對應的哪一位1雷绢,如果插入非2次方的數(shù)據(jù)泛烙,例如7,則為1+2+4翘紊,選項1蔽氨,選項2,選項3帆疟。
表定義語句
創(chuàng)建表
基本形式:
create table [if not exists] 表名(字段列表,[約束或索引列表]) [表選項列表]
字段列表如果是多個鹉究,中間用逗號隔開
字段基本形式:字段名 類型[字段修飾屬性]
表選項:
表選項就是對一個表的有關(guān)屬性的設定,通常都不需要踪宠。如果不設定自赔,有默認值。
有以下幾個可用:
comment = '表的注釋';
charset = 字符編碼名稱;//跟數(shù)據(jù)的字段編碼設定一個意思柳琢。
字符編碼設定的范圍及繼承關(guān)系:
- 系統(tǒng)級設定:安裝時確定了
- 庫級設定:建庫時設定
- 表級設定:charset就是表級設定
- 字段級設定:作為字段屬性出現(xiàn)
auto_increment = 起始整數(shù);//自增長類型值初值绍妨,默認是1
engine = "表的存儲引擎名";
-
存儲引擎就是將數(shù)據(jù)存入硬盤的方式方法
存儲引擎對比
字段屬性:
not null:不為空,表示不能為null染厅,不寫默認為空
auto_increment:int類型字段的值可以"自增長"痘绎,即其值無須"寫入"津函,而會自動獲得并添加
primary key:主鍵肖粮,一個表只能有一個主鍵,是唯一鍵的強化尔苦,不能重復涩馆,并且不能使用null,并且可以作為任意一行數(shù)據(jù)的"關(guān)鍵值",大多數(shù)表使用id并自增長類型作為主鍵
unique key:唯一鍵允坚,該字段所有行行的值不可以重復
default:一個字段在沒有插入數(shù)據(jù)的時候自動使用值
comment:字段注釋
//范例
create table tab1(
id int auto_increment primary key not null,
f1 float unique,
f2 decimal(20,5) default 12.3,
f4 varchar(20) comment'這是一個注釋'
);
索引:
索引是一個"內(nèi)置表",該表的數(shù)據(jù)是對某個真是表的某個字段的數(shù)據(jù)做了"排序"之后的存儲形式魂那。
作用:極大提高表查找速度,效率類似二分查找稠项,但會降低增刪改的速度涯雅,對創(chuàng)建表來說,建立索引非常簡單:key(字段1展运,字段2····)
活逆,unique key(字段1精刷,字段2····)
,primary key(字段1蔗候,字段2····)
怒允,fulltext(字段1,字段2····)
//范例
create table tab2(
id int auto_increment not null,
f1 float,
f2 decimal(20,5) default 12.3,
f4 varchar(20) comment'這是一個注釋',
primary key(id),/*其實和寫在字段上作為屬性意義一樣锈遥,但是出現(xiàn)在這里叫做主鍵索引,出現(xiàn)的場合不同叫法不同而已*/
unique key(f1),/*同上*/
key(f2)
);
約束:
約束是一種限定數(shù)據(jù)以符合某種要求的形式(機制)
約束主要有:
primary key:主鍵索引纫事,主鍵屬性,主鍵約束其實作用一樣
unique key:唯一索引所灸,唯一屬性丽惶,唯一索引其實作用一樣
foreign key:外鍵約束,此值其實是其他表的主鍵庆寺,所以不能修改蚊夫。foreign key (字段名1,字段名2,···)references 表名2(字段名1,字段名2,···)
修改表
通常創(chuàng)建表做的事,修改表也能做到懦尝,大體來說可以做到:
- 增刪改字段
- 增刪索引
- 增刪約束
- 修改表選項
詳細操作看手冊
修改表的基本形式
alter table 表名 修改語句;
刪除表
刪除表的基本形式
drop table [if exists] 表名;
標的其他操作
顯示所有表:show tables
顯示表結(jié)構(gòu):desc 表名
顯示表的創(chuàng)建語句:show create table 表名
從已有表復制表結(jié)構(gòu):create table [if no exist] 新表名 like 原表名
視圖
視圖可以看做是一個"臨時存儲的數(shù)據(jù)所構(gòu)成的表"(非真實表)知纷,其實本質(zhì)上只是一個select語句,只是將該select語句(通常比較復雜)進行一個"包裝"陵霉,并設定了一個名字琅轧,之后把這個名字當做一個表來使用。如果一個select 語句比較復雜,又在多個頁面需要使用它踊挠,則可以將它做成一個視圖乍桂,方便使用。如果某個數(shù)據(jù)表中的某些字段不想給別人看(不同公司之間的數(shù)據(jù)業(yè)務交換的時候)效床,但有需要給別人看的時候睹酌,則可以將它做成一個視圖。
視圖創(chuàng)建形式
/**創(chuàng)建*/
create view 視圖名[(列名1,列名2,···)] as 一條復雜的select語句;
/*修改*/
alter view 視圖名 [(列名1,列名2,···)] as select 語句;
/*刪除*/
drop view [if exists] 視圖名;
視圖的使用
其實就是當做一個查詢表來用(通常只用于select)
select * from 視圖名 where 條件 order by···