MySQL知識總結

1.MySQL數據庫
    MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,從而增長了速度並提升了靈活性。
    MySQL所使用的 SQL 語言是用於訪問數據庫的最經常使用標準化語言,因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,通常中
  小型網站的開發都選擇 MySQL 做爲網站數據庫,搭配 PHP 和 Apache 可組成良好的開發環境。
2.MySQL存儲方式
    一臺數據庫服務器中會建立不少數據庫,在數據庫中會建立不少張表,在表中會有不少記錄。
3.SQL結構化查詢語言
     SQL是高級的非過程化編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統;同時也是數據庫腳
  本文件的擴展名,能夠嵌套,具備極大的靈活性和強大的功能。
4.SQL語言的分類
    (1)DDL(數據定義語言)
    (2)DML(數據操做語言)
    (3)DCL(數據控制語言)
    (4)DQL(數據查詢語言)
5.MySQL數據庫的建立、修改和刪除
    (1)建立數據庫
        語法: create database 數據庫名稱 [character set 字符集 collate 字符集校對規則](通常忽略);
    (2)查看數據庫
      查看全部數據庫:
        語法: show databases;
      查看某個數據庫:
        語法: show create database 數據庫名稱;
    (3)修改數據庫:
        語法:alter database 數據庫名稱 [character set 字符集 collate 字符集校對規則](通常忽略);
    (4)刪除數據庫:
        語法:drop database 數據庫名稱;
    (5)使用或者切換數據庫:
        語法:use 數據庫名稱;
6.MySQL表的建立、修改和刪除
    (1)建立表
        語法:create table 表名(
            數據名稱 數據類型(長度) 約束,
            .......
        );
        注:括號內的語句用逗號進行屢次建立,最後的語句不加任何標點符號
        數據類型:(MySQL所對應的Java類型)
         Java中的類型                        MySQL中的類型
            byte/short/int/long             tinyint/smallint/int/bigint
            float                            float
            double                            ouble
            boolean                            bit
            char/String                        char和varchar類型
                                             char和varchar的區別:
                                              char表明是固定長度的字符或字符串。
                                               定義類型char(8),向這個字段存入字符串hello,那麼數據庫使用三個空格將其補全。
                                              varchar表明的是可變長度的字符串。
                                               定義類型varchar(8), 向這個字段存入字符串hello,那麼存入到數據庫的就是hello。
            Date                            date/time/datetime/timestamp
                                             datetime和timestamp區別
                                              datetime就是既有日期又有時間的日期類型,若是沒有向這個字段中存值,數據庫使用null存入
                                              到數據庫中
                                              timestamp也是既有日期又有時間的日期類型,若是沒有向這個字段中存值,數據庫使用當前的
                                              系統時間存入到數據庫中。
            File                            BLOB/TEXT
        約束:
          約束做用:保證數據的完整性
          單表約束:
            主鍵約束:primary key (主鍵約束默認就是惟一 非空的)
            惟一約束:unique
            非空約束:not null
    (2)查看錶
        查看一個數據庫下的全部的表:
          語法:show tables;
        查看單獨一個表:
          語法:desc 表名;
    (3)刪除表
          語法:drop table 表名;
    (4)修改表
        增添列:
          語法: alter table 表名 add 列名 數據類型(長度) 約束;
        修改列類型,長度和約束:
          語法: alter table 表名 modify 列名 數據類型(長度) 約束;
        刪除列:
          語法: alter table 表名 drop 列名;
        修改列名稱:
          語法: alter table 表名 change 舊列名 新列名 數據類型(長度) 約束;
        修改表名:
          語法: rename table 表名 to 新的表名;
        修改表的字符集:
          語法: alter table 表名 character set 字符集;
7.MySQL數據的增刪改查
    (1)添加表記錄
        向表中插入某些列:
          語法: insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…);
        向表中插入全部列:
          語法: insert into 表名 values (值1,值2,值3…);
      注意:
        1.值的類型與數據庫中表列的類型一致;
        2.值的順序與數據庫中表列的順序一致;
        3.值的最大長度不能超過列設置最大長度;
        4.值的類型是字符串或者是日期類型,使用單引號引發來。
    (2)修改表記錄
          語法: update 表名 set 列名=值,列名=值 [where 條件];
      注意:
        1.值的類型與列的類型一致;
        2.值的最大長度不能超過列設置的最大長度;
        3.字符串類型和日期類型添加單引號。
    (3)刪除表記錄
          語法: delete from 表名 [where 條件];(或者truncat from 表名;)<注:truncat刪除表數據沒法恢復>
      注意:
        1.刪除表的記錄,指的是刪除表中的一行記錄;
        2.刪除若是沒有條件,默認是刪除表中的全部記錄。
    (4)查看錶記錄
          語法: select  *(或者列名) from 表 [條件];
8.MySQL解決向數據庫中插入中文記錄會出現錯誤
    解決方法:
        須要將MySQL數據庫服務器中的客戶端部分的字符集改成gbk,找到MySQL的安裝路徑:my.ini文件,修改文件中[client]下的字符集,將
      [default-charaacter-set=ISO-8895-1]改爲[default-charaacter-set=gbk],而後再從新啓動MySQL的服務器。
9.按不一樣方式查看錶記錄
    (1)按條件查詢:
        使用where 字句
         > ,< ,<= , >= , <> *不等 , =
        like:模糊查詢 , in:範圍 查詢 ,  條件關聯:and or not
        查詢李四信息: select * from 表名 where 列名[name = 李四] = '李四';
        查詢李四信息而且英語大於90: select * from 表名 where 列名[name = 李四] ='李四' and 列名[Englist]>90;
        在lik可使用: _ , %  _只能帶表一個字符 %帶表多個字符  * %王% 帶表中間包含着個字就行
        查詢姓李的學生信息: select * from 表名 where name like '%李%'
        查詢英語成績是69,75,89的學生: select * form 表名 where 列名[english] in (69 , 75 , 89);
    (2)查詢排序:
        使用order by 字段名稱 asc/desc; *默認是用asc , 倒序desc;
        查詢學生信息按成績排: selech * from order by 列名[english];
        查詢學生成績按倒序: selech * from order by 列名[english] desc;
        查詢學生按語文成績倒序再按英語升序排列: select * from order by  列名[chinese] desc, 列名[english] asc;
        查詢姓李的學生,英語按倒序排列: select * from 表名 where 列名[name] like '李%' order by 列名[english] desc;
    (3)分組統計查詢:
        聚合函數:
          sum(); 得到總數: count();*個數;  最大值:max() 最小值:min() 平均值:avg;
            得到全部成績的和: select sum(exam)from 表名;
          count();
            得到全部的計數: select count(*) from 表名;
          max()/min();
            得到某門考試的最大和最小成績: select max(math) from 表名;/select min(math) from 表名;
          avg()
            得到平均數:select avg(chinese) from 表名;
        分組查詢
          語法:使用group by 字段名稱;
           按商品名稱統計,每類商品所花費的總金額:select product,sum(price) from orderitem group by product;
         注意:
            where的子句後面不能跟着聚合函數。若是如今使用帶有聚合函數的條件過濾(分組後條件過濾)須要使用一個關鍵字HAVING;
            例:select product,sum(price) from orderitem  group by product having sum(price) > 5000 order by sum(price) asc;
10.單表查詢的執行順序流程
    select ... from ... where ...  group by ... having ...order by ...;
11.多表查詢
      表與表之間的關係-外鍵
        做用:保證多張表之間的數據若是有關聯,則關聯的數據的完整性。
      設計與建表原則
        一對多:將外鍵設置在多的一方,指向一的主鍵
        多對多:必須有第三張表,這張表中最少會有兩個字段做爲外鍵,指向多對多的兩張表的主鍵
        一對一:惟一外鍵約束
                主鍵對應:
                  實質就是創建外鍵而且讓這個外鍵惟一。
      查詢:
        準備環境:多表分析建立
        鏈接查詢:關聯條件就是外鍵
            內鏈接:交集, select * from 表1, 表2 where 條件
            左外鏈接:左表的數據和交集數據
                select * from 表1 left join 表2 on 條件
            右外鏈接:右表的數據和交集數據
                select * from 表1 right join 表2 on 條件
        子查詢
12.分頁查詢
    select * from 表名 limit begin, length  :begin 從0開始,表示索引;length:表示查詢多少條記錄
    select * from 表名 limit number; 從第一條數據開始,總共查詢number條數據。
13.MySQL常見bug
     select * from 表名 where score = '80abc' 實質就是:SELECT * FROM stu where score = 80, 會將不能轉化爲數值的字符捨棄
     select * from 表名 where NAME = 'abC' :MySQL查詢的時候不區分大小寫      
        解決方法:
            select * from stu where BINARY NAME = 'Abc'數據庫

相關文章
相關標籤/搜索