數據庫的基本概念
什麼是數據庫?
用於存儲和管理數據的倉庫。
數據庫的特點:
持久化存儲數據的。其實數據庫就是一個文件系統
方便存儲和管理數據
使用了統一的方式操作數據庫 – SQL
數據庫的分類:
數據庫根據存儲採用的數據結構的不同可以分爲許多種,其中包含早期的層次式數據庫、網絡式數據庫。
目前佔市場主流的是關係型數據庫。當然還有非關係(NoSQL)型數據庫(鍵值對數據庫,例如:MongoDB、Redis)等其他類型的數據庫
常見的關係型數據庫:
SQL Server : 微軟提供(收費、Java中使用不多)
Oracle 甲骨文公司(收費、功能強大、性能優異,Java中使用者很多)
DB2 : IBM(收費、中型/大型、銀行/電信等企業)
MySQL : 瑞典MySQL AB(免費開源、小型、性能也不差、適用於中小型項目、可集羣)
SQLite : 迷你數據庫,嵌入式設備中
…
MySQL數據庫軟件
安裝
參考該博客: [https://blog.csdn.net/zhujialiang18/article/details/79780131]
卸載
推薦使用Total Uninstall 6傻瓜式卸載
啓動
MySQL服務啓動
1. cmd--> services.msc 打開服務的窗口
2. 使用管理員打開cmd
net start mysql : 啓動mysql的服務
net stop mysql:關閉mysql服務
MySQL登錄
1. mysql -uroot -p密碼
2. mysql -hip -uroot -p連接目標的密碼
3. mysql --host=ip --user=root --password=連接目標的密碼
1
MySQL退出
1. exit
2. quit
SQL
什麼是SQL?
Structured Query Language:結構化查詢語言
其實就是定義了操作所有關係型數據庫的規則。每一種數據庫操作的方式存在不一樣的地方,稱爲“方言”。
SQL通用語法
- SQL 語句可以單行或多行書寫,以分號結尾。
- 可使用空格和縮進來增強語句的可讀性。
- MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
-
3 種註釋
單行註釋: -- 註釋內容 或 # 註釋內容(mysql 特有) 多行註釋: /* 註釋 */
SQL分類
-
DDL(Data Definition Language)數據定義語言
用來定義數據庫對象:數據庫,表,列等。關鍵字:create, drop,alter 等
-
DML(Data Manipulation Language)數據操作語言
用來對數據庫中表的數據進行增刪改。關鍵字:insert, delete, update 等
-
DQL(Data Query Language)數據查詢語言
用來查詢數據庫中表的記錄(數據)。關鍵字:select, where 等
-
DCL(Data Control Language)數據控制語言(瞭解)
用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:GRANT, REVOKE 等
DDL:操作數據庫、表
- 操作數據庫:CRUD
(1) C(Create):創建
創建數據庫:
create database 數據庫名稱;
創建數據庫,判斷不存在,再創建:
create database if not exists 數據庫名稱;
創建數據庫,並指定字符集
create database 數據庫名稱 character set 字符集名;
(2) R(Retrieve):查詢
查詢所有數據庫的名稱:
show databases;
查詢某個數據庫的字符集:查詢某個數據庫的創建語句:
show create database 數據庫名稱;
(3) U(Update):修改
修改數據庫的字符集
alter database 數據庫名稱 character set 字符集名稱;
1
(4)D(Delete):刪除
刪除數據庫
drop database 數據庫名稱;
判斷數據庫存在,存在再刪除
drop database if exists 數據庫名稱;
(5) 使用數據庫
查詢當前正在使用的數據庫名稱
select database();
使用數據庫
use 數據庫名稱;
- 操作表
(1) C(Create):創建
創建表:
create table 表名(
列名1 數據類型1,
列名2 數據類型2,
....
列名n 數據類型n
);
注意:最後一列,不需要加逗號(,)
約束:對錶中的數據進行限定,保證數據的正確性、有效性和完整性
-
非空約束:not null,值不能爲null。保證所約束的列必須是不爲空的,即在插入記錄時,該列必須要賦值,例如:用戶註冊時,保存的密碼不能爲空。
創建表時添加約束
creare table stu(
id int, name varchar(20) not null -- name爲非空
);
-
唯一約束:unique,值不能重複。保證所約束的列必須是唯一的,即不能重複出現,例如:用戶註冊時,保存的用戶名不可以重複。
創建表時,添加唯一約束
creare table stu( id int, phone_number varchar(20) unique -- 添加了唯一約束 );
注意mysql中,唯一約束限定的列的值可以有多個null
- 主鍵約束:primary key。唯一且不能爲空,一張表只能有一個字段爲主鍵。
在創建表時,添加主鍵約束
create table stu(
id int primary key,-- 給id添加主鍵約束
name varchar(20)
);
-
自動增長:如果某一列是數值類型的,使用 auto_increment 可以來完成值得自動增長。
在創建表時,添加主鍵約束,並且完成主鍵自增長
create table stu(
id int primary key auto_increment,-- 給id添加主鍵約束 name varchar(20)
);
-
外鍵約束:foreign key,讓表於表產生關係,從而保證數據的正確性。
在創建表時,可以添加外鍵
create table 表名(
.... 外鍵列 constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
);
複製表:
create table 表名 like 被複制的表名;
數據庫數據類型
tinyint:佔用1個字節,相對於java中的byte
smallint:佔用2個字節,相對於java中的short
int:佔用4個字節,相對於java中的int
bigint:佔用8個字節,相對於java中的long
float:4字節單精度浮點類型,相對於java中的float
double:8字節雙精度浮點類型,相對於java中的double
date:日期,只包含年月日,yyyy-MM-dd
datetime:日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
timestamp:時間戳型 包含年月日時分秒 yyyy-MM-dd HH:mm:ss
如果將來不給這個字段賦值,或賦值爲null,則默認使用當前的系統時間,來自動賦值
char(n) 定長字符串,最長255個字符。n表示字符數
varchar(n):變長字符串,最長不超過 65535個字節,n表示字符數,一般超過255個字節,超過會使用text類型,例如
* name varchar(20):姓名最大20個字符
* zhangsan 8個字符 張三 2個
(2) R(Retrieve):查詢
查詢某個數據庫中所有的表名稱:
show tables;
查詢表結構:
desc 表名;
(3)U(Update):修改
修改表名
alter table 表名 rename to 新的表名;
修改表的字符集
alter table 表名 character set 字符集名稱;
修改列名稱 類型
alter table 表名 change 列名 新列別 新數據類型;
alter table 表名 modify 列名 新數據類型
刪除列
alter table 表名 drop 列名;
(4) D(Delete):刪除
刪除表
drop table 表名;
判斷表存在,存在再刪除
drop table if exists 表名 ;
DML:增刪改表中數據
添加數據
語法:
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
創建數據庫,判斷不存在,再創建:
* 注意:
1.只能在給所有列插入值時, 纔可以省略列列表, 否則會報錯
2. 列名和值要一一對應。
3. 如果表名後,不定義列名,則默認給所有列添加值
insert into 表名 values(值1,值2,...值n)
4. 除了數字類型,其他類型需要使用引號(單雙都可以)引起來
5. 插入數據時或者查詢數據時先確保編碼是否一致
刪除數據
語法:
delete from 表名 [where 條件];
* 注意:
1. 如果不加條件,則刪除表中所有記錄
2. 如果要刪除所有記錄
1. delete from 表名; -- 不推薦使用。有多少條記錄就會執行多少次刪除操作
2. TRUNCATE TABLE 表名; -- 推薦使用,效率更高 先刪除表,然後再創建一張一樣的表。
查詢某個數據庫的字符集:查詢某個數據庫的創建語句:
show create database 數據庫名稱;
1
修改數據
語法:
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
* 注意:
如果不加任何條件,則會將表中所有記錄全部修改
如果修改列存在null值時:null值和任何值計算結果還是null, 因此, 可以通過ifnull函數將null置爲零對待.
DQL:查詢表中的記錄
語法
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之後的條件
order by
排序
limit
分頁限定
基礎查詢
(1) 多個列名的查詢:
select 列名1,列名2... from 表名;
* 注意:
* 如果查詢所有,則可以使用*來替代列表
)去除重複:
select distinct 列名 from 表名;
1
(3)起別名:
select 列名1 as XXX, from 表名;
as也可以省略
條件查詢
(1) where子句後跟條件
......form 表名 where 子句;
1
(2)運算符
(3)排序查詢
語法:
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
1
排序方式:
- ASC:升序,默認的
- DESC:降序
注意:
如果有多個排序條件,則當前邊的條件值一樣時,纔會判斷第二條件
1
(4)聚合函數
1. count:計算個數
2. max:計算最大值
3. min:計算最小值
4. sum:計算和
5. avg:計算平均值
* 注意:聚合函數的計算,排除null值。
解決方案:
1. 選擇不包含非空的列進行計算
2. IFNULL函數
(5)分組查詢
語法:
group by 列名
1
where 和 having 的區別?
where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
where 後不可以跟聚合函數,having可以進行聚合函數的判斷。
1
2
(6)分頁查詢
- 語法:
limit 開始的索引,每頁查詢的條數
- 公式:
開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
- 注意:
limit 是一個MySQL"方言"瞭解更多產品詳情可點擊加關注