1. 為什么要存儲數(shù)據(jù)?
? 注冊登錄為例: 用戶注冊之后骆莹,我們需要在數(shù)據(jù)庫服務(wù)上保存用戶信息下次用戶登錄的時候,就可以查詢驗(yàn)證。
2.存儲數(shù)據(jù)的方式
1.文本文件 (插入較麻煩) 需要IO操作
2. excel表格 (最多支持約53000行數(shù)據(jù))? Jar
3. 數(shù)據(jù)庫管理系統(tǒng) (關(guān)系型數(shù)據(jù)庫) (存放數(shù)據(jù)格式類似excel, 但可以處理的量很大)
上述三種方式莺禁, 數(shù)據(jù)都存儲在硬盤上, 電腦開關(guān)機(jī)窄赋,數(shù)據(jù)不受影響哟冬。
但程序中變量存儲在內(nèi)存中楼熄,內(nèi)存中數(shù)據(jù)開關(guān)機(jī)之后會重置。
3. 關(guān)系型數(shù)據(jù)庫
? 1. mysql
mysql 分為收費(fèi)版和社區(qū)版 (收費(fèi)版的提供技術(shù)支持)浩峡,mysql 是開源的可岂,市場很大,應(yīng)用很多翰灾,很多問題都有解決方案缕粹。
?單個服務(wù)超過3百萬條數(shù)據(jù)之后就會變慢,但是我們可以采用分布式解決纸淮。
? 2. oracle
? ? ? 1. 收費(fèi)的(國企中平斩,壟斷行業(yè))? ? ? 2. 單個節(jié)點(diǎn)處理很大量數(shù)據(jù)
4.什么是數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫管理系統(tǒng)
? 1. 如果一個電腦安裝了mysql數(shù)據(jù)庫管理系統(tǒng)咽块,我們稱這個電腦為mysql服務(wù)器
? ? 2. mysql數(shù)據(jù)庫管理系統(tǒng)绘面,安裝的mysql服務(wù)程序、連接mysql, 備份數(shù)據(jù)庫...等工具
5.連接MySQL
? mysql -uroot -p? (mysql 代表執(zhí)行的bin目錄中 mysql.exe糜芳,-u+用戶名飒货,-p+密碼)
?容易遇到的問題 :
1. mysql不是內(nèi)部或外部命令
? ? 解決方案: 1. 每次進(jìn)入mysql的bin目錄,然后執(zhí)行峭竣。?2. 把bin目錄添加到環(huán)境變量塘辅。
2. 忘記密碼
? ? 解決方案:1. 如果沒有更改過密碼可以在日志中找到。
? ? 2. 如果更改過密碼皆撩,建議重裝扣墩,或者可以進(jìn)入無密碼模式進(jìn)行修改。
? ? eg: 修改mysql的加密方式扛吞, 然后設(shè)置 123456
? ? ALTER USER 'root'@'localhost' identified by '123456' ;
? ? flush privileges ;? 刷新
6.SQL語句
1.基本概念
數(shù)據(jù)庫(database)
表(sheet)
字段(相當(dāng)于對象中的一個屬性? ?col)
行(記錄? ?row)
createdatabasestudb; //創(chuàng)建stu數(shù)據(jù)庫
usestudb; //選擇studb
create????table????stu(id? int,name? varchar(100),gender? varchar(20),age? int); //創(chuàng)建stu表
insert????into????stu????(id,name,gender,age)????values????('1','小明','男',12);
update????stu????set????name ????=????'zs'????where? ? id =????'????'????;
?select????*????from????stu;
?delete? from? stu? where? id ="?"呻惕;
2.數(shù)據(jù)類型
整數(shù)(無符號數(shù) unsigned ,有符號數(shù))
tinyint
int(常用 4字節(jié)? )
bigint
egg:# demo? (00000-999*23*23)
# create table aa(id int primary key auto_increment)
id 不會重復(fù)滥比,自增長類型的id是有順序的亚脆,
# 1. 當(dāng)別人知道一個之后,就可以通過暴力導(dǎo)出數(shù)據(jù)庫中其他數(shù)據(jù)盲泛,
# 2. 不利于數(shù)據(jù)庫遷移
# 3. int 有一定的取值范圍 (數(shù)據(jù)比較多的時候很容易到取值范圍)
# 項(xiàng)目中解決問題: id設(shè)置成字符串類型濒持,id的值通過程序生成(例如:雪花算法)
字符型(長度在5.5之前是字節(jié),5.5之后是字符)
char 指定長度
eg: name char(20),? 即使這個name占不了20個字符寺滚,也會開辟20個字符的空間柑营。
varchar 指定長度
eg: varchar(20)? 如果name的值只能占8個字符,只會開辟8個字符空間村视,如果值超過了長度官套, 插入的時候會報(bào)錯。
如何選取:? 如果值的長度變化比較大,從節(jié)省空間的角度來考慮奶赔,我們可以使用varcahr,但是在計(jì)算長度的過程中會消耗一定的性能惋嚎,如果值的長度變化不大,例如手機(jī)號碼纺阔,就可以用char瘸彤。
text 不需要指定長度,一般用來存儲大段的文本
浮點(diǎn)型
float(3,2)? 前邊數(shù)字表示總長度笛钝,后邊數(shù)字表示小數(shù)點(diǎn)后面的長度
double(10,4)
decimal(7,2)
float 單精度质况,精確到小數(shù)點(diǎn)后7位,double雙精度玻靡,精確到小數(shù)點(diǎn)后15位? 不用來存儲重要數(shù)據(jù)结榄。? 重要數(shù)據(jù)用decimal, decimal本質(zhì)是字符串囤捻。
時間格式
date 格式 YYYY-MM-DD? 日期 年月日
datetime 格式 yyyy-mm-dd? HH:MM:SS 存儲日期和時間
timestamp 格式? ? yyyymmdd? hhmmss 存儲日期和時間臼朗,時間戳
insert into dog values(1,'damao',5,'13535356363','fotball',20.06,500.25,'2020-07-13 16:00:00');
3.約束
非空 not Null(價(jià)格)
default '' 設(shè)置默認(rèn)值 (性別)
unique 唯一? (學(xué)號)
primary? key? ? 主鍵(not null? +? 唯一)
foreign? ? key? ? ? 外鍵? (表關(guān)聯(lián)中,該字段在其他表中為主鍵)
整數(shù)類型的可以設(shè)置? auto_increment? ? 自增
4.條件語句
where語句
//需要什么字段查詢什么字段
?select? name,age? from? person? where? name? like? '%c%';? ?%是通配符
?select? name,age? from? person where? age? >? 3;
?select? name,age? from? person? where? age? between? 2? and? 5;
order by 排序
order by? 字段? 【asc升序/desc降序】
order by? 字段一,字段二? 如果字段一值一樣蝎土,按照字段二進(jìn)行排序视哑。
limit? begin(從0開始),count? (多用于分頁)