程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL學習筆記

MySQL學習筆記

編輯:MySQL綜合教程

MySQL學習筆記


1、關系型數據庫管理系統 RDBMS(Relational Database Management System)

1.1、關系型數據庫的三大范式 范式簡單的說就是,一張數據表的表結構所符合的某種設計標准的級別。 第一范式(1NF):符合1NF的關系中的每個屬性都不可再分。

第二范式(2NF):2NF在1NF的基礎之上,消除了非主屬性對於碼的部分函數依賴。

第三范式(3NF):3NF在2NF的基礎之上,消除了非主屬性對於碼的傳遞函數依賴。

簡單理解: 第一范式:屬性不可分割。(屬性就是表中的字段)

第二范式:要有主鍵,要求其他字段都依賴於主鍵。(附:主鍵的判斷辦法,如果主鍵確定了,其他所有的鍵就確定了)

第三范式:要消除傳遞依賴,方便理解,可以看做是“消除冗余”。

1.2、術語 數據庫:表的集合 數據表:數據矩陣 行: 列: 主鍵:主鍵是唯一的。一張表中只能包含一個主鍵。主要用來查詢。 外鍵:用於關聯兩個表。 索引:對表中一列或多列數據進行排序的結構。

2、安裝MySQL Linux/UNIX 平台 MySQL - MySQL服務器。你需要該選項,除非你只想連接運行在另一台機器上的MySQL服務器。 MySQL-client - MySQL 客戶端程序,用於連接並操作Mysql服務器。 MySQL-devel - 庫和包含文件,如果你想要編譯其它MySQL客戶端,例如Perl模塊,則需要安裝該RPM包。 MySQL-shared - 該軟件包包含某些語言和應用程序需要動態裝載的共享庫(libmysqlclient.so*),使用MySQL。 MySQL-bench - MySQL數據庫服務器的基准和性能測試工具。

Windows 平台 下載安裝包

3、數據類型
類型 大小 范圍(有符號) 范圍(無符號) 用途 備注 TINYINT 1 字節 (-128, 127) (0, 255) 小整數值   SMALLINT 2 字節 (-32768, 32767) (0, 65535) 大整數值   MEDIUMINT 3 字節 (-8388608, 8388607) (0, 16777215) 大整數值   INT 或 INTEGER 4 字節 (-2147483648, 2147483647) (0, 4294967295) 大整數值   BIGINT 8 字節 (-9233372036854775808 , 9223372036854775807) (0, 18446744073709551615) 極大整數值   FLOAT 4 字節 (-3.402823466E+38, 1.175494351E-38) , 0 , (1.175494351E-38, 3.402823466351E+38) 0 , (1.175494351E-38, 3.402823466E+38) 單精度 浮點數值   DOUBLE 8 字節 (1.7976931348623157E+308, 2.2250738585072014E-308) , 0 , (2.2250738585072014E-308, 1.7976931348623157E+308) 0 , (2.2250738585072014E-308, 1.7976931348623157E+308) 雙精度 浮點數值   DECIMAL 對 DECIMAL(M, D) 如果 M > D, 為 M+2, 否則為 D+2 依賴於 M 和 D 的值 依賴於 M 和 D 的值 小數值   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 8 字節 1970-01-01 00:00:00/2037 年某時   混合日期和時間值,時間戳 YYYYMMDD HHMMSS CHAR 0-255 字節     定長字符串   VARCHAR 0-255 字節     變長字符串   TINYBLOB 0-255 字節     不超過 255 個字符的二進制字符串   TINYTEXT 0-255 字節     短文本字符串   BLOB 0-65535 字節     二進制形式的長文本數據   TEXT 0-65535 字節     長文本數據   MEDIUMBLOB 0-16777215 字節     二進制形式的中等長度文本數據   MEDUIMTEXT 0-16777215 字節     中等長度文本數據   LONGBLOB 0-4294967295 字節     二進制形式的極大文本數據   LONGTEXT 0-4294967295 字節     極大文本數據  
4、常用命令 分類 說明 命令 備注 連接 登錄服務器 mysql -h1.2.3.4 -u root -p   顯示 庫列表 SHOW DATABASES     表列表 SHOW TABLES     表的結構 SHOW CREATE TABLE table_name DESCRIBE table_name     表的屬性信息 SHOW COLUMNS FROM table_name     表的索引信息 SHOW INDEX FROM table_name     表的狀態信息 SHOW STATUS LIKE 'table_name'     服務器 的狀態信息 SHOW STATUS     服務器配置信息 SHOW VARIABLES     服務器的版本信息 SELECT VERSION()     當前庫名 SELECT DATABASE()     當前用戶名 SELECT USER()   選擇 庫 USE database_name   新建 庫 CREATE DATABASE database_name     表 CREATE TABLE table_name (column_name column_type)     臨時表 CREATE TEMPORARY TABLE table_name (column_name column_type) 臨時表只在當前連接有效,連接斷開後,臨時表自動銷毀。 插入 行 INSERT INTO table_name (field1, field2, ...fieldN)
VALUES
(value1, value2, ...valueN)   刪除 庫 DROP DATABASE database_name     行 DELETE FROM table_name [WHERE clause_etc]     表 DROP TABLE table_name   查詢 行 SELECT field1, field2, ...fieldN FROM table_name1, table_name2, ... [WHERE clause_etc] [OFFSET M] [LIMIT N]   查詢( 聯表) 行(內聯結) 隱式: SELECT table1.column table2.column FROM table1, table2 WHERE table1.column2 = table2.column2 顯式: SELECT table1.column FROM table1 INNER JOIN table2 ON table1.column2 = table2.column2 僅支持 SELECT UPDATE DELETE   行(外左聯結) SELECT table1.column FROM table1 LEFT JOIN table2 ON table1.column2 = table2.column2 table1 中的記錄全部保留,如果 table2 中無對應的,則默認留空   行(外右聯結) SELECT table1.column FROM table1 RIGHT JOIN table2 ON table1.column2 = table2.column2 table2 中的記錄全部保留,如果 table1 中無對應的,則默認留空 更新 行 UPDATE table_name SET field1=value1, field2=value2 [WHERE clause_etc]   修改 添加列 ALTER TABLE table_name ADD column_name type ALTER TABLE table_name ADD column_name type FIRST
ALTER TABLE table_name ADD column_name type AFTER column2 添加到最後一列 (默認) 添加到第一列 添加到指定列 column2 之後   刪除列 ALTER TABLE table_name DROP column_name     修改列(類型) ALTER TABLE table_name MODIFY column_name type 只修改列字段的類型   修改列(名稱) ALTER TABLE table_name CHANGE old_column column_name type 同時修改列字段的名稱和類型   表 ALTER TABLE table_name RENAME TO table_name2 修改表名 限定條件 偏移量 OFFSET offset_number     行數 LIMIT limit_number     任意條件 WHERE clause_etc     正則表達式 WHERE column REGEXP 'exp'   排序 升序 ASC     降序 DESC   索引 列 CREATE [UNIQUE] INDEX index_name ON table_name(column(length)) ALTER table_name ADD [UNIQUE] INDEX [index_name] ON ( column(length)) DROP INDEX [index_name] ON table_name column 如果是 CHAR, VCHAR 類型,length 可以小於字段長度; 如果是 BLOB, TEXT 類型,必須指定 length。   列(組合)            
5、操作符 下表中,假設 A=10 B=20 操作符 描述 實例 = 等號,檢測兩個值是否相等,如果是返回true (A = B) 返回false <>, != 不等於,檢測兩個值是否不相等,如果是返回true (A != B) 返回true > 大於,檢測左邊的值是否大於右邊的值,如果是返回true (A > B) 返回false < 小於,檢測左邊的值是否小於右邊的值,如果是返回true (A < B) 返回true >= 大於等於,檢測左邊的值是否大於等於右邊的值,如果是返回true (A >= B) 返回false <= 小於等於,檢測左邊的值是否小於等於右邊的值,如果是返回true (A <= B) 返回true IS NULL 檢測值是否為NULL   IS NOT NULL 檢測值是否不為NULL  
6、連接符 操作符 描述 備注 AND 連接兩個條件,表示左邊與右邊的條件必須同時成立,結果才成立   OR 連接兩個條件,表示左邊與右邊的條件任意一個成立,結果就成立   LIKE 條件匹配,通常與 % 一起使用達到模糊查詢的效果 WHERE feild LIKE '%abc'
7、正則表達式 模式 描述 備注 ^ 匹配輸入字符的 開始位置。如果設置了 RegExp 對象的 Multiline 屬性, ^ 也匹配 '\n' 或 '\r' 之後的位置。   $ 匹配輸入字符的結束位置。如果設置了 RegExp 對象的 Multiline 屬性, ^ 也匹配 '\n' 或 '\r' 之前的位置。   [...] 字符集合。匹配所包含的任意一個字符。 例如,'[abc]' 可以匹配 'plain' 中的 'a'。 . 匹配除 '\n' 之外的任何單個字符。 要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。 [^...] 負值字符集合。匹配未包含的任意字符。 例如,'[^abc]' 可以匹配 'plain' 中的 'p' 'l' 'i' 'n' {n} n 是一個非負整數。 匹配前面表達式確定的 n 次。 例如,'o{2}' 能匹配 'food' {n, m} m n 均為非負整數,其中 n <= m。 匹配前面表達式最少 n 次,最多 m 次。   p1|p2 匹配 p1 或 p2。 例如,'z|food' 能匹配 'z' 或 'food' * 匹配前面的子表達式零次或多次 。 等價於 {0,} 例如,'zo*' 能匹配 'z' 'ozz'。 + 匹配前面的子表達式一次或多次。
等價於 {1,}  
8、事務 用來保證一組 sql 命令,全部執行,如果失敗回滾到執行前的狀態。 事務必須滿足4個條件(ACID):Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、durability(可靠性) 在 MySQL 中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務。

9、序列 使用關鍵詞 AUTO_INCREMENT 來定義一個整數列自增。

10、SQL 注入 防止 SQL 注入,需要注意以下幾點:

永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則,或限制長度;對單引號和雙"-"進行轉換等。

永遠不要使用動態拼裝 sql,可以使用參數化的 sql 或者直接使用存儲過程進行數據查詢存取。

永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。

不要把機密信息直接存放,加密或者 hash 掉密碼和第三的信息。

應用的異常信息應該給出盡可以少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。

sql 注入的檢測方法一般采取輔助軟件或網站平台來檢測,軟件一般采用 sql 注入檢測工具。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved