javaweb-mysql數據庫


這邊文章主要介紹數據庫以及數據庫的指令使用(本文資源來自網絡,僅供個人學習使用,吧啦吧啦,差不多就這個意思,不過我提到的這些軟件大部分是開源免費的,所以嘛,如果有破解版的,請不要肆意使用,個人學習即可,不傳播,不推廣)

 

寫在前面,如果數據庫表中不能插入中文,或者插入中文亂碼的時候

解決方法:set char set 'utf8'(僅一次有效,重新開啟服務器需要重新設置);

            ②修改安裝目錄下的my.ini配置文件,將里面的utf8改為gbk即可

再試 insert 語句

 

其它:如果忘記了具體的語句,可以直接通過數據庫管理工具:SQLyog - 64 bit(32位的,網上也有學習開發版(破解的))來進行對應操作,然后可以查看命令提示獲取對應的sql語句(這個雖然取巧,但是確實很方便,忘了就這樣做,很方便的,特別是需要使用一些比較冷門的指令,比如選定多少條到多少條的時候就可以在工具中先達到效果,主要的作用是:復制指令在java中操作,批量操作之類的都可以,又節約了一點腦內存)

 

注意:要想刪除一條屬性為null的記錄,使用的語句是對應null條目的名稱如:id is null,就可以把這一條語句刪掉

 

day04

 

mysql數據庫

 

1、數據庫的簡介

1)數據庫:簡單來說就是一個文件系統,能夠使用標准sql(通用型的,limit屬性是mysql中對特有的)對數據庫進行操作(crud

 

2)常見的數據庫

* oracle:是oracle公司產品,是大型的收費的數據庫

* db2:是ibm公司的產品,是大型的收費的數據庫

* SQLServer:是微軟公司產品,是中型的數據庫

* MySQL : oracle收購之后6.x版本開始收費,之前的版本是免費的(可惜)

* SQLite:是小型的嵌入式數據庫,應用在客戶端開發中,比如安卓

 

3)關系數據庫:存儲的是實體之間的關系

* 比如有購物網站,有用戶,訂單,商品,稱為實體(事實存在的,而不是虛擬的)

* 用戶、訂單和商品之間的關系稱為實體之間的關系

* 使用er(這個用得比較多,要注意)表示實體之間的關系

** 實體使用矩形、在實體上面屬性使用橢圓,之間的關系使用菱形

 

2mysq(這里還是用免費的5.X版本吧)l的安裝和卸載

1)安裝mysql 5.x版本

 

2mysql的安裝步驟

* 在文檔里面有安裝步驟

(已經放在了網盤里,需要的可以自己去看一下)

3mysql的卸載

第一步,找到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,找到了都刪除

 

第五步,重新啟動系統

 

3mysql服務器的存儲結構

1mysql服務器

* 服務器:從硬件上,服務器就是一台電腦(可高可低的計算機,有可能不存在圖形界面?);從軟件上,在電腦上安裝了服務器軟件。

* mysql服務器:在一台電腦上,安裝了mysql數據庫,這台電腦稱為mysql服務器。

2mysql服務器的存儲結構

* 有多個數據庫,在每個數據庫里面有多個數據庫表,在每個表里面有多條記錄

 

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

 

4、sql語言簡介

主要目的:使用sql語言對數據庫、數據庫表、表中的記錄進行增刪改查(crud)操作

1)數據庫是文件系統,使用標准sql對數據庫進行操作

* 標准sql,在mysql里面使用語句,在oracledb2都可以使用這個語句

 

2)什么是sql

* Structured Query Language, 結構化查詢語言,對數據庫進行操作

* sql非過程性語言,不需要依賴於其他的條件就可以運行

** 比如 在java里面

*** if(a > 5) {

System.out.....

    }

 

3sql的分類

第一類:DDL (數據定義語言)(create)

* 創建數據庫,創建數據庫表

* 常用的語句 create

第二類:DML  (數據操縱語言)(增刪改)

* 對表中的記錄進行增加 修改 刪除操作

* 常用的語句 insert  update  delete

第三類:DCL (數據控制語言)

* 數據庫的編程的語言

第四類:DQL (數據查詢語言)(查詢)

* 對表中的進行查詢的操作

* 常用的語句 select

 

 

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 要切換的數據庫的名稱;

** 示例:use testdb2;

 

6、使用sql對數據庫表操作

1)創建數據庫表 (這一塊錯誤率比較高,可以考慮通過先寫在記事本上,然后復制到CMD控制台中)

* 語句 create table 表名稱 (

字段 類型,

字段 類型

      )

 

* 創建表 user,字段  id  username  password  sex

create table user (

id int,

username varchar(40),

password varchar(40),

sex varchar(30)

)

 

2mysql的數據類型

字符串型

VARCHARCHAR的區別(他們都不會自動增長,特別是在儲存UUID的時候,要注意長度問題)

* 當創建表時候,使用字符串類型,name varchar(40),指定數據的長度

* varcharchar的區別

** varchar的長度是可變的,比如 name varchar(5),存值 a ,直接把a存進去

** char的長度是固定的,比如 name char(5),存值 b,把b存進去,后面加很多空格

 

大數據類型

BLOBTEXT

* 使用這個類型可以存儲文件,一般開發,不會直接把文件存到數據庫里面,存文件的路徑

 

數值型(惡俗)

TINYINT (很小的數字)SMALLINT(小數字)INTBIGINTFLOATDOUBLE

* 對應java里面

byte       short    int  long    float  double

 

邏輯性

BIT

* 類似java里面的boolean

 

日期型

DATE:用於表示日期 1945-08-15

TIME:用於表示時間 19:10:40

 

下面的兩個類型可以表示日期和時間

DATETIME:手動添加時間到數據表里面

TIMESTAMP:自動把時間添加到表里面

 

3)查看表結構

* 語句 desc 表名稱;

+----------+-------------+------+-----+---------+-------+

| Field    | Type        | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| id       | int(11)     | YES  |     | NULL    |       |

| username | varchar(40) | YES  |     | NULL    |       |

| password | varchar(40) | YES  |     | NULL    |       |

| sex      | varchar(30) | YES  |     | NULL    |       |

+----------+-------------+------+-----+---------+-------+

 

4mysql的約束有三種

第一種,非空約束 not null

* 表示數據不能為空

 

第二種,唯一性約束 unique

* 表中的記錄不能重復的

 

第三種,主鍵約束 primary key

* 表示非空,唯一性

* 自動增長 auto_increment

 

5)創建帶約束的表

create table person (

id int primary key ,

username varchar(40) not null,

sex varchar(20)

)

 

+----------+-------------+------+-----+---------+-------+

| Field    | Type        | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| id       | int(11)     | NO   | PRI | NULL    |       |

| username | varchar(40) | NO   |     | NULL    |       |

| sex      | varchar(20) | YES  |     | NULL    |       |

+----------+-------------+------+-----+---------+-------+

 

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 atuo_increment,

sname varchar(40)

)

insert into stu values(null,'aaa');

 

 

2)修改表里面的記錄 update

* 語句 update 表名稱 set 要修改的字段的名稱1=修改的值1,要修改的字段的名稱2=修改的值2 where 條件

 

* 練習:修改user表里面id=1username修改為QQQ,修改password999

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;

 

5distinct,去除表里面重復記錄

* 語句 select distinct * from 表名;

 

6where子句

第一,運算符 < > >= <=

* 練習:查詢user表里面語文成績大於60的所有的人員

select * from user where chinese > 60;

 

第二,in:在范圍內

* 練習:查詢user表里面英語成績是8090的人員的信息

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 要排序字段 ascasc可以省略,默認的情況下就是升序)

* 練習:對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;

 

10mysql的可視化工具使用

1)使用工具創建數據庫,創建表,向表添加記錄,刪除表中的記錄

 

11mysql的關鍵字limit

1limit關鍵字查詢表中的某幾條記錄

2limit關鍵字不是標准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、重置mysqlroot密碼(可以通過遠程鏈接數據庫修改)

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服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM