對數(shù)據(jù)庫的操作:
數(shù)據(jù)庫的創(chuàng)建:
create database [in not exists] db_name [character set utf8] [collate collation_name]
in not exists:使用這句話之后脑题,創(chuàng)建的數(shù)據(jù)庫存在就不再創(chuàng)建夜焦,如果沒有這句話育八,創(chuàng)建的數(shù)據(jù)庫存在就報錯煎楣。
character set utf8:庫采用什么碼表,最好每次使用
create database testbase character set utf8 collate utf8_general_c1;
查看庫的創(chuàng)建信息:show database db_name;
刪除創(chuàng)建的數(shù)據(jù)庫:drop database db_name;
修改數(shù)據(jù)庫的字符集編碼:
alter database db_name character set utf8;
備份數(shù)據(jù)庫:
mysqldump -u root -p db_name>path_name (此命令屬于計算機的命令解滓,不能在sql命令行下執(zhí)行穗酥,必須在系統(tǒng)命令行下執(zhí)行瞬浓,并且不能有分號)
恢復(fù)數(shù)據(jù)庫:
1、恢復(fù)只能恢復(fù)數(shù)據(jù)中的數(shù)據(jù)机打,要恢復(fù)庫矫户,必須先創(chuàng)建數(shù)據(jù)庫。
1)進入數(shù)據(jù)庫:use db_name;
2)執(zhí)行恢復(fù)source back_path_naem (source:執(zhí)行sql腳本)
2残邀、恢復(fù)只能恢復(fù)數(shù)據(jù)中的數(shù)據(jù)皆辽,要恢復(fù)庫,必須先創(chuàng)建數(shù)據(jù)庫芥挣。
1)進入數(shù)據(jù)庫:use db_name;
2)mysql -u root -p db_name<path_name(此命令屬于計算機系統(tǒng)命令)
數(shù)據(jù)類型:
1驱闷、數(shù)值類型:
bit(5) 保存5個二進制位,不指定位數(shù)空免,默認(rèn)是1空另。
tinyint[unsigned][zerofill]:一個字節(jié)大小-127--128,跟上后面兩個參數(shù)的任何一個標(biāo)識無符號數(shù)0--255
bool,boolean:數(shù)據(jù)庫中沒有turu,false,數(shù)據(jù)庫中保存的是0或1蹋砚,和使用bit(1)效果相同
smallint[unsigned][zerofill],表示2的16次方痹换,對應(yīng)java中的short
int [unsigned][zerofill]:2的32次方
bigint[unsigned][zerofill]:2的64次方
float[m,d] [unsigned][zerofill]:m,數(shù)據(jù)長度征字,d,保留的小數(shù)位數(shù)娇豫。
double[m,d] [unsigned][zerofill]:m,數(shù)據(jù)長度匙姜,d,保留的小數(shù)位數(shù)冯痢。
decimal[m,d]:精度最高氮昧,可用于貨幣使用。
2浦楣、文本類型:
1)char(size) 定長:最大大小為size,存一個字符袖肥,大小也是size。size設(shè)置最大為255
2)varchar(size) 變長:最大大小為size振劳,存一個字符椎组,大小為1。size設(shè)置最大為65535
3)blob,longblob:存儲二進制數(shù)據(jù)(圖片历恐,圖像等)2的10次方為1k寸癌,2的20次方為1M.實際開發(fā)中將大數(shù)據(jù)以文件形式存儲而不直接存儲在數(shù)據(jù)庫中。
4)text(oracal中為clob)弱贼,longtext(longclob)
3蒸苇、時間日期
date, datetime,timestamp
對表的基本操作:
查看表創(chuàng)建細節(jié):show create table table_name
查看表的結(jié)構(gòu):desc table_name
修改表:
增加一個字段:alter table table_name add 字段 類型;
修改字段的類型:alter table table_name modify 字段 類型吮旅;
修改表中的字段名:altert table table_name change column 原字段名 新字段名 字段類型溪烤;
刪除字段:alter table table_name drop 字段名;
修改表的字符編碼:alter table 表名 character set utf8庇勃;
修改表名:rename table old_name to new_name檬嘀;
刪除表:drop table table_name;
創(chuàng)建表
cteate table Student(
id int,
name varchar(20)
);
數(shù)據(jù)插入:insert into
字符责嚷,字符串和如期類數(shù)據(jù)使用單引號枪眉。
插入空值,不指定或使用null
細節(jié):
1再层、可以將任何數(shù)據(jù)都使用單引號贸铜。
2、插入數(shù)據(jù)的時候跟上字段名稱聂受,便于后期維護蒿秦。
3、輸入中文字符亂碼問題:
原因:例如蛋济,數(shù)據(jù)表使用的編碼為utf-8棍鳖,客戶端輸入的字符為gb2312編碼,此時將數(shù)據(jù)存入到數(shù)據(jù)表中,查詢的是utf-8碼表渡处,就會出現(xiàn)亂碼問題镜悉。
解決辦法:
1)顯示所有字符集編碼變量:show variables 'character%'
2)存儲亂碼:設(shè)置客戶端編碼為gb2312:set character_set_client=gb2312
3)顯示結(jié)果亂碼:set character_set_results='gb2312'
修改數(shù)據(jù):
update table_name set 字段名 = 值,字段名 = 值 where 條件
注意:書寫update先書寫where條件医瘫,以免忘記侣肄。
刪除數(shù)據(jù):
delete from table_name where 條件:刪除數(shù)據(jù)時一條條的進行刪除。
truncate table_name:摧毀整個表醇份,重建表結(jié)構(gòu)稼锅。
簡單查詢數(shù)據(jù):
一般查詢: select 字段名,字段名 from table_name
過濾重復(fù)數(shù)據(jù):select distinct 字段名僚纷,字段名 from table_name
查詢中使用別名:select name as 姓名, enScore + chScore + 10 as 總成績 from tabe_name(不跟as也可以)
結(jié)果排序:select * from table_name order by 字段名 asc(升)|desc(降序)矩距,默認(rèn)是升序
比較運算符:
between ...and...:包含前后的值
顯示在列表中的值:in(value1, value2),值為value或者value2
模糊查詢:like '張pattern' pattern:_代表一個字符,%代表0個或多個字符
is null判斷是否為null
合計函數(shù):
count(字段名):計算條目數(shù)量怖竭,只統(tǒng)計有值的行锥债,NULL不統(tǒng)計
select count(*) from table_name where 條件
sum(字段名 + 字段名 + ...):求和,只適用于數(shù)值痊臭,非數(shù)值報錯哮肚。
avg(字段名 + 字段名 + ...):求平均數(shù)
max(字段名 + 字段名 + ...)/min(字段名 + 字段名 + ...):求一列中的最大值,最小值
分組:group by
select name, sum(price) from goods group by name:相同name的分為一組趣兄,對同一組的價格進行求和
having:過濾(where也可以用于過濾,區(qū)別在于having可以跟合計函數(shù))
時間日期相關(guān)函數(shù)
addtime(date1, date2):將data2加到data1
current_date():獲取當(dāng)前日期
current_time():獲取當(dāng)前時間
current_timestamp():獲取當(dāng)前時間戳
date(datetime):獲取datatime的日期部分
date_add(date1悼嫉,date2):data1中加上data2
date_sub(date1, date2):data1中減去data2
datediff(date1,date2):兩個時間差
now():獲取當(dāng)前時間
year|month|date(datetime):年月日
字符串相關(guān)函數(shù)
charset(str):返回字符串字符集
concat(str,str):鏈接字符串
instr(str1, str2):返回str2在str1中出現(xiàn)的位置艇潭,,沒有返回0
ucase(str):轉(zhuǎn)換成大寫
lcase(str):轉(zhuǎn)換成大寫
left(str,len):從str左邊起去len個字符
length(str):str長度
replace(str, search, replace):將str中的search替換成replace
strcmp(str1,str2):逐個字符比較兩個字符串大小
substring(str, position, len):從str的position開始去len個字符
ltrim(str), rtrim(),trim():去掉兩邊空格
數(shù)學(xué)相關(guān)函數(shù)
abs(num):去絕對值
bin(num):十進制轉(zhuǎn)二進制
ceiling(num):向上取整
conv(num, from_base, to_base):進制轉(zhuǎn)換
floor(num):向下去整
forrmat(num, decimal_places):保留小數(shù)位數(shù)
hex(num):轉(zhuǎn)十六進制
least(num1, num2, ....):求最小值
mod(num, denominator):求余
rand([seed])
定義表的約束
主鍵約束:
primary key:不允許重復(fù)戏蔑,不能為空蹋凝,且唯一
刪除主鍵約束:alter table table_name drop primary key;
聯(lián)合主鍵:primary key(tea_id, stu_id)
定義主鍵自動增長:
auto_increment;
id int primary key auto_increment
如果將其中一條數(shù)據(jù)刪除,此id將不會填充
定義唯一約束:
unique
id int primary key auto_increment;
name varchar(40) unique;
定義唯一約束:
not null
name varchar(40) unique not null;
定義外建約束:
student_id int,(此id來自學(xué)生表中的id),
constraint 外建名稱 foreign key(student_id) references student(id)
數(shù)據(jù)表的設(shè)計
一對多(多對一):在"多"的一方中創(chuàng)建外建保存"一"的一方的Id总棵。
多對多:創(chuàng)建中間表表示兩張表的關(guān)系鳍寂。
一對一:具有主從關(guān)系,人-主情龄,身份證-從迄汛。主可以沒有從,從不能沒有主骤视。
在從表中鞍爱,將從表的主鍵也設(shè)置為外建,并且外建來自于主表的主鍵专酗。
自關(guān)聯(lián)數(shù)據(jù)的數(shù)據(jù)庫設(shè)計:(家族關(guān)系)
在同一張表中創(chuàng)建字段描述關(guān)系(創(chuàng)建一個字段保存父類編號即可)睹逃。