一.數據的存儲方式 特定的文件 / 記憶體 / 第三方雲伺服器 / 資料庫伺服器 二.什麼是資料庫 資料庫按照一定的形式來組織存儲數據,目的是為了便於操作數據 —— 增刪改查 三.資料庫發展歷史 網狀資料庫 -> 層次型資料庫 -> 關係型資料庫 -> 非關係型資料庫(NoSQL) 關係型資料庫邏輯結 ...
一.數據的存儲方式
特定的文件 / 記憶體 / 第三方雲伺服器 / 資料庫伺服器
二.什麼是資料庫
資料庫按照一定的形式來組織存儲數據,目的是為了便於操作數據 —— 增刪改查
三.資料庫發展歷史
網狀資料庫 -> 層次型資料庫 -> 關係型資料庫 -> 非關係型資料庫(NoSQL)
關係型資料庫邏輯結構
Server -> Database -> Table -> Row -> Column
資料庫伺服器 資料庫 數據表 行 列
四.mysql資料庫
oracle:MySQL
馬丁:MariaDB
xampp 伺服器套裝,保護多款伺服器端軟體,包含mysql,.... |
1.mysql部署結構
(1)伺服器端:負責存儲、維護數據 —— 銀行的資料庫伺服器
C:/xampp/mysql/bin/mysqld.exe 啟動文件
占用埠3306
(2)客戶端:負責連接伺服器,對數據進行操作 —— 銀行的ATM機
C:/xampp/mysql/bin/mysql.exe
2.使用客戶端連接伺服器端
mysql.exe -h127.0.0.1 -P3306 -uroot -p
-h 連接的伺服器,IP地址/功能變數名稱 127.0.0.1/localhost 自己電腦的IP地址和功能變數名稱
-P mysql所占用的埠
-u 提供用戶名,root是mysql的管理員賬戶
-p 提供root對應的密碼,xampp下root密碼為空
mysql -uroot 簡寫形式
連接命令結束不能加分號 |
3.常用的管理命令
quit; 退出伺服器的連接
show databases; 顯示所有的資料庫
use 資料庫名稱; 進入指定的資料庫
show tables; 顯示所有的數據表
desc 數據表名稱; 描述指定的數據表的表頭有哪些項
五.SQL命令
結構化查詢語言,用於操作關係型資料庫伺服器,主要對數據進行增刪改查
1.SQL命令運行方式
(1)交互模式
客戶端輸入一行,點擊回車,伺服器就執行一行,適用於臨時性的查看數據。
(2)腳本模式
把要執行的所有命令寫在一個腳本文件中,一次性的提交給伺服器執行,適用於批量的操作數據。
mysql -uroot<拖拽要提交的腳本文件 回車
2.SQL命令的語法規範
(1)一條SQL命令可以跨越多行,以英文的分號作為結束
(2)SQL命令不區分大小寫,習慣上關鍵字大寫,非關鍵字小寫
(3)假設某一條SQL命令出現語法錯誤,則此條命令往後所有命令不再執行
(4)分為單行註釋和多行註釋
-- 單行註釋
#單行註釋
/* 多行註釋 */
六.常見的SQL命令
1.設置客服端連接伺服器端編碼為utf8
set names utf8;
2.丟棄資料庫,如果存在
drop database if exists 資料庫名稱;
3.創建一個新的資料庫,設置存儲字元的編碼為utf8
create database hantang charset=utf8;
4.進入創建的資料庫
use 資料庫名稱;
5.創建數據表
create table 數據表名稱(
列名稱 列類型,
...
);
七.數據操作
1.插入數據
insert into 數據表名稱 values(...);
2.刪除數據
delete from 數據表名稱 where 條件;
3.修改數據
update 數據表名稱 set 列名稱=值, ... where 條件;
4.查詢數據
select * from 數據表名稱;
八.電腦存儲字元
1.如何存儲英文字元
ASCII:對所有的英文及其符號進行編碼,總共有128個
Latin-1:對歐洲字元進行了編碼,總共有256個,相容ASCII;MySQL預設使用這種編碼
2.如何存儲中文字元
GB2312:對6000多漢字進行了編碼,相容ASCII
GBK:對2萬多漢字進行了編碼,相容GB2312
Unicode:對世界上主流國家常用的語言進行了編碼,具體有三種存儲方案,utf-8,utf-16,utf-32
3.解決中文亂碼
(1)確保腳本文件的編碼是utf8
(2)設置客戶端連接伺服器端編碼為utf8
set names utf8;
(3)設置伺服器端創建資料庫存儲字元的編碼為utf8
charset=utf8
4.針對於個別情況,還是出現亂碼
退出交互模式 執行 chcp 65001 將命令行編碼改為utf-8 重新進入交互模式查詢數據 |
MySQL可視化操作
九.列類型
在創建數據表的時候,指定的列存儲的數據類型
create table t1(
nid 列類型
);
1.數值型
tinyint 微整型,占1個位元組,範圍-128~127
smallint 小整型,占2個位元組,範圍-32768~32767
int 整型,占4個位元組,範圍-2147483648~2147483647
bigint 大整型,占8個位元組,範圍
float 單精度浮點型,占4個位元組,存儲的值越大精度越低
double 雙精度浮點型,占8個位元組,存儲的值越大精度越低
decimal(M,D) 定點小數,占16個位元組,M代表總的有效位數,D代表小數點後的位數
boolean 布爾型,只有兩個值,分別是true和false,存儲只有兩個值的數據,例如:性別、是否為會員、是否為推薦商品...
true和false是關鍵字,不能加引號 布爾型在使用的時候會轉為tinyint,true轉為1,false轉為0,也可以直接插入1或者0 |
2.日期時間型
date 日期型 格式 '2022-10-30'
time 時間型 格式 '14:55:30'
datetime 日期時間型 格式 '2022-10-30 14:55:30'
3.字元串型
varchar(M) 變長字元串,不會產生空間浪費,數據操作速度相對慢,常用於存儲變化長度的數據,例如:姓名、文字標題、詳情... M的最大值是65535
char(M) 定長字元串,可能會產生空間浪費,數據操作速度相對快,常用於存儲固定長度的數據,例如:手機號碼、身份證號碼... M的最大值是255
text(M) 大型變長字元串,M的最大值4G
|
varchar(5) |
char(5) |
a |
a\0 |
a\0\0\0\0 |
ab |
ab\0 |
ab\0\0\0 |
一二三 |
一二三\0 |
一二三\0\0 |
選擇合理列類型
create table t1(
id int,
title varchar(64),
birthday date,
age tinyint,
phone char(11),
sex boolean
);
資料庫存儲圖片,存儲的是圖片的路徑 img/1.jpg img/huawei.png |
十列約束
mysql可以對插入的值進行驗證,例如:編號不能出現重覆、性別隻能是男或者女、一個人的成績範圍0~100之間... 只有符合條件才允許插入
create table t1(
pid int 列約束
);
1.主鍵約束 —— primary key
聲明瞭主鍵約束的列上,不允許插入重覆的值,一個表中只能有一個主鍵約束,通常加在編號列,會加快數據的查詢速度
null 表示一個暫時無法確定的值,例如:暫時無法確定商品的價格、無法確定一個員工的手機、家庭住址... null是關鍵字,不能加引號 |
主鍵約束禁止插入null
2.非空約束 —— not null
聲明瞭非空約束的列,禁止插入null
十一.列約束
3.唯一約束 —— unique
聲明瞭唯一約束的列不允許插入重覆的值,一個表中可以使用多次唯一約束
允許插入null,甚至多個null
一旦使用了唯一約束,可能會影響到數據的預設排序 |
4.檢查約束 —— check
也稱為自定義約束,可以自己指定約束條件
create table student(
score tinyint check(score>=0 && score<=100)
);
mysql不支持檢查約束,極大影響數據插入速度。
5.預設值約束 —— default
(1)設置預設值
create table ht_event(
ctime date default '2022-8-31'
);
如果不設置預設值,則為null
(2)應用預設值
①在插入值的位置,使用default關鍵字,就會自動應用預設值
insert into ht_event values(3,'事件測試', default);
②給指定的列提供值,沒有出現的列會自動應用預設值
insert into ht_event(eid, title) values(4,'事件測試');
6.外鍵約束
聲明瞭外界約束的列插入的值必須在另一個表的主鍵列出現,目的確保兩個表之間建立關聯。
外鍵列要和對應的主鍵列的類型要保持一致
foreign key(外鍵列) references 另一個表(主鍵列)
十二.自增列
auto_increment:自動增長,聲明瞭自增列,只需要賦值為null,就會獲取最大值然後加1插入
註意事項:必須添加在整數型的主鍵列
十三.簡單查詢