資料庫許可權管理和備份
使用者管理
使用者表:mysql.user
本質:對這張表進行增刪改查
-- 建立使用者,不指定host預設是%
CREATE USER hudu IDENTIFIED BY '123456';
-- CREATE USER 'username'@'host' IDENTIFIED BY 'password'
-- 修改指定使用者密碼
-- 舊版本使用上面的
-- SET PASSWORD FOR 'hudu'@'%' = PASSWORD('111111');
ALTER USER 'hudu'@'%' IDENTIFIED BY '111111'
-- 重新命名
RENAME USER hudu TO alex;
-- 使用者授權 ALL PRIVILEGES 全部的許可權,庫.表
-- 除了給別人授權,其它許可權都有
GRANT ALL PRIVILEGES ON *.* TO hudu;
-- 也可以加上
GRANT ALL PRIVILEGES ON *.* TO 'hudu'@'%' WITH GRANT OPTION;
-- 檢視許可權
SHOW GRANTS FOR hudu;
-- 回收許可權 revoke 哪些許可權,在哪個庫撤銷,給誰撤銷
REVOKE ALL PRIVILEGES ON *.* FROM 'hudu'@'%';
-- 刪除使用者
DROP USER hudu;
資料庫備份
- 保證重要的資料不丟失
- 資料轉移 A—–>B
MySQL備份的方式
- 直接拷貝物理檔案
- 在視覺化工具中手動匯出
- 使用命令列匯出 mysqldump命令列使用
視覺化工具navicate備份資料庫
- 資料庫定期備份
- 命令列匯出
mysqldump -h主機名 -u使用者名稱 -p密碼 資料庫 [表1 表2 表3...] > 物理磁碟位置/檔名
$ mysqldump -hlocalhost -uroot -p123456 school student > ~/File/mysql_backup/1.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
- 匯入
# 先進入資料庫
$ mysql -uroot -p123456
-- 如果是備份的表
use school;
source ~/File/1.sql
直接匯入也是可以的
mysql -u使用者名稱 -p密碼 庫名 < 備份檔案
規範資料庫設計
當資料庫比較複雜的時候,就要設計
糟糕的資料庫設計:
- 資料冗餘,浪費空間
- 資料插入和刪除都會麻煩/異常【遮蔽物理外來鍵】
- 程式的效能差
良好的資料庫設計:
- 節省記憶體空間
- 保證資料庫的完整性
- 方便開發系統
軟體開發中,關於資料庫的設計:
- 分析需求:分析業務和需要處理的資料庫的需求
- 概要設計:設計關係圖 E-R圖
設計資料庫的步驟:(個人部落格)
- 收集資訊,分析需求
- 使用者表(使用者登陸登出,使用者個人資訊,寫部落格,建立分類)
- 分類表(文章分類,誰建立的)
- 文章表(文章的資訊)
- 評論表
- 友連結串列(友情資訊)
- 自定義表(系統資訊,某個關鍵的字,或者一些主欄位)key:value
- 標識實體類(把需求落地到每個欄位)
create database blog_test character set utf8 collate utf8_general_ci;
-- 使用者資料庫
CREATE TABLE `user`(
`id` int(11) NOT NULL auto_increment,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
`phone` VARCHAR(11) DEFAULT NULL,
`sex` VARCHAR(2) NOT NULL,
`age` INT(3) NOT NULL,
`sign`VARCHAR(200),
PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8
-- 分類資料庫
CREATE TABLE `catrgory`(
`id` int(10) NOT NULL,
`category_name` VARCHAR(30) NOT NULL,
`create_user_id` INT(10) NOT NULL,
PRIMARY KEY(id)
)ENGINE = INNODB DEFAULT CHARSET = utf8
-- 文章資料庫
CREATE TABLE `blog`(
`id` int(10) NOT NULL,
`title` VARCHAR(100) NOT NULL,
`author_id` int(10),
`category_id` int(10),
`content` text NOT NULL,
`create_time` datetime,
`update_time` datetime,
`like` int(10),
PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8
-- 評論表
CREATE TABLE `comment`(
id int(10) NOT NULL,
blog_id int(10) NOT NULL,
user_id int(10) NOT NULL,
content VARCHAR(2000) NOT NULL,
create_time datetime NOT NULL,
user_id_parent int(10) NOT NULL COMMENT '回覆的人的id',
PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8
-- 友連結串列
CREATE TABLE `links`(
`id` int(10) NOT NULL,
`links` VARCHAR(50) NOT NULL COMMENT '網站名稱',
`href` VARCHAR(2000) NOT NULL COMMENT '網站連結',
sort int(10) NOT NULL COMMENT '排序',
PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8
- 標識實體之間的關係
- 寫部落格:user –> blog
- 建立分類:user –> category
- 關注:user –> user
- 友鏈:links
- 評論:user-user-blog
三大正規化
- 資訊重複
- 更新異常
- 插入異常
- 無法顯示資訊
- 刪除異常
- 丟失有效的資訊
第一正規化(1NF)
原子性:保證每一列不可再分
第二正規化(2NF)
前提:滿足第一正規化
每張表只描述一件事情
第三正規化(3NF)
前提:滿足第一正規化和第二正規化
第三正規化需要確保資料表中每一列資料都和主鍵直接相關,而不能間接相關。
規範資料庫的設計
規範性和效能的問題
關聯查詢的表不得查過三張表
- 考慮商業化的需求和目標,成本,使用者體驗,資料庫效能更為重要
- 在規範效能的問題的時候,需要適當考慮規範性
- 故意給某些欄位增加一些冗餘的欄位。(從多表查詢中變為單表查詢)
- 故意增加一些計算列(大資料量降低為小資料量的查詢:索引)
本作品採用《CC 協議》,轉載必須註明作者和本文連結