數(shù)據(jù)庫(kù)概述
數(shù)據(jù)庫(kù)(DataBase,簡(jiǎn)稱DB):指長(zhǎng)期保存在計(jì)算機(jī)的存儲(chǔ)設(shè)備上,按照一定規(guī)則組織起來,可以被各種用戶或應(yīng)用共享的數(shù)據(jù)集合。(屬于文件系統(tǒng))
數(shù)據(jù)庫(kù)管理系統(tǒng)(DataBase Management System,簡(jiǎn)稱DBMS):指一種操作和管理數(shù)據(jù)庫(kù)的大型軟件,用于建立、使用和維護(hù)數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一管理和控制,以保證數(shù)據(jù)庫(kù)的安全性和完整性。用戶通過數(shù)據(jù)庫(kù)管理系統(tǒng)訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
數(shù)據(jù)庫(kù):存儲(chǔ)、維護(hù)和管理數(shù)據(jù)的集合。數(shù)據(jù)庫(kù)軟件應(yīng)該為數(shù)據(jù)庫(kù)管理系統(tǒng),數(shù)據(jù)庫(kù)是通過數(shù)據(jù)庫(kù)管理系統(tǒng)創(chuàng)建和操作的。
其中,DB與DBMS的關(guān)系如下圖所示:

MySQL的安裝與登錄、圖形化工具
MySQL的安裝與登錄、啟動(dòng)與停止
安裝mysql-5.5.27-winx64.msi,配置重點(diǎn)配置默認(rèn)字符編碼、并發(fā)數(shù)、相關(guān)路徑、勾選添加環(huán)境變量、管理員密碼等,這里不再贅述,安裝過程百度即可。
然后命令行終端最好以管理員身份打開,相關(guān)的登錄、啟動(dòng)與停止MySQL的命令如下:
1. 登錄操作
mysql -u root -p
然后輸入管理員密碼就可以登錄了
2. 啟動(dòng)與停止(Windows),注意:也可以通過
net stop mysql
net start mysql
有關(guān)MySQL的卸載、修改密碼請(qǐng)自行百度,Windows和Linux上面有所不同,這里不再贅述。
MySQL圖形化工具
Windows平臺(tái)的話推薦使用:SQLyogEnt
SQLyogEnt提供了最基本的數(shù)據(jù)庫(kù)連接、SQL語句智能提示、執(zhí)行,以及各種圖形化功能:

SQL概述
- SQL:Structure Query Language。(結(jié)構(gòu)化查詢語言)
- SQL被美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)確定為關(guān)系型數(shù)據(jù)庫(kù)語言的美國(guó)標(biāo)準(zhǔn),后來被國(guó)際化標(biāo)準(zhǔn)組織(ISO)采納為關(guān)系數(shù)據(jù)庫(kù)語言的國(guó)際標(biāo)準(zhǔn)。
各數(shù)據(jù)庫(kù)廠商都支持ISO的SQL標(biāo)準(zhǔn)。(普通話)
各數(shù)據(jù)庫(kù)廠商在標(biāo)準(zhǔn)的基礎(chǔ)上做了自己的擴(kuò)展。(方言)
數(shù)據(jù)庫(kù)的存儲(chǔ)
數(shù)據(jù)庫(kù)的存儲(chǔ)方式是邏輯上的二維表:

一行數(shù)據(jù)剛好可以對(duì)應(yīng)Java的實(shí)體類(Bean):
public class User{
private int id;
private String name;
private int age;
//...
}
SQL中的數(shù)據(jù)常用類型
常用數(shù)據(jù)類型:
int:整型
double:浮點(diǎn)型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大值為999.99;
char:固定長(zhǎng)度字符串類型; char(10) 'abc '
varchar:可變長(zhǎng)度字符串類型;varchar(10) 'abc'
text:字符串類型;(比如文章,4M左右大?。?blob:字節(jié)類型;(圖片,視頻、音頻)
date:日期類型,格式為:yyyy-MM-dd;
time:時(shí)間類型,格式為:hh:mm:ss
timestamp:時(shí)間戳類型 yyyy-MM-dd hh:mm:ss 會(huì)自動(dòng)賦值(2023年以后不能用)
datetime:日期時(shí)間類型 yyyy-MM-dd hh:mm:ss

SQL的分類
- DDL(Data Definition Language):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫(kù)對(duì)象:庫(kù)、表、列等; CREATE、 ALTER、DROP
- DML(Data Manipulation Language):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫(kù)記錄(數(shù)據(jù)); INSERT、 UPDATE、 DELETE
- DCL(Data Control Language):數(shù)據(jù)控制語言,用來定義訪問權(quán)限和安全級(jí)別;
- DQL(Data Query Language):數(shù)據(jù)查詢語言(主要是SELECT),用來查詢記錄(數(shù)據(jù))。
- 注意:sql語句以;結(jié)尾,sql文件以.sql為后綴。
- 注意:sql文件中的注釋以“#”開頭
- 注意:關(guān)鍵字大小寫都可以,筆者個(gè)人喜歡小寫
其中,1、2、4比較重要,分別進(jìn)行介紹,注意,SQL博大精深,幾篇文章不可能完全講完,這里主要是入門,介紹的例子都是一些常用的功能。
DDL-數(shù)據(jù)定義語言
主要關(guān)鍵字:CREATE、 ALTER、 DROP。DDL-數(shù)據(jù)定義語言可以:
- 操作數(shù)據(jù)庫(kù)
- 操作數(shù)據(jù)表
1.操作數(shù)據(jù)庫(kù)
創(chuàng)建數(shù)據(jù)庫(kù)
create database mydb1;
character set:指定字符集編碼
create database mydb2 character set gbk;
collate:是指定校對(duì)規(guī)則,在字符串內(nèi)用于比較字符的一套規(guī)則
create database mydb3 character set gbk collate gbk_chinese_ci;
數(shù)據(jù)庫(kù)查詢操作
查看當(dāng)前數(shù)據(jù)庫(kù)服務(wù)器中的所有數(shù)據(jù)庫(kù)
show databases;
查看前面創(chuàng)建的mydb2數(shù)據(jù)庫(kù)的定義信息
show create database mydb2;
數(shù)據(jù)庫(kù)刪除操作
刪除前面創(chuàng)建的mydb3數(shù)據(jù)庫(kù)
Drop database mydb3;
數(shù)據(jù)庫(kù)修改操作
查看服務(wù)器中的數(shù)據(jù)庫(kù),并把mydb2的字符集修改為utf8;
alter database mydb1 character set utf8;
數(shù)據(jù)庫(kù)的切換操作
查看當(dāng)前使用的數(shù)據(jù)庫(kù)
select database();
切換數(shù)據(jù)庫(kù)
use mydb1;
查看數(shù)據(jù)庫(kù)狀態(tài)(主要是編碼方式),關(guān)于如何修改數(shù)據(jù)庫(kù)的默認(rèn)編碼請(qǐng)自行百度
status;
show variables like 'char%';
2.操作數(shù)據(jù)表
表的創(chuàng)建
語法:
create table 表名(
字段1 字段類型,
字段2 字段類型,
...
字段n 字段類型
);
# 例子:
create table mytable1(name varchar,age int);
當(dāng)前數(shù)據(jù)庫(kù)中的所有表
show tables;
查看表的結(jié)構(gòu)(字段信息)
desc mytable1;
修改表結(jié)構(gòu)
在上表的基礎(chǔ)上增加一個(gè)image列。
alter table mytable1 add image blob;
修改name列,使其長(zhǎng)度為60。
alter table mytable1 modify name varchar(60);
刪除image列,一次只能刪一列。
alter table mytable1 drop image;
表名改為user。
rename table mytable1 to user;
查看表格的創(chuàng)建細(xì)節(jié)
show create table user;
修改表的字符集為gbk
alter table user character set gbk;
列名name修改為username
alter table user change name username varchar(60);
刪除表
drop table user;
DML-數(shù)據(jù)操作語言
DML是對(duì)表中的數(shù)據(jù)進(jìn)行增、刪、改的操作。不要與DDL混淆了。
主要關(guān)鍵字有:INSERT 、UPDATE、 DELETE
注意:
- 在mysql中,字符串類型和日期類型都要用單引號(hào)括起來。例如:'tom' '2015-09-04'
- 空值:null
插入操作:INSERT
語法:
insert into 表名(列名1,列名2 ...)values(列值1,列值2...);
注意:
列名與列值的類型、個(gè)數(shù)、順序要一一對(duì)應(yīng)。
可以把列名當(dāng)做java中的形參,把列值當(dāng)做實(shí)參來理解。
值不要超出列定義的長(zhǎng)度。
如果插入空值,請(qǐng)使用null。
插入的日期和字符一樣,都使用引號(hào)括起來。
例子:
單個(gè)插入:
insert into user(name,age) values ('li',20);
可以省略形式參數(shù):
insert into user values ('zhang',20);
查詢是否插入成功
select * from user;
批量插入:
insert into user values
('li',20),
('zhang',20),
('huang',20);
修改操作:UPDATE
語法:update 表名 set 列名1=列值1,列名2=列值2 。。。 where 列名=值
例子:
將所有人的age設(shè)置為30(可以同時(shí)修改多個(gè)值,用“,”隔開)
update user set age=30;
將name為zhang的age修改為25
update user set age=25 where name='zhang';
update user set age=age+5 where name='zhang';
刪除操作:DELETE
語法:
DELETE FROM 表名 [WHERE 列名=值]
注意:
DELETE刪除:表中的數(shù)據(jù),表結(jié)構(gòu)還在;刪除后的數(shù)據(jù)可以找回(與日志配合使用,能夠找回)
TRUNCATE(縮短、截?cái)啵﹦h除:是把表直接DROP掉,然后再創(chuàng)建一個(gè)同樣的新表。
比較:刪除的數(shù)據(jù)不能找回。執(zhí)行速度比DELETE快,通常用DELETE。
例子:
刪除表中name為'zhang'的記錄
delete from user where name='zhang';
刪除表中所有記錄
delete from user;
使用truncate刪除表中記錄
truncate table user;