Java第二十五天(mysql)
Mysquel資料庫與JDBC
1.完成對分類表的CRUD的操作
資料庫的概述
資料庫是一個檔案系統,只不過我們需要通過命令(SQL)來操作這個檔案系統
資料庫,簡而言之可視為電子化的檔案櫃——儲存電子檔案的處所,使用者可以對檔案中的資料進行新增、查詢、更新、刪除等操作。
作用:儲存資料,資料的倉庫,帶有訪問許可權限制不同的人可以有不同的操作
資料庫操作的都是後臺資料,取到後臺資料進行封裝,然後交給前端去展現
常見的資料庫:
mysql:開源免費的適用於中小型企業的免費資料庫,sun公司收購了mysql,sun公司被oracle公司收購開始收費
mariadb:由mysql創始人搞出來的,直接是mysql開源版本的一個分支,基本上所有的命令都是一樣
oracle:甲骨文公司,商業軟體收費,適用於大型電商網站,收購了sun公司
db2:IBM公司,thinkpad,解決方法:軟體硬體,伺服器架構包含全套軟體,穩定,銀行系統大多采用db2
sqlserver:windows裡面,政府網站asp.net,大學教學通常採用sqlserver,圖形化工具做的不錯
sybase:被淘汰的資料庫
NOSQL非關係型資料庫:存放形式 key:value
mongodb
redis :set get 設定和獲得資料
關係型資料庫:主要是用來描述實體與實體之間的關係
E-R關係圖:
實體:方框
屬性:橢圓
關係:菱形
Mysql資料庫伺服器
MYSQL資料庫:資料庫管理軟體
伺服器:就是一臺電腦,安裝相關的拂去軟體,這些軟體會監聽不同的埠號,根據使用者訪問的埠號提供不同的服務
MYSQL的安裝和解除安裝
安裝:
解除安裝:
1.開啟程式控制面板刪除軟體MySQL Serve
2.刪除mysql安裝目錄下的所有檔案C:\programs files\MySQL
3.刪除MySQL資料存放檔案C:\programsData\MySQL
MySQL的SQL語句
SQL:Structure Query Language結構化查詢語言
DDL:資料定義語言:定義資料庫,資料表他們的結構:create建立 drop刪除 alter 修改
DML:資料操縱語言:主要是用來操作資料 insert插入 update 修改 delete刪除
DCL:資料控制語言:定義訪問許可權定義取消訪問許可權,安全設定 grant
DQL:資料查詢語言:select查詢 from字句 where字句
資料庫的CRUD操作
首先要登陸資料庫伺服器:mysql -uroot -proot
(有的會出現問題,我就沒有那麼順利出問題了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 以管理員許可權執行cmd程式輸入 services.msc ; 找到MySQL 重啟動其服務 或者關閉修改密碼在網上搜方法,太長了懶得co過來)
建立資料庫
create database 資料庫的名字
create database hlj0628;
建立資料庫的時候指定字符集:
create database 資料庫的名字 character set 字符集;
create database hlj0628_1 character set utf8;
建立資料庫的時候指定字符集和校對規則:
create database 資料庫的名字 character set 字符集 collate 校對規則;
create database hlj0628_2 character set utf8 collate utf8_bin;
檢視資料庫
檢視所有資料庫 show databases;
information_schema
performance_schema
mysql
檢視資料庫定義的語句
show create database 資料庫的名字
show create database hlj0628_1;
show create database hlj0628_2;
修改資料庫(一般不需要修改也不需要我們建立)
修改資料庫的字符集
alter database 資料庫的名字 character set 字符集
alter database hlj0628_1 character set gbk; 把hlj0628_1字符集改成gbk
刪除資料庫
drop database 資料庫的名字;
drop database hlj0628_2;
drop database test;
其他資料庫的操作命令
切換資料庫
use 資料庫的名字;
use hlj0628;
檢視當前正在使用的資料庫
select database();
表的CRUD操作
建立表
create database 資料庫的,名字
create table 表名(
列名 列的型別 約束,
列名 列的型別 約束,
...
);
列的型別:
Java:int char/string duble float boolean date
sql: int char/varchar duble float boolean date time datetime timestamp text blob
char是固定的長度型別,varchar是可變長度型別,例如char(3)當存入的字元數不夠3個的時候會以空格填充顯示,varchar(3)存入的字元是多少個就是多少個,比較節省空間一點
date: YYYY-MM-DD
time: hh:mm:ss
datetime: YYYY-MM-DD hh:mm:ss 預設值是null
timestamp: YYYY-MM-DD hh:mm:ss 預設值使用當前時間
text: 主要用來存放當文字
blob: 存放二進位制
列的約束:
主鍵約束:primary key
唯一約束:unique
非空約束:not null
建立表:
1.分析實體:學生
2.學生ID
3.姓名
4.性別
5.年齡
create table student(
sid int primary key,
sname varchar(31),
sex int,
age int
);
查看錶
show tables;
查看錶的定義
show create table 表名;
show create table student;
查看錶的結構
desc 表名;
desc student;
修改表
新增列(add),修改列(modify),修改列名(change),刪除列(drop),修改表名(rename),修改表的字符集
新增列(add)
alter table 表名 add 列名 列的型別 列的約束
alter table student add chengji int not null;
修改列(modify)
alter table 表名 modify 列名 修改內容;
alter table student modify sex varchar(2);
修改列名(change)
alter table 表名 change 原列名 修改後列名 列類的型別;
alter table student change sex gender varchar(2);
刪除列(drop)
alter table 表名 drop 列名;
alter table student drop chengji;
刪除表(rename)
rename table 原表名 to 新表名;
rename table student to hero;
修改表的字符集
alter table 表名 character set 字符集;
alter table hero character set gbk;
刪除表
drop table hero;
SQL完成對錶中資料的CRUD的操作(重要)
插入資料:
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);
insert into student(sid,sname,sex,age) values(1,'zhangsan',1,23);
查看錶中資料:select * from student;
簡單寫法插入全列可以不寫列名直接寫值:insert into student values(2,'zhangsan',1,23);
只插入部分列列名不能省略:insert into student(sid,sname) values(3,'lisi');
批量插入:
insert into student values(4,'zhangsan',1,23),(5,'zhangsan',1,23),(6,'zhangsan',1,23);
單條插入和批量插入的效率:批量插入效率更高一些,
命令列下插入中文的問題:
臨時解決方案:set names gbk; x相當於是告訴mysql伺服器軟體,我們在當前命令列下輸入的內容是GBK編碼。當命令視窗關閉之後,它再輸入中文就存在問題
永久解決辦法:修改my.ini配置(在mysql軟體安裝路徑裡) :暫停mysql,在安裝路徑中找到my.ini配置檔案修改如下,把57行程式碼改成gbk,儲存檔案推出,啟動mysql
修改列的字符集alter table student change sname sname varchar(31) character set gbk;
查看錶格的所有元素show full fields from student;
alter database character set utf8;
刪除記錄
delete from 表名 [where 條件]
delete from student where sid=10;
delete from student;如果沒有指定條件,會將表中資料全部刪除
面試題:請說一下delete刪除資料和truncate刪除資料有什麼差別
delete:分類屬於DML,一條一條刪除表中的資料
truncate:分類屬於DDL 先刪除表再重建表
關於哪條效率高具體要看錶中的資料量,較少--delete效率高;較多--truncate效率高
更新表記錄
update 表名 set 列名=列的值,列名2=列的值2 [where 條件];
將sid為5 的名字改成lisa,如果引數是字串或者日期要加上單引號,是數字直接寫
update student set sname='lisa' where sid=5;
如果後面沒有加條件,所有行都會更新update student set sname='lisa',sex=0;
查詢記錄
select [distinct] [*] [列名,列名2] from 表名[where 條件];
distinct 去除重複的資料
select選擇顯示哪些列的內容
商品分類:
1.分類ID
2.分類名稱
3.分類描述
(auto_increment)表示id自動遞增
create table category(
cid int primary key auto_increment,
cname varchar(10),
cdesc varchar(31)
);
insert into category values(null,'phone','huawei,xiaomi');
insert into category values(null,'fruit','xinjiang,hainan');
insert into category values(null,'book','about love,ahout youth');
insert into category values(null,'milk','mengniu,yili');
只查詢名稱和描述 select cname,cdesc from category;
所有商品:
1.商品ID
2.商品名稱
3.商品價格
4.生產日期
5.商品分類ID
商品和商品的分類:所屬關係
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdate timestamp;
cno int
);
insert into product values(null,'xaiomi',998,null,1);
insert into product values(null,'watermelon',2.88,null,2);
insert into product values(null,'banana',6,null,2);
insert into product values(null,'Titanic','28,null,3);
insert into product values(null,'guangming',16,null,4);
insert into product values(null,'youge',13,null,4);
簡單的查詢:
查詢所有商品: select * from product;
查詢商品名稱和商品價格:select pname,price from product;
別名查詢.as關鍵字,as關鍵字是可以省略
表別名:select p.name,p.price from product p;(主要用在多表查詢)
select p.pname,p.price from product as p;
列別名:select pname as 商品名稱,price as 商品價格 from product;
select pname as name,price as money from product;
省略as
select pname name,price money from product;
去掉重複的值查詢
查詢商品所有的價格
select price from product;
select distinct price from product;
select運算查詢:僅僅在查詢結果上做了運算+-*/,在資料庫中不做改變
select *,price*1.5 from product;
select *,price*1.5 as discountprice from product;
條件查詢[where關鍵字] 指定條件,確定要操作的記錄
查詢商品價格>60元的所有商品資訊
select * from product where price > 60;
where後面的條件寫法
關係運算符:> >= < <= = != <>
<>:不等於:標準的SQL語法
!=:不等於:非標準的SQL語法
查詢商品價格不等於88的所有商品
select * from product where price <> 88;
select * from product where price != 88;
查詢商品價格在10-100之間的價格
select * from product where price > 10 and price <100;
between ... and...
select * from product where price between 10 and 100;
邏輯運算:and , or , not
查詢商品價格小於100胡總和商品價格大於900
select * from product where price < 100 or price >900;
like :模糊查詢
_ :代表的是一個字元
% :代表的手機多個字元
查詢出名字中帶有water的所有商品'%water%'
select * from product where pname like '%water%';
select * from product where pname like '_a%';
in 在某個範圍內獲得值
select * from product where cno in (1,4,5);
排序查詢:order by 關鍵字
asc :ascend 升序(預設的排序方式)
desc :descend 降序
查詢所有商品按照價格進行排序
select * from product order by price;
查詢所有商品按照價格進行降序排序
select * from product order by price desc;
查詢名稱中含有an的商品按照價格進行升序
select * from product where pname like '%an%' order by price asc;
聚合函式
sum() :求和
avg() :求平均值
count() :統計數量
nax() :最大值
min() :最小值
獲得所有商品價格的總和
select sum(price) from product;
獲得所有商品價格的平均價格
select avg(price) from product;
獲得所有商品的個數
select count(*) from product;
注意where條件後面不能接聚合函式
查詢商品價格大於平局價格的所有商品
子查詢select * from product where price > (select avg(price) from product);
分組:group by
根據cno欄位分組,分組後統計商品的個數
select cno,count(*) from product group by cno;
根據cno欄位分組,分組統計每組商品的平均價格,並且商品平均價格大於10
select cno,avg(price) from product group by cno having avg(price) > 10;
注意where條件後面不能接聚合函式 出現在分組之前
having 關鍵字可以接聚合函式,出現在分組之後
SQL程式碼編寫順序
S---F---W---G---H---O
select . . from . . where . . group by . . having . . order by . .
執行順序
F---W---G---H---S---O
from . . where . . group by . . having . . select . . order by . .
思維導圖總結
相關推薦
Java第二十五天(mysql)
Mysquel資料庫與JDBC 1.完成對分類表的CRUD的操作 資料庫的概述 資料庫是一個檔案系統,只不過我們需要通過命
java第二十一天(html)
案例一:網站資訊顯示頁面 1.什麼是HTML?(Hyper Text Markup Language:超文字標記語言)  
走入計算機的第二十五天(內置模塊3之正則表達式)
不同的 hello col font 數字 ans -a class 本質 一 什麽是正則表達式 就其本質而言,正則表達式(或 RE)是一種小型的、高度專業化的編程語言,(在Python中)它內嵌在Python中,並通過 re 模塊實現。正則表達式模式被編譯成一系列的字節碼
python 學習第二十五天(事件驅動和io多路複用)
事件驅動模型 原文連結:http://www.cnblogs.com/yuanchenqi/articles/5722574.html 上節的問題: 協程:遇到IO操作就切換。 但什麼時候切回去呢?怎麼確定IO操作完了?
python 學習第二十五天(協程)
協程 協程,又稱微執行緒,纖程。英文名Coroutine。 優點1: 協程極高的執行效率。因為子程式切換不是執行緒切換,而是由程式自身控制,因此,沒有執行緒切換的開銷,和多執行緒比,執行緒數量越多,協程的效能優勢就越明顯。 優點2: 不需要多執行緒的鎖機制,因為只有一個執行緒,
python 學習第二十五天(程序的呼叫,程序池)
程序的呼叫 方法一: from multiprocessing import Process import time def f(name): time.sleep(1) print('hello', name,time.ctim
Java第二十二天(html表單標籤和css)
1.html表單標籤 <!DOCTYPE html> <html>
python學習第二十六天(HTML)
HTML簡介 HTML是一種超文字標記語言,它有自己的樹型結構,符合HTML結構的檔案稱作HTML檔案。我們使用瀏覽器從服務端獲得的頁面只是一個HTML檔案,然後經過瀏覽器按照固定規則渲染後,才是我們所看的網頁。所以瀏覽器是一個HTML檔案的直譯器。 <!D
第十五天(Ajax)
由於一些原因 昨天不能進部落格了。昨天的東西今天補上,今天的也不能落下。更煩惱的是,今天請假去考駕校筆試,等了一天結果沒有過去,還拉了一天的知識。鬱悶啊。。。Ajax:採取相同的技術(html、css、ja
Java進階學習第十五天(Struts框架)
一、自定義一個Struts框架 1、MVC模式包括 Model:模型 View:檢視 Control:控制器 2、傳統mvc開發總結 ① 跳轉程式碼寫死,不靈活 ② 每次都去寫servlet,要web.xml中配置servlet! 3、自定義一個Struts框架 ① 配置檔案
百度前端學院參考答案:第二十五天到第二十七天 倒數開始 滴答滴 滴答滴(1)
編碼 我們現在來做一個最簡單的時鐘,通過小練習來學習 Date,複習定時,然後再練習一下函式的封裝具體需求如下: 在頁面中顯示當前日期及時間,按秒更新 格式為 YYYY 年 MM 月 DD 日 星期 D HH:mm:ss 注意位數的補齊,比如:-- 假設時間為2008年10月10日星期一的1
Java進階學習第二十四天(Spring框架:事務管理、Spring與Hibernate整合)
一、事務控制 1、引入 使用者訪問 > Action > Service > Dao 如何保證: 在service中呼叫2次dao,其中一個dao執行失敗,整個操作要回滾 2、事務控制概述 ① 程式設計式事務控制:自己手動控制事務 Jdbc程式
Java進階學習第二十六天(JavaScript增強、AJAX基礎)
一、JavaScript增強 1、什麼是JavaScript ① 基於物件 JS本身就有一些現成的物件可供程式設計師使用,例如:Array、Math、String ② 事件驅動 JS程式碼寫好後,需要外界觸發後,方可執行,例如:單擊事件,定時執行 ③ 解釋性 每
Java進階學習第二十六天(JSON基礎、jQuery基礎)
一、JSON基礎 1、JSON的定義 ① JSON(Java Script Object Notation)是一種輕量級的資料交換語言,以文字字串為基礎,且易於讓人閱讀 注意:XML就是一個重量級的資料交換語言 ② JSON採用完全獨立於任何程式語言的文字格式,
Java第十五天學習筆記~常用物件API(Spring類特點、建構函式、常用方法)
常用物件API-----Spring類 一、特點 字串是一個特殊的物件 字串物件一旦被初始化就不會被改變 package day15; public class StringDemo { public static void main(String[] args)
Java學習第二十五天
基本 添加按鈕 java.awt 需要 light 輸入 pre 理解 多級 1:如何讓Netbeans的東西Eclipse能訪問。 在Eclipse中創建項目,把Netbeans項目的src下的東西給拿過來即可。 註意:修改項目編碼為UTF-8 2:GUI(了解
走入計算機的第二十六天(內置模塊4)
poll 讀取 input stdout 自定義 call 叠代器 流控 ons 一 補充正則表達式的其他一些使用方法 1.貪婪模式:在滿足匹配時,匹配盡可能長的字符串,默認情況下,采用貪婪匹配 1 #貪孌匹配 2 # ret=re.findall("abc+","abc
走入計算機的第二十七天(模塊與包的調用)
項目 conf form 第一時間 生產環境 兩個 nag 不同 spec 一 模塊(module)的概念 在計算機程序的開發過程中,隨著程序代碼越寫越多,在一個文件裏代碼就會越來越長,越來越不容易維護。 為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,每個
走入計算機的第二十八天(面向對象的程序設計)
內置 共享 ict ini gre http main 內部 mod 一 什麽是面向對象的程序設計及為什麽要有它 面向過程的程序設計的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麽時候處理什麽東西。 優點是:極大
python學習第二十七天(HTML之表單標籤)
form表單標籤 表單用於向伺服器傳輸資料。 表單能夠包含 input 元素,比如文字欄位、複選框、單選框、提交按鈕等等。 表單還可以包含textarea、select、fieldset和 label 元素。 表單屬性 HTML 表單用於接收不同型別的使用者輸入,使用