資料庫
一、什麼是資料庫
存儲資料的倉庫
将資料有組織,按照特定的格式存儲在媒體上叫做資料庫
二、比較多個資料庫系統
a)Oracle最好的資料庫沒有之一
b)SQL server 最好的資料庫(windows)
c)MySQL 甲骨文(Oracle) sun開源
三、SQL語言
a)SQL(結構化查詢語句)資料庫管理系統通過sql語句來管理資料庫中的資料
1.資料定義語言(DDL)
用來定義和管理資料對象,包括資料庫、資料表 例如: CREATE、DROP等
2.資料操作語言(DML)
用來操作資料庫對象中的所有資料 例如:INSERT UPDATE DELETE
3.資料查詢語言(DQL)
用來查詢資料對象中的所有資料 例如:SELECT
4.資料控制語言(DCL)
用來管理資料庫的語言,包含賦予權限和更改權限 資料庫更改 等 例如GRANT
四、為什麼我們要學習MySQL
i.MySQL 免費
ii.跨平台
iii.功能強大且友善
五、web開發原理
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
六、登入和退出mysql伺服器
1.登入: 呼叫windows鍵+r出現運作框
2.出現下面内容
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyV2YhB3cvw1coRXYwNWaw91dfB3LcRHb1FmZlR2LcNXZtVGa09CXxYjM19CXl9CXt92Yu8GdjFTNuc2bsJ2Lc9CX6MHc0RHaiojIsJye.gif)
3.在運作框中輸入下面内容
1.mysql -h localhost -uroot -p123456
2.mysql -h localhost -uroot -p(推薦使用這種方式)
password:******
3.使用wamp->mysql->mysql console->輸入密碼回車
4.mysql -h localhost -uroot -p
-h主機名-u使用者名-p密碼
主機名: 就是你要連結資料庫的所在ip localhost是本地主機名 隻能在本地使用
mysql -h 192.168.40.25
使用者名:root 是資料庫最高使用者 超級使用者
密碼: 預設密碼是空
5.如果在運作框輸入找不到檔案那麼請進行下面操作
打開計算機右鍵->找到屬性->找到進階系統設定->環境變量->在上下都找path這個内容->在path内容上填上下面内容->(C:\wamp\bin\mysql\mysql5.7.11\bin)你需要找到你的wamp路徑去複制粘貼上
6.退出
a)exit退出
b)\q 退出
注意:
1.每個sql指令都需要使用分号來完成或者使用\G
2.可以将一行指令拆分為多行
3.可以通過\c 來取消本行指令
4.可以通過exit 或者\q退出
我們可以通過一些快捷進行使用 help
1.将查詢結果立起來: \G
2.取消目前為完成的操作:\c
3.退出目前用戶端:\q
4.顯示目前伺服器狀态:\s
5.顯示幫助資訊:\h
七、檢視資料庫及建立資料庫
i.檢視資料庫
SHOW DATABASES;(推薦使用大寫)
ii.建立資料庫[](中括号代表可寫可不寫不是必須有的内容)
CREATE DATABASE [IF NOT EXISTS] 資料庫名(小寫)
CREATE DATABASE IF NOT EXISTS ss21 如果建立的資料庫不存在我們則建立資料庫
八、選擇資料庫及檢視資料庫中資料表
i.選擇資料庫
USE 資料庫名
USE ss21;
如果你不使用上面指令 會出現下面錯誤代碼
ERROR 1046 (3D000): No database selected
ii.檢視資料庫中資料表
SHOW TABLES;
九、删除資料庫
DROP DATABASE [IF EXISTS] 資料庫名
例如: DROP DATABASE IF EXISTS ss21; 如果存在我們就删除
注意:
1.MySQL 資料庫中指令不區分大小寫
2.每建立一個資料庫 就會在data目錄下建立一個相應名字的檔案夾
3.在windows下面 資料庫名稱也是不區分大小寫的 但是在linux下資料庫名嚴格區分大小寫
十、建立一個簡單的資料表(了解)
CREATE TABLE IF NOT EXISTS user(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
sex TINYINT NOT NULL DEFAULT 1,
age TINYINT NOT NULL DEFAULT 0
)ENGINE = MyISAM DEFAULT CHARSET=utf8;
十一、表中資料簡單管理(增 删 改 查)(重點重點重點)
1.添加資料
INSERT INTO 表名VALUES(值)
INSERT INTO user VALUES(NULL,’球球’,10,120);
2.查詢資料
SELECT * FROM 表名;
SELECT * FROM user;
3.修改資料
UPDATE 表名SET你要修改的字段名WHERE id=數字
UPDATE user SET name=’李想’,sex=’0’,age=18 WHERE id=1
4.删除資料
DELETE FROM 表名WHERE id =數字;
DELETE FROM user WHERE id=1
注意:千萬where id 後面要有值 否則就是全部删除
十二、建立普通使用者
GRANT SELECT ON *.* TO‘wenzhuo’@’localhost’IDENTIFIED BY‘123456’
* 代表所有 前面的*代表所有庫 後面的*代表所有表
@ 前面寫的是使用者名 後面寫的是主機名
主機名 隻有本機的時候localhost 如果是别的主機 主機名就是别的主機的ip位址 例如192。168.204.138
重點: GRANT 語句 不僅可以建立使用者 也可以修改使用者密碼 而且還可以設定使用者權限 因為GRANT語句是mysql中非常非常非常重要的語句
十三、檢視所有使用者
SELECT user,host FROM mysql.user;
十四、删除普通使用者
DROP USER 使用者名@主機名;
例如: DROP USER‘jiuqin’@‘localhost’
十五、root使用者修改自己密碼
SET PASSWORD = PASSWORD(‘新密碼’);
注意:新密碼必須使用PASSWORD()加密函數進行加密
十六、root 使用者修改普通使用者密碼
SET PASSWORD FOR‘使用者名’@’主機名’= PASSWORD(‘新密碼’)
SET PASSWORD FOR‘wenzhuo’@‘localhost’=PASSWORD(‘wenzhuo520’)
十七、授權
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO‘wenshuai’@’localhost’IDENTIFIED BY’wenshuaiaiwenzhuo’
GRANT SELECT,INSERT,UPDATE,DELETE ON ss21.* TO‘wanli’@’localhost’IDENTIFIED BY‘wanli404’
GRANT:被授權的使用者可以将這些權限指派給别的使用者
十八、收回權限及檢視權限
1. 檢視權限
SHOW GRANTS FOR‘使用者名’@’主機名’
2. 收回權限
REVOKE INSERT,UPDATE,DELETE ON ss21.* FROM‘使用者名’@‘主機名’
十九、資料備份
需要在cmd 指令行windows+r在運作框中 輸入cmd
開始->所有程式->附件->指令提示符
mysqldump -u使用者名-p庫名表名>儲存的路徑
例如: mysqldump -uroot -p ss21 > C:\ss21.sql
如果 在備份當中出現拒接通路 說明你的權限不夠
請使用超級管理者權限打開檔案
Can't connect to MySQL server on 'localhost' (10061) 服務沒有啟動
二十、還原資料
首先必須先準備一個空的資料庫 ss21
mysql -u 使用者名-p庫名
mysql -uroot -p ss21 < C:\ss21.sql
重要的事情需要說三遍 别寫分号 别寫分号 别寫分号
資料表類型
一、 建立資料表
CREATE TABLE IF NOT EXISTS user(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
Sex TINYINT NOT NULL DEFUALT 1,
age TINYINT NOT NULL DEFAULT 0
)ENGINE = MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS 表名稱(
字段名1 類型(長度)屬性 索引,
字段名2 類型(長度)屬性 索引,
字段名3 類型(長度)屬性 索引,
字段名4 類型(長度)屬性 索引,
字段名5 類型(長度)屬性 索引,
...
字段名N 類型(長度)屬性 索引,
) ENGINE =MyISAM DEFAULT CHARSET =utf8;
html 設定字元集utf-8
mysql 設定字元集utf8
二、 mysql 資料類型
1. 整數類型(重點重點重點)整數類型位元組數無符号範圍有符号範圍
TINYINT(微整型)1+0 - +255-128- +127
SMALLINT(小整型)20-65535-32768-32767
MEDIUMINT(中整型)30-16777215-8388608-8388607
INT(整型)40-4294967295-2147483648-2147483647
BIGINT(大整型)80-188446744073709551615
mysql 支援的資料類型後面指定該類型的寬度, 基本形式如下:
資料類型(顯示寬度)
預設顯示寬度: 可以了解為 一個整數類型的預設寬度正好能顯示該資料類型的所有值的寬度 預設長度其實是目前位數減一 為什麼要減一 是因為第一位是我們的符号位
n1 | tinyint(4)
n2 | smallint(6)
n3 | mediumint(9)
n4 | int(11)
n5 | bigint(20)
在整數類型使用是 可以配置zerofill 參數zerofill表示數字不足的顯示空間由0來填充補全
出現下面報錯的原因是
Out of range value for column 'n1' at row 1
你的長度超出了範圍
注意:
使用zerofill是mysql會自動加上unsigned(無符号)屬性 那麼該整數類型隻能表示無符号數 器顯示長度比預設顯示寬度小一
在設定了顯示寬度時 如果插入的資料寬度大于設定的顯示寬度 資料依然可以插入 且能夠顯示 但是該設定的寬度失效
資料的寬度不能大于預設寬度 如果大于預設寬度 那麼該資料已經超出該類型的最大值 因為最大值的寬度必須小于等于預設寬度 如果一個值大于最大值 将不能插入
-- 整數類型還有一個屬性AUTO_INCREMENT屬性 自增
-- 自增屬性需要配合索引使用
-- 如果出現下面報錯 請在你自增屬性後面加上你的索引内容
-- ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
-- key(index) 索引
-- 普通索引(index)
-- 唯一索引(unique)唯一索引所有值不能有重複
-- 主鍵索引primary key一個資料表中隻能有一個 唯一作用 一般設定都是自增字段
zerofill 零填充
unsigned 無符号
auto_increment 自增
隻能修飾整數類型
2. 浮點數和定點數
mysql 中使用浮點數和定點數來表示小數
浮點數: 單精度浮點數(float)和雙精度浮點數(double)
定點數: DECIMAL
定點數在存儲空間 是根據精度來決定的
mysql中可以指定浮點數的精度:資料類型(M,D)
M 精度 是資料的總長度 小數點不占位
D 标度 小數點後的長度
在存儲小數的時候 建議使用decimal類型 定點數以字元串形式存儲 是以精度要比浮點數更高 而且浮點數容易出現誤差 這是浮點數一直存在的問題 如果對資料的精度要求很高 還是選擇定點數比較安全
如果标度超出位數那麼他會進行四舍五入如果你的精度和标度一樣那麼我們的整數位隻能是零
3. 時間
-- 時間戳
-- 2147483647
INT 2147483647
因為php可以有date函數 你想處理什麼樣子都可以 是以我們使用時間戳來存儲我們php的時間
4.字元串類型
字元串類型是mysql中用來存儲字元串的資料類型 字元串類型包含: VARCHAR CHAR TEXT ENUM SET
CHAR 和VARCHAR
字元串類型(M) M-- 該字元串的最大長度M
CHAR 定長的字元類型0-255
VARCHAR 變長的字元類型5.0以前0-255 5.0版本以後0-65535
char(5) 和varchar(5)差別
插入值 char 占用字數varchar占用字數
152
12354
1234 55
1234556
CHAR 定長字元類型 配置設定多少空間就占用多少空間 不計算需要的長度 處理資料速度快
VARCHAR 變長字元類型 根據字元串的長度來配置設定空間 需要計算長度 處理資料速度稍慢
什麼時候用char 什麼時候用varchar
當你插入的資料長度一直不變的情況下 請使用char 密碼需要使用char
當你插入的資料長度是随時改變的情況下 使用varchar 使用者名需要使用varchar
ENUM 類型 枚舉類型
ENUM(‘值1,值2,值3,,,,,值n’)
n--代表參數清單中的第n個值n 65535
ENUM 的值隻能去清單中的一個元素
1/65535
SET 類型
在建立表是 set類型的取值範圍是以清單的形式指定的
set(‘值1,值2,值3,。。。值n’);
set 類型的值最多隻是64個元素 取值可以是一個或者多個 其他特性和enum類似
1-64/64
三檢視表結構
DESC 表名:縮寫版
DESCRIBE 表名
檢視建表語句
SHOW CREATE TABLE 表名
四建立表
1.建表文法
CREATE TABLE IF NOT EXISTS 表名稱(
字段名1 類型(長度)屬性 索引,
字段名2 類型(長度)屬性 索引,
字段名3 類型(長度)屬性 索引,
字段名4 類型(長度)屬性 索引,
字段名5 類型(長度)屬性 索引,
...
字段名N 類型(長度)屬性 索引,
) ENGINE =MyISAM DEFAULT CHARSET =utf8;
a.設定主鍵
PRIMARY KEY
字段名 資料類型 PRIMARY KEY
b.設定表的非空限制
字段名 資料類型 NOT NULL
不為空 隻是不為null
c.設定表的唯一性
字段名 資料類型 UNIQUE
d.設定表字段值的自增
字段名 資料類型 AUTO_INCREMENT
如果你設定自增就必須加上 索引 PRIMARY KEY
e.設定表的字段預設值
字段名 資料類型 DEFAULT 預設值
f.設定字段的數字類型 不能為負數
字段名 資料類型 UNSIGNED
g.建表引擎
MyISAM
InnoDB
MyISAM 與InnoDB的差別
myisam 讀取速度快 不支援事務
InnoDB 讀取速度稍慢 支援事務 事務復原
===================================
根據我們昨天學的内容建立一個表
ERROR 1062 (23000): Duplicate entry 'user1' for key 'name'
說明你的user1在name字段裡面有值了 而且你的name字段是唯一字段
2.修改表(重點重點)
a)修改表名
ALTER TABLE 表名RENAME TO新表名
b)修改字段的資料類型
ALTER TABLE 表名MODIFY字段名 資料類型 屬性 索引;
c)修改字段名
ALTER TABLE 表名CHANGE老字段名 新字段名 資料類型 屬性 索引;
d)增加字段
ALTER TABLE 表名ADD字段名 資料類型 屬性 索引[FIRST|AFTER字段名]
如果後面first和after不寫的情況下 預設是添加到字段末尾
e)删除字段
ALTER TABLE 表名DROP字段名
ERROR 1091 (42000): Can't DROP 'phone'; check that column/key exists
删除不存在的字段 會報上面的錯誤
f)修改字段的排列位置
ALTER TABLE 表名MODIFY字段1資料類型 屬性 索引AFTER字段2
g)修改表引擎
ALTER TABLE 表名ENGINE =引擎名
資料量大的時候 不建議像上面一樣去修改表引擎 而是先建立一個和myuser表一樣的表 然後把空表的引擎修改為我們要修改的引擎之後将資料導入到新表中即可
h)将自增改為現在的最大值
ALTER TABLE 表名AUTO_INCREMENT=0;