MYSQL基础--学习笔记
最近一段時間,系統的學習了下mysql相關知識,當然都是比較基礎的,現在貼出來,以供參考備忘--帥帥的小豬豬
?
創建用戶:
CREATE USER 'sampadm'@'localhost' IDENTIFIED BY 'secret';
賦權限:
GRANT ALL ON sampdb.* TO 'sampadm'@'localhost';
回收權限:
REVOKE ALL ON *.* FORM 'sampadm'@'localhost';
刷新權限:
FLUSH PRIVILEGES;
刪除用戶:
DELETE FROM mysql.user WHERE user='sampadm' AND host='localhost';
更改密碼:
UPDATE mysql.user SET password=password('新密碼') WHERE user='sampadm' AND host='localhost';
查看權限種類:
mysql>SHOW PRIVILEGES;
查看當前用戶有哪些權限:
mysql>SHOW GRANTS;
COUNT(*)的統計結果是被選中的數據行的總數,而COUNT(數據列名稱)值則只統計全體非NULL值的個數。有差別!!!
查看數據庫數據存放位置
mysql>SHOW VARIALBES LIKE 'datadir';
MEMORY數據表是一種貯存在內存中的表,其數據都存在內存而不是硬盤中,所以當服務器重啟或關機時,MEMORY表數據會丟失,但依然能查詢到該表,有其表結構
bin>mysqldump -u xxx -p db_name tbl_name > xxx.sql
密碼不能直接打出來,否則會報warning
幾個常用用例:
1.導出整個數據庫
mysqldump [-h 主機名 -P 端口號] -u 用戶名 -p 數據庫名 > 導出的文件名
mysqldump [-h 127.0.0.1 -P 3306] -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.導出一個表
mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.導出一個數據庫結構
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
-d 沒有數據 --add-drop-table 在每個create語句之前增加一個drop table
4.導入數據庫
常用source 命令
mysql>source aa.sql
設置字符集(數據庫、數據表、數據列均可)
CHARACTER SET charset
排序方式
COLLATE collation
查看數據庫的存儲引擎
mysql>SHOW VARIABLES LIKE '%storage_engine%';
查看當前數據庫中各表信息
mysql>SHOW TABLE STATUS;
mysql>CREATE TABLE IF NOT EXISTS tbl_name(...);
TEMOPARY臨時表當與服務器斷開時會自動消失。TEMPORARY表只對創建該表的客戶(創建的鏈接)是可見的,因為每個客戶只能看到自己創建的數據表,所以不同的客戶可以各自創建一個名字相同的TEMPORARY數據表而不會發生沖突。而且因為TEMPORARY表是隱藏的,即使本數據庫中有與這張同名的表也可創建,而且查詢的時候會查尋TEMPORARY表的數據。
創建一張表的副本(不帶數據),可以將原表的表結構完全復制
mysql>CREATE TABLE copy_tbl_name LIKE tbl_name;
而創建副本并帶數據的話,表結構不能完全復制,如索引、AUTO_INCREMENT
mysql>CREATE TABLE copy_tbl_name SELECT * FROM tbl_name [WHERE XXXX];
MERGE表可以查各個MyISAM表,前提是表結構一致,如:
CREATE TABLE log_2007 ? ? ? ? ? ? CREATE TABLE log_2008
( ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (
? dt DATETIME NOT NULL, ? ? ? ? ? ? ? dt DATETIME NOT NULL,
? info VARCHAR(100) NOT NULL, ? ? ?info VARCHAR(100) NOT NULL,
? INDEX (dt) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? INDEX (dt)
) ENGINE = MyISAM; ? ? ? ? ? ? ? ? ? ) ENGINE = MyISAM;
CREATE TABLE log_merge
(
dt DATETIME NOT NULL,
info VARCHAR(100) NOT NULL,
INDEX (dt)
) ENGINE = MERGE UNION = (log_2007, log_2008);
查詢幾個日志表總行數:
SELECT COUNT(*) FROM log_merge;
這幾年每年各有多少事情發生:
SELECT YEAR(dt) AS y, COUNT(*) AS intries FROM log_merge GROUP BY y;
MERGE表可執行UPDATE和DELETE操作,但不能執行INSERT操作,因為不知道往那張表插數據,故要加數據必須給其INSERT_METHOD值(NO/FIRST/LAST),ALTER TABLE log_merge INSERT_METHOD = LAST;
MERGE表還可包括壓縮的數據表
創建索引:
mysql>ALTER TABLE tble_name ADD INDEX index_name (index_columns);
mysql>ALTER TABLE tble_name ADD UNIQUE index_name (index_columns);
mysql>ALTER TABLE tble_name ADD PRIMARY KEY (index_columns);
mysql>ALTER TABLE tble_name ADD FULLTEXT index_name (index_columns);
mysql>ALTER TABLE tble_name ADD SPATIAL index_name (index_columns);
改變數據列的數據類型:
mysql>ALTER TABLE tbl_name MODIFY i SMALLINT UNSIGNED;
mysql>ALTER TABLE tbl_name CHANGE i i SMALLINT UNSIGNED;
MODIFY和CHANGE子句都可以改變數據列的數據類型,但CHANGE還可同時修改數據列的名稱,不過即使不用修改,也要把名稱再多寫一遍
加上數據庫名稱可以將該表移到另一個數據庫:
ALTER TABLE db_name1.tbl_name MODIFY db.name2.tbl_name;
查找某張表是否存在(不包括TEMPORARY表)
mysql>SHOW TABLES LIKE 'tbl_name';
mysql>SHOW TABLES FROM db_name LIKE 'tbl_name';
查找某張表是否存在(包括TEMPORARY表)
mysql>SELECT COUNT(*) FROM tbl_name;
mysql>SELECT * FROM tbl_name WHERE FALSE;
UNION 是 UNION DISTINCT 的同義詞,如有相同的記錄則會只保留一條,若想全保留,用UNION ALL;當UNION 與UNION ALL 混用時,每個UNION操作將優先于它左邊的任何UNION ALL操作
設置事物的隔離級別:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL level;
level: READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
子表里定義一個外鍵的語法:
[CONSTRAINT constraint_name]
FOREIGN KEY [fk_name] (index_columns)
REFERENCES tbl_name (index_columns)
[ON DELETE action]
[ON UPDATE action]
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
例子:
CREATE TABLE a (id SMALLINT UNSIGNED NOT NULL PRIMARY KEY);
CREATE TABLE b
(id SMALLINT UNSIGNED,
name VARCHAR(10),
FOREIGN KEY (id) REFERENCES a (id)
ON DELETE CASCADE
ON UPDATE CASCADE
)ENGINE = InnoDB;
加載txt類型數據:
mysql>LOAD DATA LOCAL INFILE 'PATH' INTO TABLE tbl_name (col_name1, col_name2....);
查看存儲過程:
mysql>SHOW PROCEDURE STATUS;
mysql>SHOW CREATE PROCEDURE proc_name;
觸發器:
mysql>DELIMITER $
>CREATE TRIGGER tri_name BEFORE/AFTER INSERT/UPDATE/DELETE ON tbl_name
>FOR EACH ROW
>BEGIN
>.....
>END$
mysql>DELIMITER ;
PS: 1、NEW/OLD 可取出修改后的或未修改前的字段值
2、Not allowed to return a result set from a trigger;不允許有返回值
查看事件是否開啟:
mysql>SHOW VARIABLES LIKE 'EVENT_SCHEDULER'; -- 0/OFF 1/ON
設置事件開啟/關閉:(要有supper權限)
mysql>SET GLOABLE EVENT_SCHEDULER = 1/ON; -- 開啟
mysql>SET GLOABLE EVENT_SCHEDULER = 0/OFF; -- 關閉
事件語法:
mysql>CREATE EVENT event_name
>ON SCHEDULE EVERY n interval/AT some_time
>DO ....;
轉載于:https://www.cnblogs.com/small-pig/p/4359794.html
總結
以上是生活随笔為你收集整理的MYSQL基础--学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绚丽照片墙效果
- 下一篇: MySql数据库学习--存储过程(1)