sql


一、表記錄的管理
 一、刪除表記錄
  一、delete from 表名 where 條件;
   ##不加where條件所有刪除
 二、修改表記錄
  一、update 表名 set 字段名=值,... where 條件;
   ##不加where條件所有修改
二、運算符
 一、數值比較&字符比較
  一、數值比較運算符:> >= < <= != =
  二、字符比較:= !=
 二、邏輯比較
  and 、or
 三、範圍內比較(between and、in、not in)
  字段名 between 值1 and 值2
  字段名 in(值1,值2,...)
  字段名 not in(值1,值2,...)
 四、空、非空(is null、is not null)
  一、注意
   一、null :空值,必須用is 或 is not去匹配
   二、""   :空字符串,用 = 或 != 去匹配
 五、模糊比較(like)
  一、字段名 like 表達式
  二、表達式
   _ : 匹配單個字符
   % : 匹配0到多個字符
三、SQL查詢
 一、order by(排序)
  一、order by 字段名 ASC/DESC;
 二、limit(永遠放在SQL語句的最後)
  一、limit n -->顯示n條記錄
  二、limit m,n -->從 m+1 條記錄開始,顯示 n 條
 三、聚合函數
  avg(字段名)、sum(字段名)、max(字段名)、
  min(字段名)
  count(字段名) ## 空值NULL不會被統計
 四、group by(給查詢結果分組)
  一、注意
   一、group by以後字段名 必須爲select 後的字段名
   二、若是select後的字段名沒有在group by以後,則必需要對該字段進行聚合處理
 五、having(對查詢結果進行進一步篩選)
  一、注意
   一、having與group by聯合使用,用來過濾由group by返回的結果集
   二、彌補了where關鍵字不能與聚合函數聯合使用的不足
   三、where只能操做表中實際存在的字段,having能夠操做聚合函數生成的顯示列
 六、distinct(不顯示字段的重複值)
  一、注意
   一、distinct和from之間全部的字段必須所有相同才能夠去重
   二、distinct不能對任何字段作聚合處理
 七、查詢表記錄時作數學運算
  + - * / %
 八、總結
  三、 select ... 聚合函數 from ...
  一、 where ...
  二、 group by ...
  四、 having ...
  五、 order by ...
  六、 limit ...
 四、約束
  一、默認約束(default)
  二、非空約束(not null)
 五、索引
  一、BTree
  二、優勢:加快數據的檢索速度
  三、缺點
   一、索引須要動態維護,下降數據的維護速度
   二、索引佔用物理空間
  四、索引類型
   一、普通索引(MUL)
    一、建立
     一、建立表時建立: index(字段名),...
     二、在已有表建立:
      create index 索引名 on 表名;
    二、查看
     一、desc 表名;
     二、show index from 表名\G;
    三、刪除(只能一個一個刪除)
     drop index 索引名 on 表名;
   二、惟一因此(UNI,字段值不容許重複,但可爲NULL)
    一、建立
     一、建立表
      unique(字段名),...
     二、在已有表中建立
      create unique index 索引名 on 表名;
    二、刪除
     drop index 索引名 on 表名;
MySQL-Day03筆記
一、索引
 一、普通索引(MUL)
 二、惟一索引(UNI)
 三、主鍵索引(PRI)
  一、使用規則
   一、一個表中只能有一個主鍵(primary)字段
   二、對應字段的值不容許重複,且不能爲空
   三、主鍵字段的key標誌PRI
   四、把表中可以惟一標識一條記錄的字段設置爲主鍵,一般把表中記錄編號的字段設置爲主鍵
  二、建立主鍵(primary key)
   一、建立表時建立
    一、字段名 數據類型 primary key,
    二、primary key(字段名)
   二、在已有表中建立
    alter table 表名 add primary key(字段名);
  三、刪除
   alter table 表名 drop primary key;
  四、自增加屬性(auto_increment)
   一、做用:一般和主鍵字段一塊兒配合使用
   二、建立
    一、建立表時建立
    字段名 數據類型 primary key auto_increment
    二、在已有表中添加自增加屬性(modify)
     alter table 表名 modify 字段名 數據類型 primary key auto_increment
  五、刪除主鍵及自增加屬性
   一、alter table 表名 modify 字段名 數據類型;
   二、alter table 表名 drop primay key;
 四、外鍵索引(foreign key)
  一、定義
   讓當前表的字段值在另外一個表的範圍內選擇
  二、語法格式
   foreign key(參考字段名)
   references 被參考表名(被參考字段名)
   on delete 級聯動做
   on update 級聯動做
  三、案例
   表1:繳費信息表(財務)
    學號  姓名     班級     繳費金額
     1   唐伯虎  AID1712     28000
     2   點秋香  AID1712     20000
   表2:學生信息表(班主任)
    學號  姓名    繳費金額
     1   唐伯虎    28000
  四、刪除外鍵
   一、語法格式
    alter table 表名 drop foreign key 外鍵名;
   二、注意
    一、外鍵名的查看方式
     show create table 表名;
  五、在已有表中添加外鍵
   一、語法格式
    alter table 表名 add
    foreign key(參考字段名) references
    被參考表名(被參考字段名)
    on delete 級聯動做
    on update 級聯動做
   二、注意
    在已有表中添加外鍵時,會受到表中原有數據的限制
  六、級聯動做
   一、cascade :數據級聯更新
    一、當主表刪除記錄時,若是從表有相關聯記錄則級聯刪除
    二、當主表更新被參考字段的值時,從表級聯更新參考字段的值
   二、restrict(默認)
    一、當主表刪除記錄時,若是從表中有相關聯記錄則不容許主表刪除
    二、update同 1
   三、set null
    一、當主表刪除記錄時,從表中相關聯記錄外鍵字段值變爲null
    二、update 同 1
   四、no action
    同 restrict,都是當即檢查外鍵限制
  七、使用規則
   一、兩張表被參考字段和參考字段的數據類型要一致
   二、被參考字段必須是KEY的一種,一般是primary key
二、數據導入
 一、做用:將文件系統的內容導入到數據庫中
 二、語法格式
  load data infile "文件名"
  into table 表名
  fields terminated by "分隔符"
  lines terminated by "分隔符"mysql

  tarena:x:1000:1000:tarena,,,:/home/tarena:/bin/bash
  用戶名:密碼:UID:GID:描述:家目錄:登陸權限
 三、把/etc/passwd 導入到mysql數據庫中
 四、操做步驟
  一、在數據庫中建立對應的表
  二、查看數據庫的默認搜索路徑
   show variables like "secure_file_priv";
  三、將系統文件拷貝到數據庫的默認搜索路徑中
   sudo cp /etc/passwd /var/lib/mysql-files
   sudo -i
   cd /var/lib/mysql-files
   ls
   exit
三、數據導出
 一、做用
  將數據庫中表的記錄保存到系統文件裏
 二、語法格式
  select ... from 表名
  into outfile "文件名"
  fields terminated by "分隔符"
  lines terminated by "分隔符"
 三、練習
  一、把userinfo表中的用戶名、密碼和uid號三個字段導出到userinfo.txt中
  二、將庫名:mysql庫中user表中的User、Host兩個字段的值導出到 user2.txt
 四、注意
  一、導出的內容由SQL查詢語句決定
  二、執行導出命令時路徑必須指定在對應的數據庫目錄下
  三、show variables like "secure_file_priv";
    show variables like "%secure%";
四、表的複製
 一、表的複製
  一、語法格式
   create table 表名 select 查詢命令;
  二、練習
   一、複製userinfo表的前10行,userinfo3 \c
   二、複製userinfo表的用戶名、密碼、uid三個字 段的2-10條記錄,userinfo4
 二、只複製表結構
  一、語法格式
   create table 表名 select ... where false;
 三、注意
  一、複製表的時候不會把原有表的 鍵 屬性複製過來
五、嵌套查詢
 一、定義
  把內層的查詢結果做爲外層查詢的條件
 二、語法格式
  select查詢語句 where 條件(select查詢語句);
 三、練習
  一、把uid的值小於這個字段的平均值的用戶名和uid顯示出來
  二、查找userinfo表中用戶名在 mysql庫下的user表Host值爲localhost而且User值是root 的用戶名
六、多表查詢
 一、兩種方式
  一、select 字段名列表 from 表名列表; #笛卡爾積
   select * from tt1,tt2;
  二、select 字段名列表 from 表名列表 where 條件;
 二、練習
  一、顯示省和市的信息
  二、顯示省、市、縣的信息
七、鏈接查詢
 一、內鏈接
  一、定義
   從表中刪除與其餘被鏈接表中沒有匹配到的行
  二、語法格式
   select 字段名列表 from 表1
   inner join 表2 on 條件;
  三、練習
   一、顯示省市信息,沒有匹配的不顯示
   二、顯示省市縣的信息 
 二、外鏈接
  一、左鏈接
   一、定義
    以左表爲主顯示查詢結果
   二、語法
    slect 字段名列表 from 表1 left join 表2 on 條件;
   三、練習
    一、顯示省市的信息,以左表爲準
    二、顯示省市的信息,以右表爲準
    三、顯示省市區的信息,要求市所有顯示
  二、右鏈接sql

相關文章
相關標籤/搜索