資料庫概述 本菜鳥使用的資料庫軟體為Mariadb,以下內容都是以Mariadb資料庫軟體來寫的學習總結。 資料庫 所謂的資料庫就是用於存儲、管理數據的倉庫,資料庫根據底層存儲數據結構的不同可以分為很多類,但現在流行的是關係型資料庫和非關係型資料庫。 關係型資料庫 關係型資料庫底層是以二維表的形式保 ...
資料庫概述
本菜鳥使用的資料庫軟體為Mariadb,以下內容都是以Mariadb資料庫軟體來寫的學習總結。
資料庫
所謂的資料庫就是用於存儲、管理數據的倉庫,資料庫根據底層存儲數據結構的不同可以分為很多類,但現在流行的是關係型資料庫和非關係型資料庫。
關係型資料庫
關係型資料庫底層是以二維表的形式保存數據的資料庫。(模型就是我們常使用的表格)
常用的關係型資料庫有SQL server 、Oracle、Mysql、Mariadb 以及DB2。
非關係型資料庫
非關係型資料庫底層是key-value結構。
資料庫名詞解釋
資料庫伺服器
安裝的mysql伺服器軟體,將資料庫伺服器軟體安裝在電腦上才可以對外提供服務。
資料庫
一個資料庫伺服器可以有很多個資料庫,但是一般情況下一個網站的所有數據會存放在一個資料庫當中。
表(數據表)
一個資料庫中可以有多個表,一般情況下,一類型的數據會存放在一張表中,比如跟用戶相關的數據可以存放在用戶表中。
在Java中一個類封裝一類型信息,因此就像Java中一個類對應一張表。
表記錄
一張表中可以有多個記錄(可以將一行稱為一條記錄信息)。
在Java中一個類可以創建多個實例,就像Java中的一個實例對應一條表記錄。
資料庫中的數據類型
數值類型
資料庫中的數值類型跟Java中整型數據類型一一對應,而這提到的資料庫常用數值類型有:int和double,名字不一定一樣,但資料庫中的int 和double類型跟Java中一樣。
int占用4個位元組
double 占用8個位元組
字元串類型
mysql中包含的字元串類型並不是Java中的String,而是char和varchar兩種。
char和varchar的區別
char(n) 為定義字元串長度,數據的長度可以小於等於n個字元,但是當數據的字元數小於定義的字元串長度時,char會在數據後面補齊數據長度,也就是說不管你存儲的數據是否達到了定義長度,最後的字元串長度始終為定義的長度。
varchar(n)也為定義字元串長度,數據長度同樣可以小於等於n個字元,與char不同的是當你存儲的數據不足定義的長度時,varchar會把多出來的空間讓出來,數據字元個數是多少,字元串長度就是多少。
說了區別再說一下優缺點:char存儲數據的速度會比varchar快,但是可能會有空間浪費;varchar存儲數據比char慢,但是不會有空間浪費。
大文本類型
Text 0-65535個位元組長度
bigtext 4GB位元組長度
日期類型
date
date類型格式為:年月日
time
time類型格式為:時分秒
datetime
datetime類型格式為:年月日 時分秒
timestamp
時間戳(存的是1970-1-1到指定日期的毫秒值,但是看著還是日期時間格式
timestamp類型的類可以設置自動更新為當前時間,而datetime不行。
Mariadb內的資料庫里表的增刪查改操作語法
在操作語句中只有少部分語句可以結尾不加分號,為了便捷操作,將所有語句結束都加上分號
通過cmd連接mysql
在cmd命令中輸入:mysql -uroot -proot(根據安裝時的設置來連接)
查看mysql伺服器中的資料庫
show databases;
進去某一資料庫(進入資料庫後才能操作庫中的表和表記錄)
use 資料庫名;
查看進入的資料庫名:select database();
查看當前資料庫中的所有表
show tables;
刪除某一資料庫
drop database 庫名;
判斷是否存在這個庫,若不存在什麼都不做
drop database if exists 庫名;
創建資料庫,指定編碼為utf8
create database 庫名 charset utf8;
查看建庫時的語句(並驗證資料庫使用的編碼)
show create database 庫名;
刪除資料庫中的表
drop table 表名;
資料庫中創建表
create table 表名(
列名 數據類型,
列名 數據類型,
......
);
查看表結構
desc 表名;
查詢建表語句
show create table 表名;
在表中插入數據
insert into 表名(列1,列2,列3...) values(值1,值2,值3...);列跟值要一一對應
查詢表中所有信息
select * from 表名;
查詢指定列
select 列名,列名 from 表名;
修改表中的數據
update 表名 set 列=值;
刪除表中所有表記錄
delete from 表名;
將表摧毀再重新創建
truncate table stu;
有一張表,表中的id列為整值類型,email列,gender列
思考1:如果id是編號,編號應該是唯一的且不能為空,如何保證這一點?
1.主鍵約束
如果為一個列添加了主鍵約束,該列就是這張表的主鍵,主鍵要求唯一且不能為空。添加主鍵約束的語法是:
create table stu(
id int primary key,
...
);
2.唯一約束
如果為一個列添加了唯一約束,該列的值就不能重覆(但是可以為null), 添加唯一約束的語法是:
create table user(
email varchar(50) unique,
...
);
3.非空約束
如果為一個列添加了非空約束,該列的值就不能為空(但是可以重覆), 添加非空約束的語法是:
create table stu(
gender varchar(2) not null,
...
);
思考2:在插入數據時,如何保證插入的id不會因為重覆而報錯?
如果id(主鍵)是數值類型, 可以設置主鍵自增機制, 讓資料庫幫我們維護id的值, 即我們在插入記錄時, 可以不用給id賦值, 只需要給一個null, 資料庫會通過自身保存的變數給id賦值!
create table stu(
id int primary key auto_increment,
...
);
思考3:如果id主鍵設置了自增後,在插入數據時,是否可以設置id的值?
即使id設置了自增, 也可以在插入數據時為id賦值。
如果賦的id的值比自增變數的值要大,結果是將賦的id值加1後賦值給自增變數