黑馬就業班第四天-資料庫

wj541350發表於2016-11-22

mysql資料庫

1、資料庫的簡介
 就是一個檔案系統,使用標準sql對資料庫進行操作(crud)

    (2)常見的資料庫
    * oracle:是oracle公司產品,是大型的收費的資料庫
    * db2:是ibm公司的產品,是大型的收費的資料庫
    * SQLServer:是微軟公司產品,是中型的資料庫
    * MySQL : 在oracle收購之後6.x版本開始收費,之前的版本是免費的。
    * SQLite:是小型的嵌入式資料庫,應用在客戶端開發中,比如安卓

    (3)關聯式資料庫:儲存的是實體之間的關係
    * 比如有購物網站,有使用者,訂單,商品,稱為實體
    * 使用者、訂單和商品之間的關係稱為實體之間的關係
    * 使用er圖表示實體之間的關係
    ** 實體使用矩形、在實體上面屬性使用橢圓,之間的關係使用菱形

2、mysql的解除安裝
    第一步,找到mysql的安裝路徑,找到一個檔案my.ini檔案找到兩個路徑,複製出來
    basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"
    datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

    第二步,開啟控制皮膚,找到安裝的mysql資料庫,進行解除安裝

    第三步,找到第一步複製出來的兩個路徑,把這兩個路徑的裡面的所有的檔案都刪除

    第四步,開啟登錄檔 regedit,搜尋mysql,找到了都刪除

    第五步,重新啟動系統

3、mysql伺服器的儲存結構
    (1)mysql伺服器
    * 伺服器:從硬體上,伺服器就是一臺電腦;從軟體上,在電腦上安裝了伺服器軟體。
    * mysql伺服器:在一臺電腦上,安裝了mysql資料庫,這臺電腦稱為mysql伺服器。
    (2)mysql伺服器的儲存結構
    * 有多個資料庫,在每個資料庫裡面有多個資料庫表,在每個表裡面有多條記錄

    * 學習重點:對資料庫、資料庫表、表中的記錄的操作(crud操作)

4、sql語言簡介
    (1)資料庫是檔案系統,使用標準sql對資料庫進行操作
    * 標準sql,在mysql裡面使用語句,在oracle、db2都可以使用這個語句

    (2)什麼是sql
    * Structured Query Language, 結構化查詢語言,對資料庫進行操作
    * sql非過程性語言,不需要依賴於其他的條件就可以執行
    ** 比如 在java裡面
    *** if(a > 5) {
        System.out.....
        }

    (3)sql的分類
    第一類:DDL (資料定義語言)
        * 建立資料庫,建立資料庫表
        * 常用的語句 create
    第二類:DML  (資料操縱語言)
        * 對錶中的記錄進行增加 修改 刪除操作
        * 常用的語句 insert  update  delete
    第三類:DCL (資料控制語言)
        * 資料庫的程式設計的語言
    第四類:DQL (資料查詢語言)
        * 對錶中的進行查詢的操作
        * 常用的語句 select
    
    * 學習的主要內容:使用sql語言對資料庫、資料庫表、表中的記錄進行增刪改查(crud)操作

5、使用sql對資料庫操作
    (1)連線資料庫
    * 開啟cmd視窗,使用命令,連線mysql資料庫
    * 命令: mysql -u root -p 密碼

    (2)建立資料庫
    * 語句: create database 資料庫的名稱;
    ** 示例:create database testdb1;

    (3)檢視所有的資料庫
    * 語句:show databases;

    (4)刪除資料庫
    * 語句:drop database 要刪除的資料庫的名稱;
    ** 示例: drop database testdb1;

    (5)切換資料庫
    * 如果想要建立一個資料庫表,這個表要在一個資料庫裡面,所以需要切換到資料庫
    * 語句:use 要切換的資料庫的名稱;
    ** 示例:use testdb2;

6、使用sql對資料庫表操作
    (1)建立資料庫表
    * 語句 create table 表名稱 (
        欄位 型別,
        欄位 型別
          )
    
    * 建立表 user,欄位  id  username  password  sex
    create table user (
        id int,
        username varchar(40),
        password varchar(40),
        sex varchar(30)
    )

    (2)mysql的資料型別
    字串型
    VARCHAR、CHAR
    * 當建立表時候,使用字串型別,name varchar(40),指定資料的長度
    * varchar和char的區別
    ** varchar的長度是可變的,比如 name varchar(5),存值 a ,直接把a存進去
    ** char的長度是固定的,比如 name char(5),存值 b,把b存進去,後面加很多空格

    大資料型別
    BLOB、TEXT
    * 使用這個型別可以儲存檔案,一般開發,不會直接把檔案存到資料庫裡面,存檔案的路徑

    數值型
    TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
    * 對應java裡面
    byte       short    int  long    float  double

    邏輯性
    BIT
    * 類似java裡面的boolean

    日期型
    DATE:用於表示日期 1945-08-15
    TIME:用於表示時間 19:10:40
    
    下面的兩個型別可以表示日期和時間
    DATETIME:手動新增時間到資料表裡面
    TIMESTAMP:自動把時間新增到表裡面

    (3)檢視錶結構
    * 語句 desc 表名稱;
 

    (4)mysql的約束有三種
    第一種,非空約束 not null
        * 表示資料不能為空

    第二種,唯一性約束 unique
        * 表中的記錄不能重複的

    第三種,主鍵約束 primary key
        * 表示非空,唯一性
        * 自動增長 auto_increment

    (5)建立帶約束的表
    create table person (
        id int primary key ,
        username varchar(40) not null,
        sex varchar(20)
    )
    
 

    (6)刪除表
    * 語句 drop table 要刪除表的名稱;

    (7)檢視當前的資料庫裡面有哪些表
    * 語句 show tables;

7、使用sql對錶中的記錄進行操作(增刪改查操作)
    (1)向表裡面新增記錄 insert
    * 語句 insert into 要新增的表名稱 values(要新增的值);
    * 注意:當新增的欄位的資料型別是int型別,直接寫值
    如果新增的欄位的型別是varchar型別和日期型別,使用單引號把值包起來
    
    * 練習:向user表裡面新增記錄
    insert into user values(1,'aaa','123456','nan');

    * 自動增長的效果
    ** 建立一個表
    create table stu (
        id int primary key auto_increment,
        sname varchar(40)
    )
    insert into stu values(null,'aaa');


    (2)修改表裡面的記錄 update
    * 語句 update 表名稱 set 要修改的欄位的名稱1=修改的值1,要修改的欄位的名稱2=修改的值2 where 條件

    * 練習:修改user表裡面id=1的username修改為QQQ,修改password為999
    update user set username='QQQ',password='999' where id=1;

    (3)刪除表裡面的記錄 delete
    * 語句 delete from 表名稱 where 條件
    
    * 練習:刪除user表裡面id=1的記錄
    delete from user where id=1;
    ** 不新增where條件,把表裡面的所有的記錄都刪除
    

    (4)查詢表中的記錄 select
    * 語句 select 要查詢的欄位的名稱 (*) from 表名稱 where 條件

    * create table user (
        id int,
        username varchar(40),
        chinese int,
        english int
    )

    * insert into user values(1,'lucy',100,30);
    insert into user values(2,'mary',60,80);
    insert into user values(3,'jack',90,20);

    * 練習一:查詢user表裡面的所有的資料
    select * from user;

    * 練習二:查詢user表裡面使用者名稱和語文成績
    select username,chinese from user;

    * 練習三:查詢user表裡面id=2的資料
    select * from user where id=2;

    (4)別名
    * as 別名
    select username as u1,chinese as c1 from user;

    (5)distinct,去除表裡面重復記錄
    * 語句 select distinct * from 表名;

    (6)where子句
    第一,運算子 < > >= <=
    * 練習:查詢user表裡面語文成績大於60的所有的人員
    select * from user where chinese > 60;

    第二,in:在範圍內
    * 練習:查詢user表裡面英語成績是80、90的人員的資訊
    select * from user where english in (80,90);

    第三,and:在where裡面如果有多個條件,表示多個條件同時滿足
    * 練習:查詢user表裡面語文成績是100,並且英語成績是30的人員的資訊
    select * from user where chinese=100 and english=30;

    第四,得到區間範圍的值
    * 練習:查詢user表裡面語文成績在70-100之間的值
    寫法一,select * from user where chinese >=70 and chinese <=100;
    寫法二,select * from user where chinese between 70 and 100;

    第五,like:模糊查詢
    * 練習:查詢user表裡面username包含a的人員資訊
    select * from user where username like '%a%';

    (7)檢視當前的執行的資料庫
    select database();

    (8)對錶中查詢的記錄排序 order by
    * order by寫在select語句的最後
    第一,升序 order by 要排序欄位 asc(asc可以省略,預設的情況下就是升序)
    * 練習:對user表裡面查詢的資料,根據語文成績進行升序排列
    select * from user order by chinese asc;

    第二,降序 order by 要排序欄位 desc
    * 練習:對user表裡面的英語成績進行降序排列
    select * from user order by english desc;


8、聚集函式
    (1)使用提供一些函式,直接實現某些功能
    (2)常用的聚集函式
    第一,count()函式
    * 根據查詢的結果,統計記錄數
    * 寫法 select count(*) from ...where....

    * 練習一;查詢user表裡面有多少條記錄
    select count(*) from user;

    * 練習二:查詢user表裡面語文成績大於60的人員有多少
    select count(*) from user where chinese>60;
    
    第二,sum()函式
    * 求和的函式
    * 寫法 select sum(要進行求和欄位) from ...where....

    * 練習一:得到user表裡面的語文的總成績
    select sum(chinese) from user;

    * 練習二:得到user表裡面語文總成績,英語的總成績
    select sum(chinese),sum(english) from user;

    * 練習三:得到user表裡面語文成績的平均分(總的成績/總的人數)
     select sum(chinese)/count(*) from user;

    第三,avg()函式
    * 計算的平均數的函式
    * 寫法 select avg(要計算平均數的欄位名稱) from ...

    * 練習:得到user表裡面語文成績的平均分
    select avg(chinese) from user;

    第四,max()函式:計算最大值
    * 寫法 select max(欄位) from...

    第五,min()函式:計算最小值
    * 寫法 select min(欄位) from...

    * 練習:得到user表裡面語文成績的最高分數,英語的成績最低分數
    select max(chinese),min(english) from user;

9、分組操作
    分組使用 group by 根據分組的欄位
    在分組的基礎之上再進行條件的判斷 having,後面可以寫聚集函式
    (1)舉例說明
    * 建立表 orders
    create table orders (
        id int,
        name varchar(40),
        price int
    )

    insert into orders values(1,'電視',2000)
    insert into orders values(2,'電視',2000);
    insert into orders values(3,'蘋果',10);
    insert into orders values(4,'手機',500);
    insert into orders values(5,'手機',500);
    insert into orders values(6,'滑鼠',33);
    insert into orders values(7,'滑鼠',33);

    (2)練習一:統計orders表裡面每類商品的總的價格
    select name,sum(price) from orders group by name;

    (3)練習二:對商品進行分類,得到每類商品的總價格大於66的商品
    select name,sum(price) from orders where sum(price)>66 group by name;
    = 上面的語句在邏輯上沒有問題,在語法上,where裡面不能寫聚集函式,報錯
    正確的寫法:
    select name,sum(price) from orders group by price having sum(price)>66;

10、mysql的視覺化工具使用
    (1)使用工具建立資料庫,建立表,向表新增記錄,刪除表中的記錄
    
11、mysql的關鍵字limit
    (1)limit關鍵字查詢表中的某幾條記錄
    (2)limit關鍵字不是標準sql的關鍵字,只能在mysql資料庫裡面使用,實現分頁的功能
    * 在oracle裡面特有關鍵字 rownum
    * 在sqlserver裡面特有關鍵字 top

    (3)使用limit查詢前幾條記錄
    * 寫法: limit 前幾條記錄  limit 3
    * 練習:查詢user表裡面前三條記錄
    select * from user limit 3;
    select * from user limit 0,3;

    (4)使用limit查詢第幾條到第幾條記錄
    * 寫法: limit 第一個引數,第二個引數
    ** 第一個引數開始的記錄數的位置,從0開始的
    ** 第二個引數從開始的位置向後獲取幾條記錄
    * 練習:查詢user表裡面第二條到第四條記錄
    select * from user limit 1,3;

12、重置mysql的root密碼
    (1)知道密碼,修改密碼
    第一,連線mysql資料庫
    第二,切換資料庫 mysql  use mysql
    第三,進行密碼的修改 update user set password=password('要修改成的密碼的值') where user='root';
    第四,重新啟動mysql服務

    (2)忘記密碼,重置密碼
    第一,把mysql的服務關閉
    第二,開啟cmd視窗,輸入命令 mysqld --skip-grant-tables(不要加分號)
    第三,再開啟cmd視窗,連線資料庫,不需要輸入密碼  mysql -u root
    第四,切換資料庫 mysql  use mysql
    第五,進行密碼的修改 update user set password=password('要修改成的密碼的值') where user='root';
    第六,把兩個cmd視窗都關閉,開啟工作管理員,找到mysqld程式,結束
    第七,啟動mysql服務


【多表操作:】
inner join;
left join;
right join;

select ifnull(chinese,0)

相關文章