java程序員第十五課 -MySQL數據庫和SQL語言

課程回顧:JSP開發模式和案例

JSP開發模式

1.Servlet技術 – JSP技術 – JSP+JavaBean + Servlet + JSP +JavaBean
2.MVC設計模式
* M – Model 模型(JavaBean) – 封裝數據和處理數據
* V – view 視圖(JSP) – 顯示數據
* C – Contorller 控制(Servlet) – 控制請求
案例

1.準備環境 導入開發jar包
2.註冊的功能
3.登陸的功能
4.記住用戶名
MySQL數據庫和SQL語言

數據庫的概述

1.什麼是數據庫:數據倉庫。但是想訪問數據庫中的數據,必須使用SQL語句來訪問。文件的系統。
2.數據庫有什麼作用:存儲數據。開發任何的應用,都會產生數據。需要把數據保存到某個位置。
3.數據庫存儲的是實體與實體之間的關係
* 關係型的數據庫。
* 實體:例子:註冊的功能,需要使用user一個實體。
* 例子:用戶 商品 訂單 …

4.常見的數據庫
* 做Java開發,必須會使用兩個數據庫 Oracle和MySQL
* Oracle – Oracle(甲骨文) 大型的數據庫,並且收費的。
* MySQL – 應用最廣泛的數據庫。免費的開源的。現在已經被Oracle收購了,(從6.x版本開始收費了)
* SQLServer – 微軟的。中型的數據庫。
* DB2 – IBM開發數據庫,大型的數據庫。
* SyBASE – 退出了歷史的舞臺。PowerDigener軟件(數據庫的建摸的軟件,非常牛)
MySQL數據庫的安裝和卸載

1.MySQL數據庫的卸載:
* 先找到MySQL數據庫的安裝路徑。找到my.ini文件(MySQL配置文件)
* basedir=”C:/Program Files (x86)/MySQL/MySQL Server 5.5/” – 代表MySQL數據庫的安裝路徑
* datadir=”C:/ProgramData/MySQL/MySQL Server 5.5/Data/” – 代表MySQL數據庫數據存儲的路徑
* 可以使用控制面板卸載MySQL數據庫,需要找到上面兩個路徑下的文件,手動刪除。

2.可以進行安裝了
* 安裝路徑不要有中文和空格。(****
* 安裝步驟:看文檔。

3.進行測試:打開cmd的窗口,輸入命令:mysql -u root -p 回車 ,彈出輸入密碼 123
* 還有一種方式:mysql -uroot -p123
MySQL密碼重置

1.提供了一份文檔,按着文檔操作。就ok。

1.停止mysql服務:
services.msc 進入到服務界面
2.在cmd>輸入一個命令:
mysqld –skip-grant-tables (開啓一個mysql服務,不需要進行認證.)
3.新打開一個cmd窗口
mysql -u root -p 不需要輸入密碼.就可以進入.
4.輸入命令 show databases;查看數據庫,輸入命令 use mysql;使用mysql數據庫。
5.修改密碼的語句:
update user set password=password(‘root’) WHERE user=’root’;
6.將兩個窗口都關閉.
7.任務管理器中結束(mysqld)進程.
8.重啓mysql服務
MySQL數據庫的概念

  • 總結:安裝了數據庫,數據庫的服務器。進入到服務器中,數據庫服務器中包含多個數據庫(一個應用對應一個數據庫),進入到數據庫中。數據庫中包含多個表結構,表結構包含多個列名(字段),並且表結構還存儲數據。字段對應的Java中的JavaBean的屬性。一個實體對象對應的一行數據。

  • 看圖。
    SQL語句(重點)

SQL語言概述

1.SQL非過程性的語言
* 過程性的語言:該條語句的執行,需要依賴上一條或者上幾條語句。
* 非過程性的語言:該條語句的執行,會有一個結果。

2.每個數據庫的生廠商會提供數據庫的方言。
* 例如:Oracle 提供了PL/SQL

3.SQL語言的分類
* DDL 數據的定義語言
* 創建數據庫、創建表結構、創建視圖、索引
* create alter drop

* DML       數據的操作語言
    * 添加數據      修改數據    刪除數據
    * insert        update  delete

* DCL       數據的控制語言
    * 寫if else 創建存儲過程

* DQL       數據的查詢語言
    * 查詢數據      select

數據庫的SQL語句(CURD)

創建數據庫

1.語法:
* 基本語法(使用):create database 數據庫名稱;
* 複雜語法:create database 數據庫名稱 character set ‘編碼’ collate ‘校對規則’;

2.校對規則:決定數據庫的屬性。使用默認的校對規則。查看校對規則,需要查看MySQL參考手冊,第10章。

3.練習:
創建一個名稱爲mydb1的數據庫。
* create database mydb1;
創建一個使用utf8字符集的mydb2數據庫。
* create database mydb2 character set ‘utf8’;
創建一個使用utf8字符集,並帶校對規則的mydb3數據庫
* create database mydb3 character set ‘utf8’ collate ‘utf8_bin’;
查看數據

1.查詢所有的數據庫 – show databases;
2.查詢數據庫的定義信息 – show create database 數據庫名稱;
3.切換數據庫(重要) – use 數據庫名稱;
4.查詢當前正在使用的數據庫 – select database();
刪除數據庫

1.刪除數據庫 – drop database 數據庫名稱;
2.練習
刪除前面創建的mydb1數據庫
drop database mydb1;
修改數據庫

1.語法:alter database 數據庫名稱 character set ‘gbk’ collate ‘規則’;
數據庫的表結構(CURD)

1.語法:
create table 表名(
字段1 字段類型(長度) 約束,
字段2 字段類型(長度) 約束,
字段3 字段類型(長度) 約束
);

2.字段的類型
* 字符串型(重點)(varchar和char區別你們記住的)
* VARCHAR – 數據的長度是可變的。例子:name 的類型varchar(8),存入數據 hello,存完之後該字段的長度自動變成5了。
* CHAR – 數據的長度是不可變的。例子:name的類型char(8),存入數據hello,之後長度沒變。剩3個長度使用空格進行補全。

* 大數據類型
    * BLOB      -- 字節(電影 mp3)
    * TEXT      -- 字符(文本的內容)

* 數值型(重點)
    TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

* 邏輯性 
    * BIT   值1和0
    * 在Java中是true或者false

* 日期型(重點)
    * DATE          -- 只包含日期(年月日)
    * TIME          -- 只包含時分秒(時分秒)
    * DATETIME      -- 既有日期又有時分秒
    * TIMESTAMP     -- 既有日期又有時分秒
        * DATETIME和TIMESTAMP區別:如果使用DATETIME聲明字段,傳入了null值,該字段的值就爲null。如果使用TIMESTAMP聲明字段,傳入null值,它會默認查找本地的系統時間作爲值,存入該字段。

3.創建表的練習
create database day15;
use day15;
create table employee(
id int,
name varchar(50),
gender char(5),
birthday date,
entry_data date,
job varchar(50),
salary double,
resume text
);

+————+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————+————-+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| gender | char(5) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| entry_data | date | YES | | NULL | |
| job | varchar(50) | YES | | NULL | |
| salary | double | YES | | NULL | |
| resume | text | YES | | NULL | |
+————+————-+——+—–+———+——-+
查看數據庫表結構

1.desc 表名; – 查看錶的詳細信息。
2.show tables; – 顯示該數據庫中所有的表
3.show create table 表名; – 查看錶的信息
刪除表

1.drop table 表名; – 刪除表結構
修改表

1.添加列
* alter table 表名 add 字段名稱 字段類型(長度) 約束;
2.刪除列
* alter table 表名 drop 字段名稱;
3.修改列(不是修改列的名稱,修改列的類型、長度和約束)
* alter table 表名 modify 字段名稱 字段類型(長度) 約束;
4.修改列的名稱
* alter table 表名 change 舊字段名稱 新名稱 字段類型(長度) 約束;
5.修改表名
* rename table 表名 to 新表名;

6.練習
在上面員工表的基本上增加一個image列。
alter table employee add image varchar(50);
修改job列,使其長度爲60。
alter table employee modify job varchar(60);
刪除gender列。
alter table employee drop gender;
表名改爲user。
rename table employee to user;
修改表的字符集爲utf8
alter table 表名 character set utf8;
列名name修改爲username
alter table user change name username varchar(60);
數據庫的數據(CURD)

插入數據(insert)

1.語法:
* insert into 表名 (字段1,字段2,字段3) values (值1,值2,值3); – 有幾個字段,插入幾個值
* insert into 表名 values (值1,值2,值3,值4); – 默認插入所有的數據
2.注意事項:
* 插入的數據的類型(字符串)與字段的類型是相同的(varchar)。
* 數據的大小在列的規定的範圍內。
* 數據的位置與字段的位置必須是相同的。
* 字符串和日期類型的數據需要使用單引號包含。

3.在user的表中添加數據
insert into user values (1,’meimei’,’1985-11-11’,’1987-2-2’,’HR’,5000,’ss’,’jpg’);
insert into user values (2,’小鳳’,’1998-12-11’,’2013-2-2’,’BOSS’,15000,’ss’,’jpg’);
insert into user values (3,’大鵬’,’1991-02-10’,’2015-05-20’,’BOSS’,25000,’ss’,’jpg’);
insert into user values (4,’小蒼’,’1987-01-07’,’2000-01-20’,’yanyuan’,20000,’ss’,’jpg’);
insert into user values (5,’如花’,’1987-11-17’,’2001-01-20’,’yangyuan’,20000,’ss’,’jpg’);
insert into user values (6,’芙蓉’,’1985-03-15’,’2001-01-20’,’BOSS’,20000,’ss’,’jpg’);
插入中文數據亂碼

1.問題的產生:黑窗口的默認的編碼是gbk,安裝的MySQL的數據庫編碼是utf8,發送中文就會產生亂碼。
2.解決問題:
* 因爲MySQL服務器內部進行了編碼的轉換,不會亂碼。解決方案:修改MySQL客戶端的編碼爲gbk。

3.解決問題的步驟
* 先關閉MySQL的服務
* 找到my.ini的配置文件,修改客戶端的編碼爲gbk.
[client]
port=3306
[mysql]
default-character-set=gbk
* 重啓MySQL服務器,測試添加中文的數據了。
修改數據的語句(update)

1.語法:update 表名 set 字段1=值,字段2=值 where 條件;
2.注意:如果沒有where子句,默認更新所有的行。

3.練習
將所有員工薪水修改爲5000元。
update user set salary = 5000;
將姓名爲’大鵬’的員工薪水修改爲3000元。
update user set salary = 3000 where username = ‘大鵬’;
將姓名爲’小鳳’的員工薪水修改爲4000元,job改爲ccc。
update user set salary = 4000 , job = ‘ccc’ where username = ‘小鳳’;
將小蒼的薪水在原有基礎上增加1000元。
update user set salary = salary + 1000 where username = ‘小蒼’;
刪除數據(delete)

1.語法:delete from 表名 where 條件;
2.如果沒有where條件子句,默認刪除所有的數據。
3.還可以使用truncate 表名也可以刪除數據(刪除全部的數據) – truncate 表名

4.delete from 表名 和 truncate 表名的區別:
* truncate 表名 先默認把該表結構直接刪除掉,然後默默的創建一個空的表。(表結構沒變)(不用)
* delete from 表名; 一行一行的刪除。(使用該種方式,該種方式支持事物)

5.事物:邏輯上的一組操作,在同一個事物中操作要麼全都成功,要麼全部失敗。
* 例子:轉賬的例子。大鵬給美美轉1000元,操作:扣除大鵬1000元錢,給美美加上1000元。大鵬和美美的錢的總數是不變。

6.練習
刪除表中名稱爲’大鵬’的記錄。
delete from user where username = ‘大鵬’;
刪除表中所有記錄。
delete from user;
使用truncate刪除表中記錄。
truncate user;
查詢數據 select(重點)

1.語法:
* select * from 表名; – 查詢所有的列的所有的數據
* select 字段1,字段2 from 表名; – 查詢指定的列的所有的數據
* 通過關鍵字DISTINCT去掉重複的數據

2.查詢的測試
create table stu(
id int,
name varchar(20),
math int,
english int,
chinese int
);

insert into stu values (1,'美美',30,90,50);
insert into stu values (2,'小鳳',90,95,98);
insert into stu values (3,'如花',45,90,65);
insert into stu values (4,'熊大',76,89,55);
insert into stu values (5,'熊二',15,18,23);
insert into stu values (6,'光頭強',11,99,58);

查詢表中所有學生的信息。
    select * from stu;
查詢表中所有學生的姓名和對應的英語成績。
    select name,english from stu;
過濾表中重複數據。
    select distinct english from stu;

select語句列支持運算和使用別名

1.在select語句中可以使用運算對查詢的列。
2.還可以使用別名 as 別名

3.練習
在所有學生分數上加10分特長分。
* select name,math+10,english+10,chinese+10 from stu;
* select name,(math+10) as m,(english+10) as e,(chinese+10) as c from stu;
統計每個學生的總分。
* select name,(math+english+chinese) from stu;
使用別名表示學生分數。
* select name,(math+english+chinese) as total from stu;
* select name,(math+english+chinese) total2 from stu;

4.別名的用法(一般都會多表的查詢)(別名的as的關鍵字可以省略不寫 )
* select p.name,c.xxx,p.xxx from person p,class c;
使用where子句條件過濾

1.使用where子句進行條件的過濾。查詢的數據不是默認查詢所有了,根據查詢的條件進行查詢。
2.練習
查詢姓名爲小鳳的學生成績
select * from stu where name = ‘小鳳’;
查詢英語成績大於90分的同學
select name,english from stu where english > 90;
查詢總分大於200分的所有同學
select name from stu where (math+english+chinese) > 200;
where子句後可以使用的符號

1.符號:> < <= >= = <> 大於、小於、大於(小於)等於、不等於
2.in – 代表範圍。 語法:in (值1,值2,值3);
* select * from stu where name = ‘小鳳’; – 一個結果
* select * from stu where math in (90,20,30,76); – 查詢結果是多個
3.like – 模糊查詢。
* 語法:
* like ‘張_’; 查詢的結果:張飛 張三 張X
* like ‘張%’; 查詢的結果:以張開頭的。張三 張翼德 張技術的見覅束帶結髮阿薩德
* like ‘%張’; 查詢的結果:什麼什麼張。法計算的房間張,翼德張。
* like ‘%張%’; 查詢的結果:只要包含張就行。張三 三張 三張三

4.邏輯運算符(重要)
* 與 and
* 或 or
* 非 not

5.使用MySQL的方言 between … and
* 查詢結果在兩個之間的結果。包含開始和結尾。
* select name,english from stu where english between 80 and 90;

5.練習
查詢英語分數在 80-90之間的同學。
select name,english from stu where english >= 80 and english < 90;
select name,english from stu where english between 80 and 90;
查詢數學分數爲89,90,91的同學。
select name,math from stu where math in (89,90,91);
查詢所有姓熊的學生成績。
select * from stu where name like ‘熊%’;
查詢數學分>80,語文分>80的同學。
select * from stu where math > 80 and chinese >80;
select * from stu where math > 80 or chinese >80;
使用order by對結果進行排序

1.語法:order by 字段名稱 asc(升序)/desc(降序);
2.如果沒有指定,默認是升序。
3.order by 放在語句的末尾。

4.練習
對數學成績排序後輸出。
* select * from stu order by math asc;
* select * from stu where math > 40 order by math desc;

對總分排序按從高到低的順序輸出
    * select name,(math+english+chinese) as total from stu order by total desc;
    * select name,(math+english+chinese) as total from stu where total > 150 order by total desc; 錯誤的

對學生成績按照英語進行降序排序,英語相同學員按照數學降序
    * select name,english,math from stu order by english desc,math desc;

對姓熊的學生成績排序輸出
    * select name,english from stu where name like '熊%' order by english desc; 

聚集函數

1.聚集函數的作用:操作列。通過函數求列的總數量,列的總和,列的平均值,列的最大值和最小值。
2.聚集函數
* count() – 計數
* sum() – 求和
* avg() – 平均數
* max() – 最大值
* min() – 最小值

3.count 計數(完成分頁的時候有用的)
* 練習
統計一個班級共有多少學生?
select count(*) from stu;

    統計數學成績大於90的學生有多少個?
        select count(*) from stu where math > 50;               

    統計總分大於220的人數有多少?
        select count(*) from stu where (math+english+chinese) > 200;

4.sum 求和
* 練習
統計一個班級數學總成績?
select sum(math) from stu;
統計一個班級語文、英語、數學各科的總成績
select sum(math),sum(english),sum(chinese) from stu;
統計一個班級語文、英語、數學的成績總和
select sum(ifnull(math,0)+english+chinese) from stu;
select sum(math)+sum(english)+sum(chinese) from stu;
* 修改的語句,把如花的數學的成績修改成null
* update stu set math = null where id = 3;
統計一個班級語文成績平均分
* select sum(chinese)/count(chinese) from stu;

* 可以使用ifnull(xxx,0) 把null變成0

5.avg 平均值
* 平均值:
求一個班級數學平均分?
select avg(math) from stu;
select avg(chinese) from stu;
求一個班級總分平均分
select avg(ifnull(math,0)+english+chinese) from stu;

6.max和min 最大值和最小值
* 求班級最高分和最低分(數值範圍在統計中特別有用)
select max(ifnull(math,0)+english+chinese) from stu;
select min(ifnull(math,0)+english+chinese) from stu;

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