本人小白,大部份內容來自於網絡或書本,再加一點自己的見解總結,在此向各位巨人致敬
數據
數據的定義:
1. 數據是對客觀事實的符號表示
2. 在計算機領域數據通常是指由能被計算機識別與處理的數值、字符等符號構成的集合
數據庫管理系統(DBMS)的分類
- 關係型數據庫:支持關係模型,其關係模型由關係數據結構、關係操作集合、完整性約束三部分組成。常見的有oracle,mysql,SQLserver等
- 非關係型數據庫:常見的有redis,MongoDB等
- 兩者的區別:
關係型數據的運算
笛卡爾積:笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示爲X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員
- 選擇(where):選擇是對關係的水平分解運算,通俗一點就是提取行
σf(R)={t|t∈R∧F(t)=TRUE}
解釋:選擇t,t屬於R且F(t)爲真。(即在R中選取滿足f條件的元組)
select * from R where f(t)==true;
- 投影(select):投影是對關係的垂直分解運算,即選擇關係集中的屬性子集,通俗一點就是提取列。
πA(R) = { t[A] | t∈R }
select A from R
連接:連接也稱爲θ連接,它是從兩個關係的笛卡兒積中選取屬性間滿足一定條件的元組。
- 等值連接和自然連接(元組行參照座標)
- 等值連接:廣義上它是從笛卡爾集中選取R1中某指定列和R2中某指定列相等的元組。
select * from R1,R2 where R1.A=R2.B; - 自然連接:特殊的等值連接,要求用於連接的屬性相同。
select * from R1,R2 where R1.A=R2.A;
- 等值連接:廣義上它是從笛卡爾集中選取R1中某指定列和R2中某指定列相等的元組。
- 外鏈接
- -
- 等值連接和自然連接(元組行參照座標)
數據庫的組成
- 數據庫系統
- 數據庫
- 數據表
- 數據表字段
- 數據
mysql安裝
SQL(結構化查詢語言)
SQL分類:DDL數據定義語言,DML數據操作語言,DQL數據查詢語言,DCL數據控制語言
DDL數據定義語言:用來操作數據庫和數據庫對象
1. show databases; :查看數據庫系統裏的所在數據庫
2. create database 數據庫名; :建立一個數據庫
3. use 數據庫名; :使用一個數據庫
4. show tables; :查看數據庫裏面的所有數據表
5. create table 表名(字段 字段類型,。。。) :創建表
6. drop database 數據庫名;:刪除數據庫
7. drop table 表名; :刪除數據庫表
8. desc 表名;:查看錶結構字段
9. alter table 表名 modify 字段名 字段類型;: 修改表字段類型
10. alter table 表名 change 原字段名 修改字段名 字段類型;:修改表字段
11. alter table 表名 add 字段名 類型 after 字段;:添加字段到自定字段後
12. alter table 表名 rename 新表名; :修改表名
DML數據操作語言:用來修改表中的數據
1. insert into 表名 values(對應值),(值);:插入一條或多條數據
2. insert into 表名(字段1,字段2,。。。)values(值1,值2,。。。);:插入指定字段數據到表中
3. delete from 表名 where 字段=值;:從表中刪除一條數據
4. update 表名 set 字段1=值1,字段2=值2,。。。where 字段=值;:修改
DQL數據查詢語言
1. select * from 表名;:查詢表裏所有數據
2. select 字段1,字段2,。。。 from 表名; :查詢指定字段
3. where條件查詢:
1. 關係型查詢:<> <= >= !=
2. 邏輯 :or and
3. 區間: in() ,between a and b
4. 模糊: like '%條件%';
4. 規則:
1. group by 字段
2. order by 字段 ASC:升序(默認),DESC:降序。
3. limit 0,5
DCL數據控制語句:用來定義訪問權限和安全級別
1. 創建用戶:create user '用戶名'@'主機名' identified by '密碼';
2. 授權:grant all on 數據名.表名 to '用戶名'@'主機名';
3. 取消權限:revoke all on *.* from '用戶名'@'主機名';
4. 刪除用戶:drop user '用戶名'@'主機名';
5. 查看用戶的權限:show grants [for '用戶名'@'主機名']
*注:如果for後面的內容不寫,默認查看當前用戶,寫的話查看指定用戶的權限
> 說明:
all:所有的權限
*:代表所有的庫或表
%:模糊查詢
TCL事務控制語句:用於維護數據的一致性
1. set autocommit=0;/begin; 開啓事務
2. rollback; 回滾
3. commit; 手動提交事務
數據類型
number類型:
類型 | 字節數 | 範圍(有符號) | 無符號 | 描述 |
---|---|---|---|---|
TINYINT | 1 字節 | (-128,127) | (0,255) | 小整數值 |
SMALLINT | 2 字節 | (-32 768,32 767) | (0,65 535) | 大整數值 |
MEDIUMINT | 3 字節 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整數值 |
INT或INTEGER | 4 字節 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
BIGINT | 8 字節 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 極大整數值 |
FLOAT | 4 字節 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 單精度浮點數值 |
DOUBLE | 8 字節 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 雙精度浮點數值 |
DECIMAL | 對DECIMAL(M,D) ,如果M>D,爲M+2否則爲D+2 | 依賴於M和D的值 | 依賴於M和D的值 | 小數值 |
字符型:
類型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255字節 | 定長字符串 |
VARCHAR | 0-65535 字節 | 變長字符串 |
TINYBLOB | 0-255字節 | 不超過 255 個字符的二進制字符串 |
TINYTEXT | 0-255字節 | 短文本字符串 |
BLOB | 0-65 535字節 | 二進制形式的長文本數據 |
TEXT | 0-65 535字節 | 長文本數據 |
MEDIUMBLOB | 0-16 777 215字節 | 二進制形式的中等長度文本數據 |
MEDIUMTEXT | 0-16 777 215字節 | 中等長度文本數據 |
LONGBLOB | 0-4 294 967 295字節 | 二進制形式的極大文本數據 |
LONGTEXT | 0-4 294 967 295字節 | 極大文本數據 |
DATA類型:
類型 | 大小 | 範圍 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/’838:59:59’ | HH:MM:SS | 時間值或持續時間 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 | 23:59:59 | YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 | 年某時 YYYYMMDD HHMMSS | 混合日期和時間值,時間戳 |
約束條件&關鍵字
名稱 | 描述 |
---|---|
PRIMARY KEY | (主鍵) |
NOT NULL | (非空) |
AUTO_INCREMENT | (自增長) |
UNIQUE | (值唯一) |
FOREING KEY | (外鍵) |
DEFAULT | (默認值) |
zerofill | 使用0去填充(如int(4),1的表示0001) |
unsigned | 無符號(限定大於零) |
comment | 解釋說明(類似於註釋) |
案例:
CREATE TABLE yuesu(
id int(4) PRIMARY KEY AUTO_INCREMENT,#主鍵約束,設置自增
name VARCHAR(8) NOT NULL,#不爲空
shoolId int(4) UNIQUE ,#設置唯一約束
bronData DATE DEFAULT '1990-01-01',#設置默認值
card INT(11),
CONSTRAINT key_1 FOREIGN KEY (card) REFERENCES te(id)#設置外鍵約束
)ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1000;#設置引擎,默認字符集,還可以給自增賦初始值
搜索引擎
InnoDB:支持事務,採用的是行鎖,對於數據的增刪改操作效率高,包括了對事務處理和外來鍵的支持
MyISAM:不支持事務,採用的是表鎖,對於數據的查詢效率高,常用於查詢操作比較多的web項目
兩者的區別:
MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,常被認爲用於小型項目
InnoDB提供事務支持事務,外部鍵等高級數據庫功能
對引擎的操作:
show engines; 查看數據庫系統支持的存儲引擎
show variables like ‘storage_engine%’; 查看當前系統默認的存儲引擎
修改默認引擎-my.ini
- 設置表引擎參看上一案例
函數
數學函數:
函數 | 描述 |
---|---|
ABS(x) | 返回x的絕對值 |
BIN(x) | 返回x的二進制(OCT返回八進制,HEX返回十六進制) |
CEILING(x) | 返回大於x的最小整數值 |
EXP(x) | 返回值e(自然對數的底)的x次方 |
FLOOR(x) | 返回小於x的最大整數值 |
GREATEST(x1,x2,…,xn) | 返回集合中最大的值 |
LEAST(x1,x2,…,xn) | 返回集合中最小的值 |
LN(x) | 返回x的自然對數 |
LOG(x,y) | 返回x的以y爲底的對數 |
MOD(x,y) | 返回x/y的模(餘數) |
PI() | 返回pi的值(圓周率) |
RAND() | 返回0到1內的隨機值,可以通過提供一個參數(種子)使RAND()隨機數生成器生成一個指定的值。 |
ROUND(x,y) | 返回參數x的四捨五入的有y位小數的值 |
SIGN(x) | 返回代表數字x的符號的值 |
SQRT(x) | 返回一個數的平方根 |
TRUNCATE(x,y) | 返回數字x截短爲y位小數的結果 |
聚合函數(常用於統計一個列,常通過group by)
函數名 | 描述 |
---|---|
AVG(col) | 返回指定列的平均值 |
COUNT(col) | 返回指定列中非NULL值的個數 |
MIN(col) | 返回指定列的最小值 |
MAX(col) | 返回指定列的最大值 |
SUM(col) | 返回指定列的所有值之和 |
GROUP_CONCAT(col) | 返回由屬於一組的列值連接組合而成的結果 |
字符串函數
函數名 | 描述 |
---|---|
ASCII(char) | 返回字符的ASCII碼值 |
BIT_LENGTH(str) | 返回字符串的比特長度 |
CONCAT(s1,s2…,sn) | 將s1,s2…,sn連接成字符串 |
CONCAT_WS(sep,s1,s2…,sn) | 將s1,s2…,sn連接成字符串,並用sep字符間隔 |
INSERT(str,x,y,instr) | 將字符串str從第x位置開始,y個字符長的子串替換爲字符串instr,返回結果 |
FIND_IN_SET(str,list) | 分析逗號分隔的list列表,如果發現str,返回str在list中的位置 |
LCASE(str)或LOWER(str) | 返回將字符串str中所有字符改變爲小寫後的結果 |
LEFT(str,x) | 返回字符串str中最左邊的x個字符 |
LENGTH(s) | 返回字符串str中的字符數 |
LTRIM(str) | 從字符串str中切掉開頭的空格 |
POSITION(substr,str) | 返回子串substr在字符串str中第一次出現的位置 |
QUOTE(str) | 用反斜槓轉義str中的單引號 |
REPEAT(str,srchstr,rplcstr) | 返回字符串str重複x次的結果 |
REVERSE(str) | 返回顛倒字符串str的結果 |
RIGHT(str,x) | 返回字符串str中最右邊的x個字符 |
RTRIM(str) | 返回字符串str尾部的空格 |
STRCMP(s1,s2) | 比較字符串s1和s2 |
TRIM(str) | 去除字符串首部和尾部的所有空格 |
UCASE(str)或UPPER(str) | 返回將字符串str中所有字符轉變爲大寫後的結果 |
DATA函數
函數名 | 描述 |
---|---|
CURDATE()或CURRENT_DATE() | 返回當前的日期 |
CURTIME()或CURRENT_TIME() | 返回當前的時間 |
DATE_ADD(date,INTERVAL int keyword) | 返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:SELECTDATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH); |
DATE_FORMAT(date,fmt) | 依照指定的fmt格式格式化日期date值 |
DATE_SUB(date,INTERVAL int keyword) | 返回日期date加上間隔時間int的結果(int必須按照關鍵字進行格式化),如:SELECTDATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH); |
DAYOFWEEK(date) | 返回date所代表的一星期中的第幾天(1~7) |
DAYOFMONTH(date) | 返回date是一個月的第幾天(1~31) |
DAYOFYEAR(date) | 返回date是一年的第幾天(1~366) |
DAYNAME(date) | 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE); |
FROM_UNIXTIME(ts,fmt) | 根據指定的fmt格式,格式化UNIX時間戳ts |
HOUR(time) | 返回time的小時值(0~23) |
MINUTE(time) | 返回time的分鐘值(0~59) |
MONTH(date) | 返回date的月份值(1~12) |
MONTHNAME(date) | 返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE); |
NOW() | 返回當前的日期和時間 |
QUARTER(date) | 返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE); |
WEEK(date) | 返回日期date爲一年中第幾周(0~53) |
YEAR(date) | 返回日期date的年份(1000~9999) |
加密函數
函數名 | 描述 |
---|---|
AES_ENCRYPT(str,key) | 返回用密鑰key對字符串str利用高級加密標準算法加密後的結果,調用AES_ENCRYPT的結果是一個二進制字符串,以BLOB類型存儲 |
AES_DECRYPT(str,key) | 返回用密鑰key對字符串str利用高級加密標準算法解密後的結果 |
DECODE(str,key) | 使用key作爲密鑰解密加密字符串str |
ENCRYPT(str,salt) | 使用UNIXcrypt()函數,用關鍵詞salt(一個可以惟一確定口令的字符串,就像鑰匙一樣)加密字符串str |
ENCODE(str,key) | 使用key作爲密鑰加密字符串str,調用ENCODE()的結果是一個二進制字符串,它以BLOB類型存儲 |
MD5() | 計算字符串str的MD5校驗和 |
PASSWORD(str) | 返回字符串str的加密版本,這個加密過程是不可逆轉的,和UNIX密碼加密過程使用不同的算法。 |
SHA() | 計算字符串str的安全散列算法(SHA)校驗和 |
數據庫導入和導出
- 導出數據
// 導出test 數據庫 -R 表示導出函數和存儲過程,加上使導出更完整
mysqldump -u root -p -R test > test.sql
// 導出test數據庫中user表
mysqldump -u root -p test user > test_user.sql
- 導入數據
方法1:
mysql -u root -p
mysql>use test
mysql>source test.sql
方法2:
mysql -u root -p test < test.sql
Navicat 激活碼
NAVH-WK6A-DMVK-DKW3