javaWeb學習第七天------mysql進行時

數據庫入門

數據庫概念

存數據的一個倉庫(大量的數據),其實底層還是使用文件來進行存

理解中的數據庫:

數據庫: 是一個文件夾 => 數據表在數據庫 ==》數據由數據庫進行管理,存放
數據表: 文件夾裏的文件

實際可視化中的數據表:

數據表:顯示就是一個二維的表格
包含三大要素: 表名 行 與列

在數據庫的操作:

就是增刪改查 (不需要去關鍵底層如何實現,只需要關注一些指令)

作用:使對數據的操作更加高效,相對於java原始的操作數據流。

在沒有數據的情況時候我們操作數據的方式:

我們操作數據,都是使用java通過流的形式對數據進行操作,但是過程繁雜,代碼量龐大
在這裏插入圖片描述

在有數據庫的時候我們操作數據的方式:

我們只需使用java代碼對數據庫發送相應的指令給數據,處理數據的這個過程交給數據庫就可以獲取我們想要的結果。

在這裏插入圖片描述

數據庫的組成:

數據庫的組成: 一個是客戶端 一個是服務器

客戶端 : dos , sqlyarn , 類似於 眼睛 耳朵

作用:1.發送指令 2.接受數據,顯示數據

服務器:(主要是由空間,可以連接外網,都可以當做一臺服務器)電腦 或主機,類似人的大腦

作用: 1.接受指令 2.處理指令 3.返回相應的數據

在這裏插入圖片描述

數據庫管理系統(DBMS):

DBMS:管理數據庫的系統

1.更好的去管理數據以及數據庫

2.對指令的處理

3.數據庫:只需要做數據存儲: 減輕數據庫服務器的壓力

在這裏插入圖片描述

實體類和數據庫表的關係:

實體類和數據庫表的關係:實體類就是數據庫表在代碼中實際映射,實體類是和數據庫表一一對應的

表名 =>類名
列=>屬性
每一行數據對應一個對象
在這裏插入圖片描述

傳統數據庫(關係型數據庫):表與表之間是存在關係

mysql: 1.免費 2.開源 3. 輕量級 (學習的重點)

orcle 收費的,性能非常好,保證數據安全,數據快(學習重點)

DB2 收費,性能好

sqlserver c# 微軟

sqlite 移動端的數據庫 存數據比較少

非關係型數據庫:

hbase(列族來存) ,redis(以鍵值對來進行存)==>表與表之間不存在關係 ,可以存的數據量比關係型數據庫更大

在這裏插入圖片描述

mysql的學習

mysql數據庫連接的方式:

1.dos(系統自帶) 2.sqlyarn (可視化工具)等

mysql 安裝:

注意問題:

1.要注意端口號3306

2.注意設置編碼格式 utf-8

3.記住root的密碼(root用戶是超級用戶,權限基本上都有)

連接數據庫的方式:今天主要使用shell窗口

普通的shell窗口:

1.本地連接的方式 :mysql -u用戶名 -p密碼

2.遠程連接的方式: mysql -hIP地址 -u用戶名 -p密碼 (公司一般遠程連接)

  • 手動關閉數據庫服務指令:(都必須使用管理員shell窗口)

net stop (數據庫名) 如 MYSQL57

  • 手動啓動數據庫服務指令

net start (數據庫名)如MYSQL57

注意點: 都需要開啓mysql服務(mysql一般是自動開啓) 快捷鍵:ctrl+alt+delete

在這裏插入圖片描述

修改mysql密碼:

1.進入mysql中

2.切換到mysql

3.修改語句 update user set passwrod =“修改的密碼” where user=“用戶名”

對數據庫的操作

  • 對數據庫的操作:寫sql語句(結構化查詢語言(就類似於普通,基本數據庫都能夠使用))

sql語句分類:

  • DDL :對庫,表結構進行操作,不會修改表裏的數據 常用的關鍵件 alter rename …
  • DML:對數據庫的操作:數據庫的數據會發生變化 insert(增加) update(修改) delete(刪除) 不包含查詢
  • DQL : 查詢數據庫的數據==>數據庫的數據是不會發生改變==>相當於形成了一張僞表
  • DCL : 對權限,以及用戶的增加與刪除的控制,(管理員)

數據庫中的數據類型:(部分)

  • int(整數)
  • double(小數)
  • char(類似String)=>固定的字節
  • varchar(長度可變,類似於Stringbuffer)
  • Text(大文本) 文章
  • blob 存二進制(圖片,視頻) java一般圖片都存的是地址
  • date : yyyy–MM-dd
  • time: HH:mm:ss
  • dateTime: yyyy–MM-dd HH:mm:ss

DDL:對數據庫表的操作

創建數據庫 :create database + 數據庫的庫名

mysql> create database student;
Query OK, 1 row affected (0.00 sec)

創建數據庫的時候設置其編碼格式 :create database + 數據庫的庫名 + character set +編碼格式

mysql> create database student character set utf8;
Query OK, 1 row affected (0.00 sec)

查看數據庫的編碼格式: show create database+數據庫的庫名

mysql> show create database student;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| student  | CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.03 sec)

刪除數據庫: drop database +數據庫庫名(不要把數據庫默認的庫刪除了)

mysql> drop database student;
Query OK, 0 rows affected (0.00 sec)

查看所有的數據庫:show databases;

mysql> show databases;

使用數據庫:use +庫名(在創建表格前要確認使用哪個數據庫)

mysql> use student;
Database changed

創建表:create table +表名(
列名1 數據類型(長度),
列名2 數據類型(長度),
列名…n 數據類型(長度)
);

1.注意點:最後一個列名不需要加逗號

2.要切換到具體的庫

mysql> create table user(
    -> u_id int (10),
    -> u_sex char(2),
    -> u_tel varchar(20)
    -> );
Query OK, 0 rows affected (0.02 sec)

在表中增加一列 :alter table 表名 add 列名(長度)

mysql> alter table user add u_age int(100);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

查看錶結構: desc 表名

mysql> desc user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| u_id  | int(10)     | YES  |     | NULL    |       |
| u_sex | char(2)     | YES  |     | NULL    |       |
| u_tel | varchar(20) | YES  |     | NULL    |       |
| u_age | int(100)    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)

修改具體列的類型的約束:alter table + 表名 modify 列名(長度)

mysql> alter table user modify u_age varchar(50);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改整個列名: alter table +表名 change 舊的列名 新的列名(長度);

mysql> alter table user change u_age  new_age varchar(15);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

刪除列: alter table 表名 drop 列名

mysql> alter table user drop new_age;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改表的名稱:alter table 表名 rename +新的表名 || rename table +舊錶名 to +新的表名

mysql> alter table user  rename new_user;
Query OK, 0 rows affected (0.01 sec)
mysql> rename table new_user to user;
Query OK, 0 rows affected (0.01 sec)

查看當前庫裏的所有的表: show tables

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| user              |
+-------------------+
1 row in set (0.03 sec)

設置表的編碼格式: alter table +表名 character set 編碼格式

mysql> alter table user character set utf8;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

查看錶的編碼格式: show create table + 表名

mysql> show create table user;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                             |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (
  `u_id` int(10) DEFAULT NULL,
  `u_sex` char(2) DEFAULT NULL,
  `u_tel` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.05 sec)

mysql使用總結:

  1. 創建一個庫,查詢所有的庫
  2. 給庫設置編碼格式(查看庫的編碼格式)
  3. 切換具體庫
  4. 創建一張表
  5. 新建一個字段
  6. 修改字段的約束
  7. 修改一列
  8. 刪除這一列
  9. 查看錶結構
  10. 修改表名
  11. 查看所有的表
  12. 給表設置編碼格式
  13. 查看錶的編碼格式

DML:對數據的操作,增加 刪除 修改

增加:

​ 第一種寫法: insert into 表名(“列名1”,“列名2”,“列名3”)values(值1,值2,值3); (寫列名)

mysql> insert into user(u_id,u_sex,u_tel) values(1,"男","123456789");
Query OK, 1 row affected (0.01 sec)

​ 第二種寫法:(不用列名)insert into 表名 values(值1,值2,值3,值n); 默認插入所有的數據,從第一列開始

mysql> insert into user values(2,"女","123457777789");
Query OK, 1 row affected (0.01 sec)

插入多條數據:insert into 表名 values(值1,值2,值3,值n),(值1,值2,值3,值n),n個();

mysql> insert into user values(4,"女","123457777789"),(3,"男","1123132132");
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

注意事項: 1.列與插入值的對應上
2.插入值的範圍不能超過其設置的長度
3.數字類型不用加引號,字符串類型加雙引號或單引號, 時間類型加單引號

刪除:

  1. delete from 表名 where 條件 ==>刪除指定條件的數據

    mysql> delete from user where u_id=1;
    Query OK, 1 row affected (0.00 sec)
    
  2. delete from 表名 ==》全部刪除表的內容,但是如果有自增的索引不會被重置爲0

    mysql> delete from user;
    Query OK, 3 rows affected (0.01 sec)
    
  3. truncate 表名 =>刪除清空數據,並且會刪除表結構 ==>也就等同於先刪除這張表,再重新構建一張表,如果有設置自增,則會把自增的索引重置爲0

修改:update 表名 set 列名1=“值1”,列名=“值2” where 條件

mysql> update user set u_sex ="女" where u_id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

注意事項:

  1. 一定要指定條件,否則就回修改所有
  2. 要修改的列與值要對應
  3. 修改值的範圍不能超過其長度
  4. 數字類型用加引號,字符串類型加雙引號, 時間類型加單引號

DQL:查詢後回形成僞表,並不會改變數據

對單表的查詢操作:

#創建商品表:
CREATE TABLE product(
	pid INT PRIMARY KEY,#主鍵ID
	pname VARCHAR(20),#商品名稱
	price DOUBLE,#商品價格
	category_name VARCHAR(32)#商品分類名稱
);

INSERT INTO product(pid,pname,price,category_name) VALUES(1,'聯想電腦',5000,'電腦辦公');
INSERT INTO product(pid,pname,price,category_name) VALUES(2,'海爾電腦',3000,'電腦辦公');
INSERT INTO product(pid,pname,price,category_name) VALUES(3,'雷神電腦',5000,'電腦辦公');

INSERT INTO product(pid,pname,price,category_name) VALUES(4,'JACK JONES',800,'服裝');
INSERT INTO product(pid,pname,price,category_name) VALUES(5,'真維斯',200,'服裝');
INSERT INTO product(pid,pname,price,category_name) VALUES(6,'花花公子',440,'服裝');
INSERT INTO product(pid,pname,price,category_name) VALUES(7,'勁霸',2000,'服裝');

INSERT INTO product(pid,pname,price,category_name) VALUES(8,'香奈兒',800,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(9,'相宜本草',200,'女士用品');
INSERT INTO product(pid,pname,price,category_name) VALUES(10,'麪霸',5,'女士用品');

INSERT INTO product(pid,pname,price,category_name) VALUES(11,'雪碧',56,'飲料飲品');
INSERT INTO product(pid,pname,price,category_name) VALUES(12,'香飄飄奶茶',1,'飲料飲品');

INSERT INTO product(pid,pname,price,category_name) VALUES(13,'iPhone9',8000,NULL);
#查詢product表中所有記錄  所有的使用* 
     語法:  select *  from 表名 
     select * from   product

#查詢product表中pid和pname字段
     語法:select  列名,列名   from    表名
     select pid,pname from  product;
 
#查詢product表中所有的電腦辦公記錄
     語法:select * from  表名 where  條件
     select * from  product  where categroy_name="電腦辦公";
   
#查詢結果是表達式(運算查詢):將所有商品的價格+10元進行顯示.
     語法:select  列名+10 from   表名
      select price+10  from  product;
 
#設置別名關鍵字 按as(可以不寫) ==>設置別名可以給表設置,也可以給列設置別名(表與表之間存在關係,使用的比較多)
  給表設置別名  :select * from  表名 as s
  去除重複的關鍵字是: distinct
  去除價格重複
     select  distinct price  from  product;
   
#======================== 根據條件來進行查詢=====================
 
#查詢商品名稱爲“花花公子”的商品所有信息:
select * from   product  where pname="花花公子";

#查詢價格爲800商品
select * from  product  where price=800;

#查詢價格不是800的所有商品
1.第一種寫法:select  * from  product  where  price !=800;
2.第二種寫法:select * from product where not(price=800);

#查詢商品價格大於60元的所有商品信息
 select  * from    product  where price>60;

#查詢商品價格在200到1000之間所有商品
1. select  * from  product  where price>=200  and   price<=1000;
2.使用的關鍵字是 between ... and ==> select * from  product  where price  between 200 and 1000(包頭包尾)
3.select  * from  product  where price>=200  &&   price<=1000;

#查詢商品價格是200或800或者2000的所有商品
1.select * from  product where price=200 || price =800||price=2000;
2.select* from  product  where  price=200 or price =800 or price=2000; ==>使用的關鍵字是or
3.select  * from  product where price in(200,800,2000);   ==>使用的關鍵字是in

#查詢含有'霸'字的所有商品    模糊查詢的兩個符號 %==》匹配一個或者是多個 _匹配一個字符 like(像)
select * from  product  where pname like "%霸%"

#查詢以'香'開頭的所有商品
select * from  product  where pname like "香%";

#查詢第二個字爲'想'的所有商品
select * from product  where pname like "_想%";

#商品沒有分類的商品   注意點  is null  ="" 不一樣
select  * from  product  where category_name="";   is null 表示插入的時候,沒有插入數據
select * from  product  where category_name is null

#查詢有分類的商品
select * from  product  where  category_name  is not null;

#分頁查詢 limit?,?  ==>? 表示數據的索引這個索引是從0 開始, (當前頁-1)*頁量    ?每頁顯示的頁量  ,算法分頁limit的兩個參數的算法:第一個參數:(當前頁-1)*頁量 ,第二個參數:頁量 
select * from product limit0,2;


#排序:關鍵字order by     ASC升序 desc降序==>  淘寶店的銷售量
#1.使用價格排序(降序)
 select   *  from  product   order  by   price  desc; 

#2.在價格排序(降序)的基礎上
#若價格相同,相同價格的數據以pid降序排序

select * from  product  order by price desc, pid desc;

#查詢出 價格(去掉重複的)     以價格進行降序排列
 
select distinct price from product order by price desc;

#聚合函數: 
#count(* 或者是 1 或者列名)==>查詢出總記錄數   
#MAX(列名)==>最大值  
#MIN(列名)==>最小值    
#SUM(列名)==>總和  
#AVG(列名)==>平均數
 

#1 查詢商品的總條數
 select  count(1) from product;
#查看商品總價格、最大價格、最小价格、價格的平均值
select SUM(price),MAX(price),MIN(price),AVG(price)  from product;
#2 查詢價格大於200商品的總條數 
 select  count(1) from product where price>200
#3 查詢分類爲'電腦辦公'的所有商品的總記錄
 select  count(1) from product where  category_name="電腦辦公";
#4 查詢分類爲'服裝'所有商品的平均價格
    select  avg(price) as "平均數" from product where  category_name="服裝";

#分組:group by +分組的條件
# 統計各個分類下商品的個數
 select category_name,count(1)  from product group by   category_name;

#統計各個分類商品的個數,有且 只顯示分類名稱不爲空值的數據
select category_name,count(1)  from  product group by  category_name having   category_name is not null;

#統計各個分類商品的個數,有且只顯示分類名稱不爲空值的數據 降序排列  + 加分頁取前兩條數據

select category_name,count(1) as s  from  product group by  category_name having   category_name is not null  order by  s desc limit 0,2;


   #分組的條件關鍵字having    
   #where      ===相同點都是用於過濾  
  # 區別: having  是在分組的後面進行過濾(group by 一般having進行搭配使用)   
  #       where 是在分組的前面的過濾   

 #查詢語句書寫的規範: select  *  from  + 表名 +where 條件 +group by(分組)+having(過濾)+order by(排序)+limit(分頁)

 #備份: 1.通過sql語句備份 dos 窗口 mysqldump  -u用戶名 -p密碼 數據庫的苦命>路徑(d:/aa.sql); 1.一點不要加分號  2.不能進mysql進行備份
 #還原 : 2. mysql -u用戶名 -p密碼  數據庫<路徑(d:/aa.sql); 1.數據庫在存在    2.一點不要加分號  3.不能進mysql進行備份
  

sql語句的規範:

1.可以存在多行,每一行sql以分號結尾
2.不區別大小寫(html 但是一般建議小寫) 關鍵字一般建議大寫,其它的小寫
3.數據庫的命名一般以db結尾 stuent_db

分頁查詢原理:

在這裏插入圖片描述

-- 查詢練習  1------------ 

CREATE TABLE stu (
	sid	CHAR(6),
	sname		VARCHAR(50),
	age		INT,
	gender	VARCHAR(50)
);

INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);




--  查詢性別爲女,並且年齡大於等於50的記錄
SELECT * FROM stu WHERE age>=50 AND gender="female"
--  查詢學號爲S_1001,或者姓名爲liSi的記錄
SELECT * FROM stu WHERE sid="S_1001" OR sname="liSi"
--  查詢學號爲S_1001S_1002S_1003的記錄
SELECT * FROM stu WHERE sid="S_1001" OR sid="S_1002" OR sid="S_1003"
--  查詢學號不是S_1001S_1002S_1003的記錄
SELECT * FROM stu WHERE sid NOT IN ("S_1001","S_1002","S_1003")
--  查詢年齡爲null的記錄
SELECT * FROM stu WHERE age IS NULL 
--  查詢年齡在2040之間的學生記錄
SELECT * FROM stu WHERE age>=20 AND age<=40
--  查詢性別非男的學生記錄
SELECT * FROM stu WHERE NOT gender="male"
--  查詢姓名不爲null的學生記錄
SELECT * FROM stu WHERE  sname IS NOT NULL 
--  查詢姓名由5個字母構成的學生記錄
SELECT * FROM stu WHERE sname LIKE "_____"
--  查詢姓名由5個字母構成,並且第5個字母爲“i”的學生記錄
SELECT * FROM stu WHERE sname LIKE "____i"
--  查詢姓名以“z”開頭的學生記錄
SELECT * FROM stu WHERE sname LIKE "z%"
--  查詢姓名中第2個字母爲“i”的學生記錄
SELECT * FROM stu WHERE sname LIKE "_i%"
--  查詢姓名中包含“a”字母的學生記錄
SELECT * FROM stu WHERE sname LIKE "%a%"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章