一 數據庫基礎
oracle,mysql,sqlserver是三大關係型數據庫;
基本元素:數據庫,表,列和數據類型(數值,字符,日期,文本),行,主鍵(必須有一個主鍵,每行主鍵值不相同,主鍵值不能爲空),外鍵(是另一個表的主鍵,表示這是那個表的從鍵,數值要保持一致)
mysql是C/S架構:客戶端起到服務端與用戶之間的橋樑作用,將用戶操作的請求給服務端,將服務端的處理結果返回給用戶;
開關mysql服務:控制面板的服務中進行開關,或者cmd中net start mysql;net stop mysql;//windwos, service mysql start; service mysql stop//linux;
連接數據庫:workbench--database--connect to database, cmd--切換安裝bin目錄--mysql -uroot -p123;
二 數據庫語言
數據庫定義和操作語言:
show databases; //查看有哪些數據庫;
create database 數據庫名; //創建數據庫
use 數據庫名;//使用數據庫
drop database 數據庫名;//刪除數據庫
show tables; #查看數據庫所有的表
create table 表名 #創建一個表
(
列名 數據類型 約束;
...
);
show create table 表名;#查看創建此表的腳本語句
desc 表名;#查看錶結構
rename table 舊錶名 to 新表名;#修改表名
列操作:
alter table 表名 add 列名 類型 參數;#增加表中列
alter table 表名 modify 列名 新類型 新參數; #修改列類型或參數;
alter table 表名 change 舊列名 新列名 新類型 新參數;#修改列名或類型或參數;
alter table 表名 drop 列名; #刪除列;
alter table 表名 add index 索引名 列名:#爲一個或多個列創建索引
alter table 表名 add constraint 約束名 Foreign Key(列名)references 主表名(主表列名);#創建某列爲外鍵
行操作:
select 列名,。。from 表名 where 條件; #按條件查詢
insert into 表名(列名1,..)values(列值); #插入一條記錄,指定列名賦值
upate 表名 set 列=列值 where 條件 #按條件修改行的某列對應值
delete from 表名 where 條件;#按條件刪表記錄
truncate table 表名;#刪除表後重建表架構
drop table 表名;#刪除表
數據庫控制語言:
show status; #查看mysql數據庫狀態
show grants; #查看用戶權限,show grants for 用戶名
show errors; #查看錯誤信息
show warnings;#查看報警信息
注意點:
1.select distinct 列1,列運算或函數 as 別名 from 表名 where 運算或函數 group by 條件 having 條件 order by 列1,列2 desc/asc limit(n,m); # group by與having配套是按組查詢,where是按行查詢,order默認是升序asc,最大值除max()外還可以 order by desc limit 1降序取1條即爲最大值的一條記錄,最小值除min()外還可以order by asc limit 1 升序取1條即爲最小的一條記錄;
2.如果一個查詢的結果作爲另一個查詢的條件,可以用子查詢嵌套。一般是主從表之間的關聯查詢,視圖,索引,自連接比多表查詢效率高
3.where條件支持的操作符:=,>,<,>=,<=,<>,!=,between and ,and,or,(),is null,in,not between and,is not null,not in,like,regexp;#in比between and的效率高
4,通配符:
like:%指代0個或多個字符,_指代1個字符;
5.regexp:
'200|100',200和100任取一個串
[],中括號內任匹配一個字符,
[^]不匹配中括號內任一字符,
[0-9],[a-z]匹配一個範圍,
\\,特殊字符轉義符,如小數點,\\.
字符集:[:alnum:][:alpha:][:blank:][:digit:][:xdigit:][:upper:][:lower:],
[:xdigit:]代表任意16進制數;
*,0個或多個,+,1個或多個,?,0或1個,{n},n個,{n,}n個或以上,{n,m},n個到m個;
^,文本開始如^a以開始的文本,^放中括號裏面就是取反外面就是文本開始,
$,文本結束如5$以5結束,
[[:<:]]詞的開始,[[:>:]]詞的結尾,
6.like與regexp的區別:
like是對整個字符串的匹配,regexp只需要匹配包含的部分;
like匹配內容來自於表,regexp的匹配內容可以不來自表可以是其他指定文本內容;
7.group by主要是用來做集合統計,別名的作用是簡化查詢或進行列運算;
8.函數:concat(列1,列2,列3,...)字符拼接,=,-,*,/
聚集函數:max(),min(),avg(),sum(),count();
流程函數:if(value條件,ture值,false值),value條件爲真取真值,爲假取假值;
ifnull(value1,value2);
case when then else end;
文本函數:right(),left(),返回右邊或左邊幾個字符,
length(),返回字符串長度;
Rtrim(),Ltrim(),去掉右邊或左邊的空格
upper(),lower(),轉成大寫或小寫字母;
locate(),返回子串位置
日期與時間函數: adddate(),addtime(),year(),month(),day(),hour(),minute(),second(),date(),time(),dayofweek () ,curdate(),curtime(),datediff(),日期之差,date_format(),以yyyy-mm-dd格式返回日期,
算術函數:ads()取絕對值,sqrt()平方根,mod()取餘數,exp()取指數,sin()cos()取 角sin/cos值,rand()隨機數,pi()取圓周率,
9.表連接:是有外鍵關聯的兩個表的連接,沒有外鍵關聯的將做笛卡爾乘積次匹配連接;
內連接(等值連接)inner join on:值相等匹配才連接,
外左連接:左表全顯示,表a left join 表b on 條件
外右連接:右表全顯示,right join on
自連接:用別名在同一個表中做連接;將兩條查詢語句用自連接效率高於子查詢嵌套
聯合查詢:union,選擇的是同樣的列,是結果的合併;
10.視圖:是虛擬表,沒有數據,只是一個存儲方式,視圖名字唯一,來源可以是一個或過個表,也可 以是一個或多個視圖,可以和表一起用,可以order by,必須要先開視圖權限,不能索引,不能觸發 器,不能默認值;
create view 視圖名 as 條件;
show create view 視圖名,#查看創建視圖的腳本語句
show table status where comment='view',查詢視圖信息,或show tables的結果中也包含視圖,
無更新視圖,需先刪視圖再創建視圖來達到修改的目的;
drop view 視圖名,刪除視圖
視圖的增刪改時同時也對基表進行了修改;如不能識別基表對應的值則不能修改基表,如用了分組、算術運算、函數等的視圖的加工後的列值,無法找到對應基表數據進行修改;