JavaWeb——MySQL_總結

一.mysql:數據庫軟件

2.1 卸載:

        1.停止服務

          Win+R-->services.msc-->mysql-->右擊-->停止服務

        2.卸載 win+r-->appwiz.cpl-->mysql-->右擊-->卸載

        3.手動刪除目錄

         *  找到myql的安裝目錄”D:\Program Files\MySQL\MySQL Server 5.5” 下的my.ini (mysql的配置文件),

            在在這個文件中 找到datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/",找到datadir對應的

            文件夾(尋找過程中放開隱藏文件屬性),將mysql文件夾刪除                   

         *  刪除mysql的安裝目錄          


2.2 安裝  

         詳見安裝文檔          

2.3訪問:

        進入:  Win+R-->cmd-->mysql -u root -p-->root-->enter

        退出:  exit--exit

      2.4 如何修改root密碼

          在my.ini的文件做末尾加入  skip-grant-tables

          重啓mysql服務,這時的mysql不需要密碼即可登錄數據庫

          然後進入mysql

mysql>use mysql;

mysql>更新 user set password=password('新密碼') WHERE User='root';

mysql>flush privileges;

運行之後最後去掉my.ini中的skip-grant-tables,重啓mysqld即可。      

      

      2.5  my.ini文件

      2.6 各種錯誤參考安裝報錯文檔


二.SQL:Structured Query Language  結構化查詢語言

  3.1 概念:

  用於操作關係型數據庫的一門語言,它定義了一種操作關係型數據庫的規範

  3.2 SQL分類

DDL(*)(Data Definition Language):數據定義語言,用來定義數據庫對象:庫、表、列等;

DML(***)(Data Manipulation Language):數據操作語言,用來定義數據庫記錄(數據);

DCL(Data Control Language):數據控制語言,用來定義訪問權限和安全級別;

DQL(*****)(Data Query Language):數據查詢語言,用來查詢記錄(數據)。


    


3.3  DDL:操作數據庫和數據表,表中的列

3.3.1 操作數據庫

 c: create 創建  

* create database 數據庫名稱;

r: read   查詢

* show databases; //查詢所有的數據庫名稱

* show create database 數據庫名稱;//查詢創建的數據庫的詳細信息

u: update 修改

* 修改數據庫的編碼

alter database 數據庫名稱 character set 字符集名稱;//修改數據庫編碼

d: delete 刪除

*  drop database 數據庫名稱;//刪除數據庫

3.3.2 操作表:

    3.3.2.1  C:創建表

 * 數據類型:

     int:整型

  double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值爲999.99;

  char:固定長度字符串類型;  char(5)  "aa"

  varchar:可變長度字符串類型; varchar(5)  "aa"

  text:字符串類型;

  blob:字節類型;

  date:日期類型,格式爲:yyyy-MM-dd;

  time:時間類型,格式爲:hh:mm:ss

  timestamp:時間戳類型 yyyy-MM-dd hh:mm:ss 


 * 創建表語法:

 create table 表名(

列名1 數據類型,

        列名2 數據類型,

列名3 數據類型,

...

  );

create table stu(

id int,

name varchar(20),

age int,

gender varchar(6)

);

  

      * 每一個字段需要使用逗號(,)隔開。 最後一個字段後 不能加 逗號(,)

      * 要想創建表,需要進入數據庫  use 數據庫名稱;

      * 向倉庫的表中插入數據

   insert into stu values(2,'mary','male',18,'AA is a good student!','1990-02-23 12:34:44');

insert into stu values(3,'lucy','male',18,'BB is a good student!','1990-02-23 12:34:44');

insert into stu values(4,'lily','female',18,'CC is a good student!','1990-02-23 12:34:44');

insert into stu values(5,'smith','male',18,'DD is a good student!','1990-02-23 12:34:44');

insert into stu values(6,'piter','female',18,'EE is a good student!','1990-02-23 12:34:44');

insert into stu values(7,'jack','female',18,'FF is a good student!','1990-02-23 12:34:44');


* 中文插入亂碼的解決方案,執行以下命令

set character_set_client=gbk;

set character_set_results=gbk;


            * 查看stu表中的所有數據

           select * from stu;



 * 完整性約束:保證數據的正確性和完整性

             • 非空約束:not null

             • 唯一約束:unique

             • 主鍵約束:primary key  非空且唯一。一張表只能有一個主鍵

             • 主鍵自增長:auto_increment  應該給值null

             • 外鍵約束:foreign key  

                 • 外鍵關聯的必須是另一張表的主鍵

                 • 外鍵和主鍵之間數據類型必須一致


       * 表與表的關係:

* 一對一:如果是一對一的關係,外鍵在兩張表加上都可

* 一對多(多對一):一對多或多對一,外鍵應該添加在多的一方

* 多對多:多對多的關係,需要使用中間表來關聯兩張表。中間表的兩個字段都是外鍵

Eg: Create table test(id int ,name varchar(30), FOREIGN KEY (id) REFERENCES tb_tea(id) );

      3.3.2.2. R:查詢表

         * show tables; //查詢該庫下的所有表名

         * desc 表名; // 查詢表的詳細信息


      3.3.2.3.:U修改:

        * 修改表中的列(字段):

1. 添加列:給stu表添加classname列:

ALTER TABLE stu ADD (classname varchar(100));

2. 修改列類型:修改stu表的gender列類型爲CHAR(2):

ALTER TABLE stu MODIFY gender CHAR(2);

3. 修改列名:修改stu表的gender列名爲sex:

ALTER TABLE stu change gender sex CHAR(2);

4.刪除列:刪除stu表的classname列:

ALTER TABLE stu DROP classname;

        * 修改表的名稱

alter table stu rename student;

     3.3.2.4.: D:刪除表

         * drop table 表名;//刪除表 表沒有了,表上的數據自然也沒有了

3.4  DML: 操作表中的數據  (增、刪、改)

       3.4.1 查詢: 

            select * from stu;

 3.4.2 增:添加數據

           向表中插入一行數據(所有列上的數據都插入) 

  insert into stu values(7,'jack','female',18,'FF is a good student!','1990-02-23 12:34:44');

向表中插入一行數據(部分列上的數據都插入) 

  insert into stu(stuNum,stuName,stuSex,stuAge) values(7,'jack','female',18);

一次插入多行數據

insert into stu values

(2,'mary','male',18,'AA is a good student!','1990-02-23 12:34:44'),

(3,'lucy','male',18,'BB is a good student!','1990-02-23 12:34:44'),

(4,'lily','female',18,'CC is a good student!','1990-02-23 12:34:44'),

(5,'smith','male',18,'DD is a good student!','1990-02-23 12:34:44'),

(6,'piter','female',18,'EE is a good student!','1990-02-23 12:34:44'),

(7,'jack','female',18,'FF is a good student!','1990-02-23 12:34:44'); 

 3.4.3 刪除數據

刪除部分數據

   delete from stu where stuNum>=6;

   delete from tbName [where 條件];


刪除全部數據

       delete from stu; //刪除表中的全部數據

       truncate stu;   //截斷表中的數據  效率高

 3.4.4 改:修改表中的數據

* update 表名 set 字段名稱1=值1, 字段名稱2=值2... [where 條件];

* update stu set stuAge=20;  //更新所有人的年紀爲20

* update stu set stuAge=20 where stuNum=5; //更新學號爲5的學生的年齡

* update stu set stuName='jack' ,stuSex='female', stuAge=19 , stuSelf='jack is a good student' where stuNum=5;

    修改學號爲5的學生的姓名爲jack,性別爲female,年齡爲19,自我簡介爲”jack is a good student” 


3.5  DQL:查詢表中的數據

   3.5.1 語法:

         select 字段名1 ,字段名2,..... From 表名 where [條件];  

   3.5.2 條件查詢:

  =、!=、<>、<、<=、>、>=;

  BETWEEN…AND;

  IN(set);

  IS NULL;

  AND;

  OR;

  NOT;

      導入初始化語句 Init_Stu.sql 

-- select 字段名1,字段名2 .... FROM tableName where [條件];

-- 查詢所有的學生信息    查詢所有列

SELECT * FROM stu;   -- 效率比較低

SELECT stuId,stuNum,stuName,stuSex,stuAge,stuQQ,stuAddr,stuSkillScore,stuQualityScore FROM stu;  --相對上條語句效率高

-- 查詢所有的學生的學號和姓名    查詢部分列

SELECT stuNum,stuName FROM stu;

-- 查詢所有男生的信息            1個限制條件

SELECT stuId,stuNum,stuName,stuSex,stuAge,stuQQ,stuAddr,stuSkillScore,stuQualityScore FROM stu WHERE stuSex='男';

-- 查詢所有19歲男生的學號和姓名     2個限制條件   = and

SELECT stuNum,stuName FROM stu WHERE stuSex='男' AND stuAge=19;

-- 查詢所有大於19歲男生的全部信息    2個限制條件  > && 

SELECT * FROM stu WHERE stuAge>19 AND stuSex='男';

-- 查詢所有大於20歲或小於19歲同學的學號和姓名    or

SELECT stuNum,stuName FROM stu WHERE stuAge>20 OR stuAge<19;

-- 查詢所有大於等於18歲同時小於等於21歲同學的學號和姓名  >=  <=    between and

SELECT stuNum,stuName FROM stu WHERE stuAge>=18 AND stuAge<=21;

SELECT stuNum,stuName FROM stu WHERE stuAge BETWEEN 18 AND 21;

-- 查詢所有18歲的男生的全部信息或者年齡小於22歲的女生的全部信息    ||  ()

SELECT * FROM stu WHERE (stuAge=18 AND stuSex='男'  ) OR ( stuAge < 22 AND stuSex='女' )  ;

-- 查詢不是19歲學生的信息 !

SELECT * FROM stu WHERE stuAge !=19;

-- 查詢18歲,20歲,22歲的所有男同學的姓名和性別   in

SELECT stuName,stuSex FROM stu WHERE stuSex='男' AND (stuAge =18 OR stuAge = 20  OR stuAge =22);

SELECT stuName,stuSex FROM stu WHERE stuSex='男' AND stuAge IN(18,20,22);

-- 查詢家鄉不明確的學生的信息

--  select * from stu where stuAddr = null; -- 包含null值的查詢,我們不用=

  SELECT * FROM stu WHERE stuAddr IS NULL; 



  3.5.3  模糊查詢:

* like    

      * 通配符:

_:任意單個字符

%:任意多個字符

-- 查詢姓"張"的學生的所有信息

SELECT  * FROM stu WHERE stuName LIKE '張%';

-- 查詢所有河北的學生

SELECT  * FROM stu WHERE stuAddr LIKE '河北%';

-- 查詢名字中包含a字符的學生的所有信息

SELECT  * FROM stu WHERE stuName LIKE '%a%';

-- 查詢QQ號碼中包含5的所有學生的姓名和性別

SELECT stuName,stuSex FROM stu WHERE stuQQ LIKE '%5%';

-- 查詢姓名2個字符,結尾爲"明"的學生的所有信息

SELECT * FROM stu WHERE stuName LIKE '_明';



  3.5.4字段控制

*  null參與的運算,結果還爲空

* 使用ifnull解決

ifnull(字段名稱,0):判斷字段是否爲null 如果爲null 就替換爲0

* 別名: as(也可以不用,使用空格)

* 去除重複記錄:DISTINCT

  -- 查詢所有學生的學號,姓名,性別,年齡,技能分,綜合素質分,總成績

  SELECT stuNum,stuName,stuSex,stuAge,stuSkillScore,stuQualityScore,(stuSkillScore + IFNULL(stuQualityScore,0))  FROM stu;

  -- 查詢所有學生的學號,姓名,性別,年齡 要求顯示結果集中的列名爲中文  列的別名

  SELECT stuNum AS 學號,stuName 姓名,stuSex 性別,stuAge 年齡,stuSkillScore 技能分,stuQualityScore 綜合素質分,(stuSkillScore + IFNULL(stuQualityScore,0)) 總成績 FROM stu;

  -- 查詢所有學生的家鄉分佈,去除多餘選項

  SELECT DISTINCT stuAddr FROM stu;

    -- 查詢所有學生的學號,姓名,性別,年齡,技能分,綜合素質分,總成績 表的別名

  SELECT s.stuNum,s.stuName,s.stuSex,s.stuAge,stuSkillScore,stuQualityScore,(stuSkillScore + IFNULL(stuQualityScore,0))  FROM stu s;

   



  3.5.5 排序:

* order by 字段名稱 排序方式

* 排序方式:

* asc :默認值,升序

* desc:降序

* 聚合函數

聚合函數是用來做縱向運算的函數:

COUNT():統計指定列不爲NULL的記錄行數;

MAX():計算指定列的最大值,如果指定列是字符串類型,那麼使用字符串排序運算;

MIN():計算指定列的最小值,如果指定列是字符串類型,那麼使用字符串排序運算;

SUM():計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果爲0;

AVG():計算指定列的平均值,如果指定列類型不是數值類型,那麼計算結果爲0;

     -- 查詢學生的全部信息,以技能分降序排列    單條件排序

SELECT * FROM stu ORDER BY  stuSkillScore DESC;

-- 查詢學生的全部信息,以技能分降序排列,技能分相同的條件下,以綜合素質分降序排序   多條件排序

SELECT * FROM stu ORDER BY  stuSkillScore DESC ,stuQualityScore DESC ;

-- 查詢學生的人數 

SELECT COUNT(*) FROM stu;       -- 效率低

SELECT COUNT(stuId) FROM stu;   -- 效率高

-- 查詢學生的平均年齡,最大年齡,最小年齡

SELECT AVG(stuAge) 平均年齡 ,MAX(stuAge)  最大年齡 ,MIN(stuAge) 最小年齡 FROM stu;


 


 3.5.6 分組查詢

  * group by 字段

* 注意:在查詢的字段中,建議只寫分組字段和聚合函數

  * 分組之後的條件篩選:having

        * where 和 having 區別?

      where 在分組前對數據進行過濾

having 在分組後進行過濾

-- 查看男生和女生的人數                  單條件分組

SELECT stuSex,COUNT(*) FROM stu GROUP BY stuSex

-- 查看不同年齡段男生和女生的人數        多條件分組

SELECT stuAge , stuSex,COUNT(stuId) FROM stu GROUP BY stuAge , stuSex;

-- 查看2015JavaEE學科男生和女生的人數   條件過濾之後再進行分組

SELECT stuSex,COUNT(stuId) FROM stu WHERE stuNum LIKE '2015JavaEE%' GROUP BY stuSex; 

-- 學習人數大於3個學員集中在哪些年齡    分組之後進行過濾

SELECT stuAge,COUNT(stuId) AS num FROM stu GROUP BY stuAge HAVING num>3;


 3.5.7. 時間日期函數

     * 獲得當前日期+時間(date + time)函數:now()

* MySQL 獲得當前時間戳函數:current_timestamp()

    * 獲取指定時間的年份,月份 year() month() 

3.5.8 union all

 3.5.7多表查詢

* 笛卡爾積:

DROP TABLE xx;

DROP TABLE yy;

CREATE TABLE XX(  aa INT,  bb  INT);

CREATE TABLE YY(  cc INT,  dd  INT );

INSERT INTO XX VALUE(1,1),(2,2);

INSERT INTO YY VALUE(3,3),(4,4);

SELECT * FROM XX;

SELECT * FROM YY;


SELECT * FROM xx,yy; --SQL 92語法

SELECT * FROM xx JOIN yy; --SQL 99語法



* 內連接:等值連接 = 

DELETE FROM xx;

DELETE FROM yy;

INSERT INTO XX VALUE(1,1),(2,2);

INSERT INTO yy VALUE(1,1),(3,3);


SELECT * FROM xx JOIN yy ON xx.aa=yy.cc;

* 外連接

                * 左外連接

                * 右外連接

SELECT * FROM XX LEFT JOIN YY ON xx.aa=yy.cc;

SELECT * FROM XX RIGHT JOIN YY ON xx.aa=yy.cc;


     * 自連接

                查詢員工的姓名,職務以及上司的姓名.

SELECT e1.empName,e1.empSelf,e2.empName FROM emp e1 JOIN emp e2 ON e1.bossId=e2.empNum;

 


總結:我們開發的時候一般能夠按照需求正確的建立好各種表即可,更改表結構的機率不是很多.重點是對數據的操作.

     所以咱們今天的重點就是: 

       * 創建倉庫                                              

       * 創建表(正確的使用各種約束,正確的創建具有關聯關係的表)  

       * 表中數據增刪改查操作                                  

       * 多表查詢是今天的重難點                                


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