1.數據的存儲形式
內存/文件/第三方服務器/數據庫服務器
2.什么是數據庫
數據庫是按照一定的形式來組織,存儲數據,目的是為了對數據操作——增刪改查
(1)數據庫發展歷史
網狀數據庫->層次型數據庫->關系型數據庫->非關系型數據庫
(2)關系型數據庫邏輯結構
| Server->Database->Table-> Row->Column 服務器 -> 數據庫-> 數據表 ->行 -> 列 |
3.MySQL數據庫
Oracle: MySQL
Martin: MariaDB
XAMPP
| 服務器套裝,包含有多款服務器軟件mysql、apache https://www.apachefriends.org/download.html |
(1)MySQL部署結構
服務器端:負責存儲/維護數據 —— 銀行服務器機房
C:/xampp/mysql/bin/mysqld.exe 啟動文件
確保端口3306不被占用
客戶端:負責連接數據庫,並發起增刪改查——ATM機
C:/xampp/mysql/bin/mysql.exe 客戶端工具
(2)使用客戶端連接服務器端(結尾不能使用分號)
mysql.exe -h127.0.0.1 -P3306 -uroot -p
-h host 服務器的域名/IP地址
-P port 端口號
-u user 用戶名
-p password 密碼
mysql -uroot 簡寫形式
4.mysql常用管理命令(必須以分號結尾)
show databases; 顯示服務器上當前所有的數據庫
quit; 退出連接
use 數據庫名; 進入指定的數據庫
show tables; 顯示當前數據庫中所有的數據表
desc 表名稱; 描述表中有哪些列(表頭)
5.SQL命令
SQL: Stuctured Query Language,結構化查詢語言,用於操作關系型數據庫服務器
SQL命令的兩種執行方式
(1)交互模式:客戶端輸入一行,點擊回車,服務器端執行一行,適用於臨時性的查看數據。
(2)腳本模式: 把要執行的多行SQL命令寫在一個腳本文件中,一次性的提交給服務器執行,適用於批量的操作數據。
mysql -uroot < C:/xampp/…../01.sql 回車
SQL語法規范
(1)一條SQL語句可以跨越多行,以英文的分號結尾。
(2)假如某一條語句出現語法錯誤,則此條語句以及后邊所有的語句不會再執行。
(3)SQL命令不區分大小寫,習慣上數據庫關鍵字用大寫,非關鍵字用小寫。
(4)SQL命令可以使用單行注釋(#...)和多行注釋(/*…*/),注釋的內容不會被服務器所執行
常用的SQL命令
(1)丟棄指定的數據庫,如果存在的話
DROP DATABASE IF EXISTS jd;
(2)創建新的數據庫
CREATE DATABASE jd;
(3)進入創建的數據庫
USE jd;
(4)創建保存數據的表
CREATE TABLE student(
sid INT,
name VARCHAR(8),
sex VARCHAR(1),
score INT
);
(5)插入數據
INSERT INTO student
VALUES(‘1’,’tom’,’M’,’87’);
(6)查詢數據
SELECT * FROM student;
6.常用SQL命令
(1)更改數據
UPDATE user SET
upwd=’888888’,phone=’19912345678’
WHERE uid=’1’;
(2)刪除數據
DELETE FROM user WHERE uid=’2’;
標准SQL語句分類
| DDL: Data Define Language 定義數據結構 CREATE/DROP/ALTER DML: Data Manipulate Language 操作數據 INSERT/UPDATE/DELETE DQL: Data Query Language 查詢數據 SELECT DCL: Data Control Language 控制用戶權限 GRANT(授權)/REVOKE(收權) |
7.計算機存儲字符
(1)如何存儲英文字符
ASCII: 總共有128個,對所有的英文字母和符號進行了編碼。
Latin-1: 總共有256個,兼容ASCII碼,同時對歐洲符號進行了編碼。MySQL默認使用這種編碼。
(2)如何存儲中文字符
GB2312: 對常用的6千多漢字進行了編碼,兼容ASCII碼
GBK: 對2萬多漢字進行了編碼,同時兼容GB2312
Unicode: 對世界上主流國家的常用語言進行了編碼,兼容ASCII碼,不兼容GB2312、GBK。具體分為utf-8,utf-16,utf-32存儲方案。
(3)解決MySQL存儲中文亂碼
SQL腳本另存為的編碼
客戶端連接服務器端的編碼(SET NAMES UTF8)
服務器端創建數據庫使用的編碼(CHARSET=UTF8)
8.mysql中的列類型
創建數據表的時候,指定的列可以存儲的數據類型
CREATE TABLE t1( nid 列類型 );
(1)數值型 引號可加可不加
TINYINT 微整型,占1個字節,范圍-128~127
SMALLINT 小整型,占2個字節,范圍-32768~32767
INT 整型,占4個字節,范圍
-2147483648~2147483647
BIGINT 大整型,占8個字節,范圍很大
FLOAT 單精度浮點型,占4個字節,最多3.4E38,可能產生計算誤差。
DOUBLE 雙精度浮點型,占8個字節,范圍比BIGINT大的多,可能產生計算誤差。
DECIMAL(M,D) 定點小數,不會產生計算誤差,M代表總的有效位數(不包含小數點),D代表小數點后的有效位數
BOOL 布爾型,只有兩個值TRUE、FALSE,真正存儲的時候,列類型會變成TINYINT,TRUE和FALSE變成了1和0,使用的時候也可以直接插入1和0。常用於只有兩個值的數據。 例如性別、是否在線、是否注冊、是否為會員…
注意事項:TRUE和FALSE不能加引號。
(2)日期時間型 必須加引號
DATE 日期型 ‘2019-12-31’
TIME 時間型 ’14:53:30’
DATETIME 日期時間型 ‘2019-12-31 14:53:30’
(3)字符串類型 必須加引號
VARCHAR(M) 變長字符串,不會產生空間浪費,操作速度相同比較慢,M最大值是65535
CHAR(M) 定長字符串,可能存在空間浪費,操作速度比較快,M最大值是255;用於存儲固定長度的數據,例如身份證號碼、手機號碼等。
TEXT(M) 大型變長字符串,M最多2G
|
|
CHAR(5) |
VARCHAR(5) |
| a |
a\0\0\0\0 |
a\0 |
| ab |
ab\0\0\0 |
ab\0 |
| 一 |
一\0\0\0\0 |
一\0 |
| 一二 |
一二\0\0\0 |
一二\0 |
TB GB MB KB Byte Bit
1Byte=8Bit(位)
CREATE TABLE t1(
id INT,
age TINYINT,
commentCount INT,
salary DECIMAL(8,2), #999999.99
phone CHAR(11),
article VARCHAR(5000),
sex BOOL,
ctime DATETIME
);
9.列約束
Mysql在插入數據的時候,進行特定的驗證;只有滿足條件才允許插入,否則被認為是非法插入。
例如:一個人的性別只能是男或者女,一個人的成績0~100
CREATE TABLE t1( eid 列類型 列約束 );
(1)主鍵約束——PRIMARY KEY
聲明了主鍵約束的列上值不能出現重復,一個表中只能有一個主鍵,通常加在編號列,表中查詢的記錄會按照編號從小到大排序,加快查找速度。
注意事項:聲明了主鍵約束后就不允許在插入NULL值。
| NULL 表示空,在插入數據時,無法確定要保存的數據。例如:無法確定員工的生日,工資都可以使用NULL |
