JavaWeb - 數(shù)據(jù)庫,MySQL安裝卸載,MySQL服務(wù)器存儲(chǔ)結(jié)構(gòu),sql語言,使用sql操作數(shù)據(jù)庫/數(shù)據(jù)庫表/表中記錄,聚集函數(shù),分組操作,limit關(guān)鍵字,重置root密碼

轉(zhuǎn)載請(qǐng)注明出處:http://www.itdecent.cn/p/664ddc66858f

1、數(shù)據(jù)庫的簡介

(1)什么是數(shù)據(jù)庫,就是一個(gè)文件系統(tǒng),使用標(biāo)準(zhǔn)sql對(duì)數(shù)據(jù)庫進(jìn)行操作(crud)

(2)常見的數(shù)據(jù)庫
* oracle:是oracle公司產(chǎn)品,是大型的收費(fèi)的數(shù)據(jù)庫
* db2:是ibm公司的產(chǎn)品,是大型的收費(fèi)的數(shù)據(jù)庫
* SQLServer:是微軟公司產(chǎn)品,是中型的數(shù)據(jù)庫
* MySQL : 在oracle收購之后6.x版本開始收費(fèi),之前的版本是免費(fèi)的。
* SQLite:是小型的嵌入式數(shù)據(jù)庫,應(yīng)用在客戶端開發(fā)中,比如安卓

(3)關(guān)系數(shù)據(jù)庫:存儲(chǔ)的是實(shí)體之間的關(guān)系
* 比如有購物網(wǎng)站,有用戶,訂單,商品,稱為實(shí)體
* 用戶、訂單和商品之間的關(guān)系稱為實(shí)體之間的關(guān)系
* 使用er圖表示實(shí)體之間的關(guān)系
** 實(shí)體使用矩形、在實(shí)體上面屬性使用橢圓,之間的關(guān)系使用菱形

2、mysql的安裝和卸載

(1)安裝mysql 5.x版本

(2)mysql的安裝步驟
具體安裝步驟不在此贅述,可參考:

mysql的安裝步驟

(3)mysql的卸載
第一步,找到mysql的安裝路徑,找到一個(gè)文件my.ini文件找到兩個(gè)路徑,復(fù)制出來
basedir="C:/Program Files (x86)/MySQL/MySQL Server 5.5/"
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

第二步,打開控制面板,找到安裝的mysql數(shù)據(jù)庫,進(jìn)行卸載

第三步,找到第一步復(fù)制出來的兩個(gè)路徑,把這兩個(gè)路徑的里面的所有的文件都刪除

第四步,打開注冊(cè)表 regedit,搜索mysql,找到了都刪除

第五步,重新啟動(dòng)系統(tǒng)

3、mysql服務(wù)器的存儲(chǔ)結(jié)構(gòu)

(1)mysql服務(wù)器
* 服務(wù)器:從硬件上,服務(wù)器就是一臺(tái)電腦;從軟件上,在電腦上安裝了服務(wù)器軟件。
* mysql服務(wù)器:在一臺(tái)電腦上,安裝了mysql數(shù)據(jù)庫,這臺(tái)電腦稱為mysql服務(wù)器。
(2)mysql服務(wù)器的存儲(chǔ)結(jié)構(gòu)
* 有多個(gè)數(shù)據(jù)庫,在每個(gè)數(shù)據(jù)庫里面有多個(gè)數(shù)據(jù)庫表,在每個(gè)表里面有多條記錄

* 學(xué)習(xí)重點(diǎn):對(duì)數(shù)據(jù)庫、數(shù)據(jù)庫表、表中的記錄的操作(crud操作)

4、sql語言簡介

(1)數(shù)據(jù)庫是文件系統(tǒng),使用標(biāo)準(zhǔn)sql對(duì)數(shù)據(jù)庫進(jìn)行操作
* 標(biāo)準(zhǔn)sql,在mysql里面使用語句,在oracle、db2都可以使用這個(gè)語句

(2)什么是sql
* Structured Query Language, 結(jié)構(gòu)化查詢語言,對(duì)數(shù)據(jù)庫進(jìn)行操作
* sql非過程性語言,不需要依賴于其他的條件就可以運(yùn)行
** 比如 在java里面 
*** if(a > 5) {
    System.out.....
    }

(3)sql的分類
第一類:DDL (數(shù)據(jù)定義語言)
    * 創(chuàng)建數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫表
    * 常用的語句 create
第二類:DML  (數(shù)據(jù)操縱語言)
    * 對(duì)表中的記錄進(jìn)行增加 修改 刪除操作
    * 常用的語句 insert  update  delete
第三類:DCL (數(shù)據(jù)控制語言)
    * 數(shù)據(jù)庫的編程的語言
第四類:DQL (數(shù)據(jù)查詢語言)
    * 對(duì)表中的記錄進(jìn)行查詢的操作
    * 常用的語句 select

* 學(xué)習(xí)的主要內(nèi)容:使用sql語言對(duì)數(shù)據(jù)庫、數(shù)據(jù)庫表、表中的記錄進(jìn)行增刪改查(crud)操作

5、使用sql對(duì)數(shù)據(jù)庫操作

(1)連接數(shù)據(jù)庫
* 打開cmd窗口,使用命令,連接mysql數(shù)據(jù)庫
* 命令: mysql -u root -p 密碼

(2)創(chuàng)建數(shù)據(jù)庫
* 語句: create database 數(shù)據(jù)庫的名稱;
** 示例:create database testdb1;

(3)查看所有的數(shù)據(jù)庫
* 語句:show databases;

(4)刪除數(shù)據(jù)庫
* 語句:drop database 要?jiǎng)h除的數(shù)據(jù)庫的名稱;
** 示例: drop database testdb1;

(5)切換數(shù)據(jù)庫
* 如果想要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫表,這個(gè)表要在一個(gè)數(shù)據(jù)庫里面,所以需要切換到數(shù)據(jù)庫
* 語句:use 要切換的數(shù)據(jù)庫的名稱;
** 示例:use testdb2;

6、使用sql對(duì)數(shù)據(jù)庫表操作

(1)創(chuàng)建數(shù)據(jù)庫表
* 語句 create table 表名稱 (
    字段 類型,
    字段 類型
      )

* 創(chuàng)建表 user,字段  id  username  password  sex
create table user (
    id int,
    username varchar(40),
    password varchar(40),
    sex varchar(30)
)

(2)mysql的數(shù)據(jù)類型
字符串型 
VARCHAR、CHAR
* 當(dāng)創(chuàng)建表時(shí)候,使用字符串類型,name varchar(40),指定數(shù)據(jù)的長度
* varchar和char的區(qū)別
** varchar的長度是可變的,比如 name varchar(5),存值 a ,直接把a(bǔ)存進(jìn)去
** char的長度是固定的,比如 name char(5),存值 b,把b存進(jìn)去,后面加很多空格

大數(shù)據(jù)類型
BLOB、TEXT
* 使用這個(gè)類型可以存儲(chǔ)文件,一般開發(fā),不會(huì)直接把文件存到數(shù)據(jù)庫里面,存文件的路徑

數(shù)值型
TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
* 對(duì)應(yīng)java里面
byte       short    int  long    float  double

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

日期型
DATE:用于表示日期 1945-08-15
TIME:用于表示時(shí)間 19:10:40

下面的兩個(gè)類型可以表示日期和時(shí)間
DATETIME:手動(dòng)添加時(shí)間到數(shù)據(jù)表里面
TIMESTAMP:自動(dòng)把時(shí)間添加到表里面

(3)查看表結(jié)構(gòu)
* 語句 desc 表名稱;
這里寫圖片描述
(4)mysql的約束有三種
第一種,非空約束 not null
    * 表示數(shù)據(jù)不能為空

第二種,唯一性約束 unique
    * 表中的記錄不能重復(fù)的

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

(5)創(chuàng)建帶約束的表
create table person (
    id int primary key ,
    username varchar(40) not null,
    sex varchar(20)
)
這里寫圖片描述
(6)刪除表
* 語句 drop table 要?jiǎng)h除表的名稱;

(7)查看當(dāng)前的數(shù)據(jù)庫里面有哪些表
* 語句 show tables;
    
      (8)添加字段:alter table 表名 add column 字段名稱 字段類型;
             修改字段名稱:alter table 表名 change 舊字段名稱 新字段名稱 字段類型;
             刪除字段:alter table 表名 drop column 字段名稱;

7、使用sql對(duì)表中的記錄進(jìn)行操作(增刪改查操作)

(1)向表里面添加記錄 insert
* 語句 insert into 要添加的表名稱 values(要添加的值);
* 注意:當(dāng)添加的字段的數(shù)據(jù)類型是int類型,直接寫值
如果添加的字段的類型是varchar類型和日期類型,使用單引號(hào)把值包起來

* 練習(xí):向user表里面添加記錄
insert into user values(1,'aaa','123456','nan');
      insert into user(id) value(5);
* 自動(dòng)增長的效果
** 創(chuàng)建一個(gè)表
create table stu (
    id int primary key atuo_increment,
    sname varchar(40)
)
insert into stu values(null,'aaa');


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

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

(3)刪除表里面的記錄 delete
* 語句 delete from 表名稱 where 條件

* 練習(xí):刪除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);

* 練習(xí)一:查詢user表里面的所有的數(shù)據(jù)
select * from user;

* 練習(xí)二:查詢user表里面用戶名和語文成績
select username,chinese from user;

* 練習(xí)三:查詢user表里面id=2的數(shù)據(jù)
select * from user where id=2;

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

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

(6)where子句
第一,運(yùn)算符 < > >= <=
* 練習(xí):查詢user表里面語文成績大于60的所有的人員
select * from user where chinese > 60;

第二,in:在范圍內(nèi)
* 練習(xí):查詢user表里面英語成績是80、90的人員的信息
select * from user where english in (80,90);

第三,and:在where里面如果有多個(gè)條件,表示多個(gè)條件同時(shí)滿足
* 練習(xí):查詢user表里面語文成績是100,并且英語成績是30的人員的信息
select * from user where chinese=100 and english=30;

第四,得到區(qū)間范圍的值
* 練習(xí):查詢user表里面語文成績?cè)?0-100之間的值
寫法一,select * from user where chinese >=70 and chinese <=100;
寫法二,select * from user where chinese between 70 and 100;

第五,like:模糊查詢
* 練習(xí):查詢user表里面username包含a的人員信息
select * from user where username like '%a%';

(7)查看當(dāng)前的運(yùn)行的數(shù)據(jù)庫
select database();

(8)對(duì)表中查詢的記錄排序 order by
* order by寫在select語句的最后
第一,升序 order by 要排序字段 asc(asc可以省略,默認(rèn)的情況下就是升序)
* 練習(xí):對(duì)user表里面查詢的數(shù)據(jù),根據(jù)語文成績進(jìn)行升序排列
select * from user order by chinese asc;

第二,降序 order by 要排序字段 desc
* 練習(xí):對(duì)user表里面的英語成績進(jìn)行降序排列
select * from user order by english desc;

8、聚集函數(shù)

(1)使用提供一些函數(shù),直接實(shí)現(xiàn)某些功能
(2)常用的聚集函數(shù)
第一,count()函數(shù)
* 根據(jù)查詢的結(jié)果,統(tǒng)計(jì)記錄數(shù)
* 寫法 select count(*) from ...where....

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

* 練習(xí)二:查詢user表里面語文成績大于60的人員有多少
select count(*) from user where chinese>60;

第二,sum()函數(shù)
* 求和的函數(shù)
* 寫法 select sum(要進(jìn)行求和字段) from ...where....

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

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

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

第三,avg()函數(shù)
* 計(jì)算的平均數(shù)的函數(shù)
* 寫法 select avg(要計(jì)算平均數(shù)的字段名稱) from ...

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

第四,max()函數(shù):計(jì)算最大值
* 寫法 select max(字段) from...

第五,min()函數(shù):計(jì)算最小值
* 寫法 select min(字段) from...

* 練習(xí):得到user表里面語文成績的最高分?jǐn)?shù),英語的成績最低分?jǐn)?shù)
select max(chinese),min(english) from user;

9、分組操作

分組使用 group by 根據(jù)分組的字段
在分組的基礎(chǔ)之上再進(jìn)行條件的判斷 having,后面可以寫聚集函數(shù)
(1)舉例說明
* 創(chuàng)建表 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,'手機(jī)',500);
insert into orders values(5,'手機(jī)',500);
insert into orders values(6,'鼠標(biāo)',33);
insert into orders values(7,'鼠標(biāo)',33);

(2)練習(xí)一:統(tǒng)計(jì)orders表里面每類商品的總的價(jià)格
select name,sum(price) from orders group by name;

(3)練習(xí)二:對(duì)商品進(jìn)行分類,得到每類商品的總價(jià)格大于66的商品
select name,sum(price) from orders where sum(price)>66 group by name;
= 上面的語句在邏輯上沒有問題,在語法上,where里面不能寫聚集函數(shù),報(bào)錯(cuò)
正確的寫法:
select name,sum(price) from orders group by price having sum(price)>66;

10、mysql的可視化工具使用

(1)使用工具創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,向表添加記錄,刪除表中的記錄

11、mysql的關(guān)鍵字limit

(1)limit關(guān)鍵字查詢表中的某幾條記錄
(2)limit關(guān)鍵字不是標(biāo)準(zhǔn)sql的關(guān)鍵字,只能在mysql數(shù)據(jù)庫里面使用,實(shí)現(xiàn)分頁的功能
* 在oracle里面特有關(guān)鍵字 rownum
* 在sqlserver里面特有關(guān)鍵字 top

(3)使用limit查詢前幾條記錄 
* 寫法: limit 前幾條記錄  limit 3
* 練習(xí):查詢user表里面前三條記錄

(4)使用limit查詢第幾條到第幾條記錄
* 寫法: limit 第一個(gè)參數(shù),第二個(gè)參數(shù)
** 第一個(gè)參數(shù)開始的記錄數(shù)的位置,從0開始的
** 第二個(gè)參數(shù)從開始的位置向后獲取幾條記錄
* 練習(xí):查詢user表里面第二條到第四條記錄

12、重置mysql的root密碼

(1)知道密碼,修改密碼
第一,連接mysql數(shù)據(jù)庫
第二,切換數(shù)據(jù)庫 mysql  use mysql
第三,進(jìn)行密碼的修改 update user set password=password('要修改成的密碼的值') where user='root';
第四,重新啟動(dòng)mysql服務(wù)

(2)忘記密碼,重置密碼
第一,把mysql的服務(wù)關(guān)閉
第二,打開cmd窗口,輸入命令 mysqld --skip-grant-tables(不要加分號(hào))
第三,再打開cmd窗口,連接數(shù)據(jù)庫,不需要輸入密碼  mysql -u root
第四,切換數(shù)據(jù)庫 mysql  use mysql
第五,進(jìn)行密碼的修改 update user set password=password('要修改成的密碼的值') where user='root';
第六,把兩個(gè)cmd窗口都關(guān)閉,打開任務(wù)管理器,找到mysqld進(jìn)程,結(jié)束
第七,啟動(dòng)mysql服務(wù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容