MySQL筆記

一 數據庫基礎

 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 視圖名,刪除視圖

   視圖的增刪改時同時也對基表進行了修改;如不能識別基表對應的值則不能修改基表,如用了分組、算術運算、函數等的視圖的加工後的列值,無法找到對應基表數據進行修改;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章