在數據庫中,我們可以做許許多多的事情,比如給用戶授予權限,設計數據庫等等。今天我們就來介紹一下設計數據庫及授予權限的方法。
權限及設計數據庫
用戶管理
使用sqlyog 創建用戶,并授予權限演示
基本命令
/*?用戶和權限管理?*/?------------------ 用戶信息表:mysql.user --?刷新權限 FLUSH?PRIVILEGES ? --?增加用戶??CREATE?USER?kuangshen?IDENTIFIED?BY?'123456' CREATE?USER?用戶名?IDENTIFIED?BY?[PASSWORD]?密碼(字符串) ????-?必須擁有mysql數據庫的全局CREATE?USER權限,或擁有INSERT權限。 ????-?只能創建用戶,不能賦予權限。 ????-?用戶名,注意引號:如?'user_name'@'192.168.1.1' ????-?密碼也需引號,純數字密碼也要加引號 ????-?要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定為由PASSWORD()函數返回的混編值,需包含關鍵字PASSWORD --?重命名用戶??RENAME?USER?kuangshen?TO?kuangshen2 RENAME?USER?old_user?TO?new_user --?設置密碼 SET?PASSWORD?=?PASSWORD('密碼')????--?為當前用戶設置密碼 SET?PASSWORD?FOR?用戶名?=?PASSWORD('密碼')????--?為指定用戶設置密碼 --?刪除用戶??DROP?USER?kuangshen2 DROP?USER?用戶名 --?分配權限/添加用戶 GRANT?權限列表?ON?表名?TO?用戶名?[IDENTIFIED?BY?[PASSWORD]?'password'] ????-?all?privileges?表示所有權限 ????-?*.*?表示所有庫的所有表 ????-?庫名.表名?表示某庫下面的某表 --?查看權限???SHOW?GRANTS?FOR?root@localhost; SHOW?GRANTS?FOR?用戶名 ????--?查看當前用戶權限 ????SHOW?GRANTS;?或?SHOW?GRANTS?FOR?CURRENT_USER;?或?SHOW?GRANTS?FOR?CURRENT_USER(); --?撤消權限 REVOKE?權限列表?ON?表名?FROM?用戶名 REVOKE?ALL?PRIVILEGES,?GRANT?OPTION?FROM?用戶名????--?撤銷所有權限
權限解釋
--?權限列表 ALL?[PRIVILEGES]????--?設置除GRANT?OPTION之外的所有簡單權限 ALTER????--?允許使用ALTER?TABLE ALTER?ROUTINE????--?更改或取消已存儲的子程序 CREATE????--?允許使用CREATE?TABLE CREATE?ROUTINE????--?創建已存儲的子程序 CREATE?TEMPORARY?TABLES????????--?允許使用CREATE?TEMPORARY?TABLE CREATE?USER????????--?允許使用CREATE?USER,?DROP?USER,?RENAME?USER和REVOKE?ALL?PRIVILEGES。 CREATE?VIEW????????--?允許使用CREATE?VIEW DELETE????--?允許使用DELETE DROP????--?允許使用DROP?TABLE EXECUTE????????--?允許用戶運行已存儲的子程序 FILE????--?允許使用SELECT...INTO?OUTFILE和LOAD?DATA?INFILE INDEX?????--?允許使用CREATE?INDEX和DROP?INDEX INSERT????--?允許使用INSERT LOCK?TABLES????????--?允許對您擁有SELECT權限的表使用LOCK?TABLES PROCESS?????--?允許使用SHOW?FULL?PROCESSLIST REFERENCES????--?未被實施 RELOAD????--?允許使用FLUSH REPLICATION?CLIENT????--?允許用戶詢問從屬服務器或主服務器的地址 REPLICATION?SLAVE????--?用于復制型從屬服務器(從主服務器中讀取二進制日志事件) SELECT????--?允許使用SELECT SHOW?DATABASES????--?顯示所有數據庫 SHOW?VIEW????--?允許使用SHOW?CREATE?VIEW SHUTDOWN????--?允許使用mysqladmin?shutdown SUPER????--?允許使用CHANGE?MASTER,?KILL,?PURGE?MASTER?LOGS和SET?GLOBAL語句,mysqladmin?debug命令;允許您連接(一次),即使已達到max_connections。 UPDATE????--?允許使用UPDATE USAGE????--?“無權限”的同義詞 GRANT?OPTION????--?允許授予權限 /*?表維護?*/ --?分析和存儲表的關鍵字分布 ANALYZE?[LOCAL?|?NO_WRITE_TO_BINLOG]?TABLE?表名?... --?檢查一個或多個表是否有錯誤 CHECK?TABLE?tbl_name?[,?tbl_name]?...?[option]?... option?=?{QUICK?|?FAST?|?MEDIUM?|?EXTENDED?|?CHANGED} --?整理數據文件的碎片 OPTIMIZE?[LOCAL?|?NO_WRITE_TO_BINLOG]?TABLE?tbl_name?[,?tbl_name]?...
MySQL備份
數據庫備份必要性
-
保證重要數據不丟失
-
數據轉移
MySQL數據庫備份方法
-
mysqldump備份工具
-
數據庫管理工具,如SQLyog
-
直接拷貝數據庫文件和相關配置文件
mysqldump客戶端
作用 :
-
轉儲數據庫
-
搜集數據庫進行備份
-
將數據轉移到另一個SQL服務器,不一定是MySQL服務器
--?導出 1.?導出一張表?--?mysqldump?-uroot?-p123456?school?student?>D:/a.sql mysqldump?-u用戶名?-p密碼?庫名?表名?>?文件名(D:/a.sql) 2.?導出多張表?--?mysqldump?-uroot?-p123456?school?student?result?>D:/a.sql mysqldump?-u用戶名?-p密碼?庫名?表1?表2?表3?>?文件名(D:/a.sql) 3.?導出所有表?--?mysqldump?-uroot?-p123456?school?>D:/a.sql mysqldump?-u用戶名?-p密碼?庫名?>?文件名(D:/a.sql) 4.?導出一個庫?--?mysqldump?-uroot?-p123456?-B?school?>D:/a.sql mysqldump?-u用戶名?-p密碼?-B?庫名?>?文件名(D:/a.sql) 可以-w攜帶備份條件 --?導入 1.?在登錄mysql的情況下:--?source?D:/a.sql source??備份文件 2.?在不登錄的情況下 mysql?-u用戶名?-p密碼?庫名?<h2>規范化數據庫設計</h2><h3>為什么需要數據庫設計</h3><p><strong>當數據庫比較復雜時我們需要設計數據庫</strong></p><p><strong>糟糕的數據庫設計 :</strong></p>
-
數據冗余,存儲空間浪費
-
數據更新和插入的異常
-
程序性能差
良好的數據庫設計 :
-
節省數據的存儲空間
-
能夠保證數據的完整性
-
方便進行數據庫應用系統的開發
軟件項目開發周期中數據庫設計 :
-
需求分析階段: 分析客戶的業務和數據處理需求
-
概要設計階段:設計數據庫的E-R模型圖 , 確認需求信息的正確和完整.
設計數據庫步驟
-
收集信息
-
與該系統有關人員進行交流 , 座談 , 充分了解用戶需求 , 理解數據庫需要完成的任務.
-
-
標識實體[Entity]
-
-
標識數據庫要管理的關鍵對象或實體,實體一般是名詞
-
-
標識每個實體需要存儲的詳細信息[Attribute]
-
標識實體之間的關系[Relationship]
三大范式
問題 : 為什么需要數據規范化?
不合規范的表設計會導致的問題:
-
信息重復
-
更新異常
-
插入異常
-
無法正確表示信息
-
-
刪除異常
-
丟失有效信息
-
三大范式
第一范式 (1st NF)
第一范式的目標是確保每列的原子性,如果每列都是不可再分的最小數據單元,則滿足第一范式
第二范式(2nd NF)
第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。
第二范式要求每個表只描述一件事情
第三范式(3rd NF)
如果一個關系滿足第二范式,并且除了主鍵以外的其他列都不傳遞依賴于主鍵列,則滿足第三范式.
第三范式需要確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。
規范化和性能的關系
為滿足某種商業目標 , 數據庫性能比規范化數據庫更重要
在數據規范化的同時 , 要綜合考慮數據庫的性能
通過在給定的表中添加額外的字段,以大量減少需要從中搜索信息所需的時間
通過在給定的表中插入計算列,以方便查詢
相關學習推薦:mysql教程(視頻)