一、御前 1 win+R DOS 輸入 net start mtsql 和 net stop mysql 啟動和停止Mysql 服務,也可通過電腦——管理——服務和應用程式——服務——MYSQL——右擊 啟動mysql服務出現服務名無效的原因及解決方法【失敗】 問題原因:mysql服務沒有安裝。 ...
一、御前
1 win+R DOS 輸入 net start mtsql 和 net stop mysql 啟動和停止Mysql 服務,也可通過電腦——管理——服務和應用程式——服務——MYSQL——右擊
啟動mysql服務出現服務名無效的原因及解決方法【失敗】
問題原因:mysql服務沒有安裝。
解決辦法: 在 mysql bin目錄下 以管理員的許可權 執行 mysqld -install命令
以管理員的許可權 mysqld -remove ,卸載mysql服務
2 登錄和退出
路徑: DOS:mysql -uroot -p
輸入密碼
exit; 退出
show databases; 查看資料庫
Command Line Client登錄和退出
3 常見操作
\h 或者 help;
source D:\test.sql 即執行test.sql文件
4 圖形 MYSQL Workbench
另外介紹第三方 SQLyog
二、資料庫和表的基本操作
1、MySQL支持的數據類型
1)數值類型 字元串類型 日期和時間類型
2)資料庫基本操作
CREATE DATABASE 資料庫名稱;
SHOW DATABASE;
SHOW CREATE DATABASE 資料庫名稱; 查看已經創建的資料庫的創建信息
CREATE DATABASE 資料庫名稱 CHARACTER SET gbk; 在創建資料庫時指定編碼方式
USE 資料庫名;
ALTER DATABASE 資料庫名稱 DEFAULT CHARACTER SET 編碼方式 COLLATE 編碼方式_bin;編碼方式為修改後的
DROP DATABASE 資料庫名稱;
3) 數據表的基本操作
CREATE TABLE stu( stu_id INT(10),stu_name VARCHAR(50) );
SHOW CREATE TABLE 表名;
SHOW CREATE TABLE 表名\G;格式化顯示創建信息
DESCRIBE 表名; 表的列相關信息
ALTER TABLE 原表名 RENAME [TO] 新表名;
ALTER TABLE 表名 CHANGE 原欄位名 新欄位名 新數據類型;
ALTER TABLE 表名 MODIFY 欄位名 新數據類型;
ALTER TABLE 表名 ADD 新添欄位名 數據類型;
AlTER TABLE 表名 DROP 欄位名;
ALTER TABLE 表名 MODIFY 欄位名1 數據類型 FIRST|AFTER 欄位名2; 調整欄位位置
DROP TABLE 表名;
三、表中數據的基本操作
INSERT INTO 表名 (欄位1,欄位2)VALUES{值1,值2);
INSERT INTO 表名 VALUES(值1,,值2); 為所有的欄位都填上數據
INSERT INTO 表名(欄位名1,欄位名2)VALUES(值1,值2);為指定欄位添加數據
INSERT INTO 表名[(欄位名1,欄位名2,…)]VALUES(值1,值2,…),…,(值1,值2,…);
UPDATE 表名 SET 欄位名1=值1 [欄位名2=值2,…] WHERE ;
DELETE FROM 表名 WHERE;刪除指定的全部數據
TRUNCATE [TABLE] 表名;刪除表中的所有數據
四 單表查詢
SELECT 欄位名1,…欄位名n FROM 表名;
SELECT * FROM 表名;
SELECT * FROM 表名 WHERE ;
SELECT * FROM 表名 WHERE 條件表達式1 AND|OR 條件表達式2 ;
SELECT * FROM 表名 WHERE 欄位名 [NOT] IN (元素1,元素2,…,元素n) ;
SELECT * FROM 表名 WHERE 欄位名 IS [NOT] NULL ;
SELECT * FROM 表名 WHERE 欄位名 [NOT] BETWEEN 值1 AND 值2 ;
SELECT * FROM 表名 WHERE 欄位名 [NOT] LIKE '匹配字元串';其中%表示n個字元,_表示一個
SELECT DISTINCT 欄位名 FROM 表名 ;去重覆
SELECT * FROM 表名 WHERE 欄位1 [ASC|DESC],欄位2 [ASC|DESC] ;ASC升序
2)聚合函數
SELECT COUNT (*|1|列名) FROM 表名;
SELECT SUM (欄位名) FROM 表名;
SELECT AVG (欄位名) FROM 表名;
SELECT MAX (欄位名) FROM 表名;
SELECT MIN (欄位名) FROM 表名;
3)分組
SELECT 欄位名1,…欄位名n FROM 表名 GROUP BY 欄位名1,欄位名2,…[HAVING 條件表達式];
4)分頁
SELECT 欄位名1,欄位名2,…FROM 表名 LIMIT [m,]n;【m代表起始數目,n代表個數】
五 數據的完整性
ALTER TABLE 表名 ADD PRIMARY KEY(列名);主鍵 不空 不重
或者 CREATE TABLE 表名 (欄位名 數據類型 PRIMARY KEY);
ALTER TABLE 表名 ADD UNIQUE(列名);唯一約束
或者 CREATE TABLE 表名 (欄位名 數據類型 UNIQUE);
ALTER TABLE 表名 ADD PRIMARY KEY AUTO_INCREMENT(列名);自增
或者 CREATE TABLE 表名 (欄位名 數據類型 AUTO_INCREMENT);
2)索引
AlTER INDEXE 索引名 ON 表名(欄位名[(長度)]);
或者 CREATE TABLE 表名 (欄位名 數據類型 ,INDEX [索引名] (欄位名[(長度)]));
唯一索引:【不可有重覆值】
在普通的INDEX 前加 UNIQUE
3)域完整性
ALTER TABLE 表名 MODIFY 欄位名 數據類型 NOT NULL,…;非空約束
或者 CREATE TABLE 表名 (欄位名 數據類型 NOT NULL,);
ALTER TABLE 表名 MODIFY 欄位名 數據類型 DEFAULT 預設值;預設值約束
或者 CREATE TABLE 表名 (欄位名 數據類型 DEFAULT 預設值,);
4)引用完整性
ALTER TABLE 表名 ADD FOREIGN KEY(外鍵欄位名) REFERENCES 主表表名(主鍵欄位名);
CREATE TABLE 表名 (欄位名 數據類型,FOREIGN KEY(外鍵欄位名) REFERENCES 主表表名(主鍵欄位名));
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名;
六、多表查詢
1)合併結果集
SELECT * FROM test1 UNION SELECT * FROM test2;會過濾重覆數據
SELECT * FROM test1 UNION ALL SELECT * FROM test2;不會過濾重覆數據
2)連接查詢
SELECT 查詢欄位 FROM 表1 CROSS JOIN 表2 WHERE ;笛卡爾積
SELECT 查詢欄位 FROM 表1 [INNER] JOIN 表2 ON 表1.關係欄位=表2.關係欄位 Where ;內連接
SELECT 查詢欄位 FROM 表1 LEFT [OUTER] JOIN 表2 ON 表1.關係欄位=表2.關係欄位 Where ;左外連接
SELECT 查詢欄位 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 表1.關係欄位=表2.關係欄位 Where ;右外連接
SELECT 查詢欄位 FROM 表1 [別名] JOIN 表2 [別名] ON 表1.關係欄位=表2.關係欄位 JOIN 表 m ON…;多表
SELECT 查詢欄位 FROM 表1 [別名] NATURAL JOIN 表2 [表名];自然連接 列名和數據類型相同的欄位自動匹配
SELECT 查詢欄位 FROM 表1 [別名] NATURAL [LEFT|RIGHT] JOIN 表2 [表名];
SELECT 查詢欄位 FROM 表名 [別名1],表名[別名2] WHERE 查詢條件;自連接
3)子查詢
SELECT * FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='JONES');子查詢做條件
SELECT e.ename,e.sal,d.dname,d.loc FROM emp e,(SELECT dname,loc,deptno FROM dept)d Where
e.deptno=d.deptno AND e.empmo=7788;子查詢做表
七、常用函數
1)字元串函數
ASCII();
CONCAT();
INSERT();
LEFT();
RIGHT();
LENGTH();【占用位元組】
2)數學函數
ABS();
MOD();
PI();
RAND();
ROUND();
TRUNCATE();【保留指定位數的結果】
3)日期和時間函數
DAY();
WEEK();
MONTH();
YEAR();
NOW();
4)格式化函數
FORMAT();
DATE_FORMAT();
5)系統信息函數
DATABASE();
USER();
SYSTEM_USER();
VERSION();
八、視圖
SELECT Drop_priv FROM mysql.user WHERE User='root';查詢用戶對視圖許可權
CREATE VIEW view_emp(id,name,sex,age,department) AS SELECT id,name,sex,age,department FROM emp;還有一些可選的許可權條件,用到再百度吧
DESCRIBE 視圖名;視圖欄位信息
DESC 視圖名;
SHOW TABLE STATUS LIKE '視圖名';視圖的基本信息
SHOW CREATE VIEW 視圖名;視圖詳細信息
CREATE OR REPLACE VIEW view_emp_detail(id,name,sex) AS SELECT id,name,sex FROM emp;修改
ALTER VIEW view_emp AS SELECT name,age FROM emp;修改
UPDATE 視圖名 SET 欄位名1=值1 [欄位名2=值2,…] [WHERE 條件表達式];
INSERT INTO view_emp VALUES (值1,值2,……);
DELETE FROM 表名 [條件表達式];刪除數據
DROP VIEW [IF EXISTS] 視圖名 [,視圖2]… [RESTRICT|CASCADE];刪除視圖
九、存儲過程
1 查看用戶是否擁有創建存儲過程的許可權
SELECT Create_routine_priv FROM mysql.user Where User='root';
CREATE PROCEDURE sp_name ([proc_parameter[…]]) [characteristic…] routine_body;創建
SHOW PROCEDURE STATUS [LIKE 'pattern'];查看存儲過程的狀態
SHOW CREATE PROCEDURE sp_name;查看存儲過程的創建信息
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='SP_SEARCH' AND ROUTINE_TYPE='PROCEDURE'\G;
SELECT Alter_routine_priv FROM mysql.user Where User='root';查看修改許可權
ALTER PROCEDURE sp_name [characteristic…];修改
DROP PROCEDURE [IF EXISTS] sp_name;刪除
具體的 局部變數 定義條件 處理程式 游標的使用 流程式控制制(IF CASE WHILE) 自己看吧
2事件調度器
資料庫安自定義的時間周期來出發某種操作,可以理解為時間觸發器。
SELECT @@event_scheduler;查看是否已經開啟時間調度器
SET GLOBAL event_scheduler=ON;開啟
使用:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ...
|EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
來自 <https://www.cnblogs.com/geaozhang/p/6821692.html>
十、觸發器
1 創建觸發器
CREATE TRIGGER trigger_name【觸發器名稱】
triggername_time【BEFORE|ALTER】
trihher_event【INSERT|UPDATE|DELETE】 on tablename
FOR EACH ROW
trigger_stmt;
2查看觸發器
SHOW TRIGGERS\G【查看所有觸發器】
DESC information_schema.triggers;【查看觸發器表】
SELECT * FROM information_schema.triggers WHERE trigger_name='t_afterdelete_on_test1'\G;【查看某一個觸發器具體信息】
DROP TRIGGER [IF EXISTS] [schema_name.].trigger_name;刪除觸發器
十一、資料庫事務
START TRANSACTION;開啟事務
中間寫語句
COMMIT;提交事務
ROLLBACK;事務回滾——在提交之前
2事務的屬性——資料庫是多線程併發訪問的
ACID:原子性 一致性 隔離性 持久性
事務的隔離級別:
READ UNCOMMITTED【臟讀 讀未提交】-所有事務都可看到其他未提交事務
READ COMMITTED【不可重覆讀 讀已提交】—一個事務只能看到已經提交事務改變
REPEATABLE READ 【幻讀 可重覆度】——同一事務多個實例併發執行同樣數據
SERIALIZABLE 【可串列化】-強制事務排序使之不可能互相衝突
SELECT @@tx_isolation;查看當前會話隔離級別
SET SESSION TRANSACTION ISOLATION LEVEL (READ UNCOMMITTED)|(READ COMMITTED)|(REPEATABLE READ)|(SERIALIZABLE);設置會話隔離級別
3 分散式事務
XA {START|BEGIN} xid [JOIN|RESUME] 開始一個分散式事務
XA END xid [SUSPEND [FOR MIGRATE]] 操作分散式事務
XA PREPARE xid 準備提交事務
XA COMMIT xid [ONE PHASE] 提交事務
XA ROLLBACK xid 回滾事務
XA RECOVER [CONVERT XID] 查看處於PREPARE狀態的事務
十二、MYSQL 高級操作
1 數據的備份
mysql -uusername -ppassword dbname>path:filename.sql;
SQLyog 圖形界面sql文件形式轉儲
2 數據的還原
mysql -uusername -ppassword dbname<path:filename.sql;
SQLyog 圖形界面 執行SQL腳本
3 許可權管理【百度去吧】
MYSQL的許可權與user表
授予許可權:
查看許可權:SHOW GANTS FOR ‘username’@‘hostname’
收回許可權:
4 MYSQL分區【具體自己看書去吧】
RANGE分區 LIST分區 HASH分區 KEY分區