數據庫基本概念&MySQL基本操作詳解

本人小白,大部份內容來自於網絡或書本,再加一點自己的見解總結,在此向各位巨人致敬

數據

數據的定義:
1. 數據是對客觀事實的符號表示
2. 在計算機領域數據通常是指由能被計算機識別與處理的數值、字符等符號構成的集合

數據庫管理系統(DBMS)的分類

  1. 關係型數據庫:支持關係模型,其關係模型由關係數據結構、關係操作集合、完整性約束三部分組成。常見的有oracle,mysql,SQLserver等

  2. 非關係型數據庫:常見的有redis,MongoDB等

  3. 兩者的區別:

關係型數據的運算

笛卡爾積:笛卡爾乘積是指在數學中,兩個集合X和Y的笛卡尓積(Cartesian product),又稱直積,表示爲X × Y,第一個對象是X的成員而第二個對象是Y的所有可能有序對的其中一個成員

  1. 選擇(where):選擇是對關係的水平分解運算,通俗一點就是提取行
    σf(R)={t|t∈R∧F(t)=TRUE}
    解釋:選擇t,t屬於R且F(t)爲真。(即在R中選取滿足f條件的元組)
    select * from R where f(t)==true;

  2. 投影(select):投影是對關係的垂直分解運算,即選擇關係集中的屬性子集,通俗一點就是提取列。
    πA(R) = { t[A] | t∈R }
    select A from R

  3. 連接:連接也稱爲θ連接,它是從兩個關係的笛卡兒積中選取屬性間滿足一定條件的元組。

    1. 等值連接和自然連接(元組行參照座標)
      • 等值連接:廣義上它是從笛卡爾集中選取R1中某指定列和R2中某指定列相等的元組。
        select * from R1,R2 where R1.A=R2.B;
      • 自然連接:特殊的等值連接,要求用於連接的屬性相同。
        select * from R1,R2 where R1.A=R2.A;

    2. 外鏈接
        -

數據庫的組成

  1. 數據庫系統
  2. 數據庫
  3. 數據表
  4. 數據表字段
  5. 數據

mysql安裝

參見,免安裝版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;#設置引擎,默認字符集,還可以給自增賦初始值

搜索引擎

  1. InnoDB:支持事務,採用的是行鎖,對於數據的增刪改操作效率高,包括了對事務處理和外來鍵的支持

  2. MyISAM:不支持事務,採用的是表鎖,對於數據的查詢效率高,常用於查詢操作比較多的web項目

  3. 兩者的區別:

    1. MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,常被認爲用於小型項目

    2. InnoDB提供事務支持事務,外部鍵等高級數據庫功能

  4. 對引擎的操作:

    1. show engines; 查看數據庫系統支持的存儲引擎

    2. show variables like ‘storage_engine%’; 查看當前系統默認的存儲引擎

    3. 修改默認引擎-my.ini

    4. 設置表引擎參看上一案例

函數

數學函數:

函數 描述
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  

NAVH-WK6A-DMVK-DKW3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章