MYSQL基础--学习笔记
最近一段時(shí)間,系統(tǒng)的學(xué)習(xí)了下mysql相關(guān)知識(shí),當(dāng)然都是比較基礎(chǔ)的,現(xiàn)在貼出來(lái),以供參考備忘--帥帥的小豬豬
?
創(chuàng)建用戶:
CREATE USER 'sampadm'@'localhost' IDENTIFIED BY 'secret';
賦權(quán)限:
GRANT ALL ON sampdb.* TO 'sampadm'@'localhost';
回收權(quán)限:
REVOKE ALL ON *.* FORM 'sampadm'@'localhost';
刷新權(quán)限:
FLUSH PRIVILEGES;
刪除用戶:
DELETE FROM mysql.user WHERE user='sampadm' AND host='localhost';
更改密碼:
UPDATE mysql.user SET password=password('新密碼') WHERE user='sampadm' AND host='localhost';
查看權(quán)限種類:
mysql>SHOW PRIVILEGES;
查看當(dāng)前用戶有哪些權(quán)限:
mysql>SHOW GRANTS;
COUNT(*)的統(tǒng)計(jì)結(jié)果是被選中的數(shù)據(jù)行的總數(shù),而COUNT(數(shù)據(jù)列名稱)值則只統(tǒng)計(jì)全體非NULL值的個(gè)數(shù)。有差別!!!
查看數(shù)據(jù)庫(kù)數(shù)據(jù)存放位置
mysql>SHOW VARIALBES LIKE 'datadir';
MEMORY數(shù)據(jù)表是一種貯存在內(nèi)存中的表,其數(shù)據(jù)都存在內(nèi)存而不是硬盤(pán)中,所以當(dāng)服務(wù)器重啟或關(guān)機(jī)時(shí),MEMORY表數(shù)據(jù)會(huì)丟失,但依然能查詢到該表,有其表結(jié)構(gòu)
bin>mysqldump -u xxx -p db_name tbl_name > xxx.sql
密碼不能直接打出來(lái),否則會(huì)報(bào)warning
幾個(gè)常用用例:
1.導(dǎo)出整個(gè)數(shù)據(jù)庫(kù)
mysqldump [-h 主機(jī)名 -P 端口號(hào)] -u 用戶名 -p 數(shù)據(jù)庫(kù)名 > 導(dǎo)出的文件名
mysqldump [-h 127.0.0.1 -P 3306] -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.導(dǎo)出一個(gè)表
mysqldump -u 用戶名 -p 數(shù)據(jù)庫(kù)名 表名> 導(dǎo)出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.導(dǎo)出一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
-d 沒(méi)有數(shù)據(jù) --add-drop-table 在每個(gè)create語(yǔ)句之前增加一個(gè)drop table
4.導(dǎo)入數(shù)據(jù)庫(kù)
常用source 命令
mysql>source aa.sql
設(shè)置字符集(數(shù)據(jù)庫(kù)、數(shù)據(jù)表、數(shù)據(jù)列均可)
CHARACTER SET charset
排序方式
COLLATE collation
查看數(shù)據(jù)庫(kù)的存儲(chǔ)引擎
mysql>SHOW VARIABLES LIKE '%storage_engine%';
查看當(dāng)前數(shù)據(jù)庫(kù)中各表信息
mysql>SHOW TABLE STATUS;
mysql>CREATE TABLE IF NOT EXISTS tbl_name(...);
TEMOPARY臨時(shí)表當(dāng)與服務(wù)器斷開(kāi)時(shí)會(huì)自動(dòng)消失。TEMPORARY表只對(duì)創(chuàng)建該表的客戶(創(chuàng)建的鏈接)是可見(jiàn)的,因?yàn)槊總€(gè)客戶只能看到自己創(chuàng)建的數(shù)據(jù)表,所以不同的客戶可以各自創(chuàng)建一個(gè)名字相同的TEMPORARY數(shù)據(jù)表而不會(huì)發(fā)生沖突。而且因?yàn)門(mén)EMPORARY表是隱藏的,即使本數(shù)據(jù)庫(kù)中有與這張同名的表也可創(chuàng)建,而且查詢的時(shí)候會(huì)查尋TEMPORARY表的數(shù)據(jù)。
創(chuàng)建一張表的副本(不帶數(shù)據(jù)),可以將原表的表結(jié)構(gòu)完全復(fù)制
mysql>CREATE TABLE copy_tbl_name LIKE tbl_name;
而創(chuàng)建副本并帶數(shù)據(jù)的話,表結(jié)構(gòu)不能完全復(fù)制,如索引、AUTO_INCREMENT
mysql>CREATE TABLE copy_tbl_name SELECT * FROM tbl_name [WHERE XXXX];
MERGE表可以查各個(gè)MyISAM表,前提是表結(jié)構(gòu)一致,如:
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);
查詢幾個(gè)日志表總行數(shù):
SELECT COUNT(*) FROM log_merge;
這幾年每年各有多少事情發(fā)生:
SELECT YEAR(dt) AS y, COUNT(*) AS intries FROM log_merge GROUP BY y;
MERGE表可執(zhí)行UPDATE和DELETE操作,但不能執(zhí)行INSERT操作,因?yàn)椴恢劳菑埍聿鍞?shù)據(jù),故要加數(shù)據(jù)必須給其INSERT_METHOD值(NO/FIRST/LAST),ALTER TABLE log_merge INSERT_METHOD = LAST;
MERGE表還可包括壓縮的數(shù)據(jù)表
創(chuàng)建索引:
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);
改變數(shù)據(jù)列的數(shù)據(jù)類型:
mysql>ALTER TABLE tbl_name MODIFY i SMALLINT UNSIGNED;
mysql>ALTER TABLE tbl_name CHANGE i i SMALLINT UNSIGNED;
MODIFY和CHANGE子句都可以改變數(shù)據(jù)列的數(shù)據(jù)類型,但CHANGE還可同時(shí)修改數(shù)據(jù)列的名稱,不過(guò)即使不用修改,也要把名稱再多寫(xiě)一遍
加上數(shù)據(jù)庫(kù)名稱可以將該表移到另一個(gè)數(shù)據(jù)庫(kù):
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 的同義詞,如有相同的記錄則會(huì)只保留一條,若想全保留,用UNION ALL;當(dāng)UNION 與UNION ALL 混用時(shí),每個(gè)UNION操作將優(yōu)先于它左邊的任何UNION ALL操作
設(shè)置事物的隔離級(jí)別:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL level;
level: READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
子表里定義一個(gè)外鍵的語(yǔ)法:
[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類型數(shù)據(jù):
mysql>LOAD DATA LOCAL INFILE 'PATH' INTO TABLE tbl_name (col_name1, col_name2....);
查看存儲(chǔ)過(guò)程:
mysql>SHOW PROCEDURE STATUS;
mysql>SHOW CREATE PROCEDURE proc_name;
觸發(fā)器:
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;不允許有返回值
查看事件是否開(kāi)啟:
mysql>SHOW VARIABLES LIKE 'EVENT_SCHEDULER'; -- 0/OFF 1/ON
設(shè)置事件開(kāi)啟/關(guān)閉:(要有supper權(quán)限)
mysql>SET GLOABLE EVENT_SCHEDULER = 1/ON; -- 開(kāi)啟
mysql>SET GLOABLE EVENT_SCHEDULER = 0/OFF; -- 關(guān)閉
事件語(yǔ)法:
mysql>CREATE EVENT event_name
>ON SCHEDULE EVERY n interval/AT some_time
>DO ....;
轉(zhuǎn)載于:https://www.cnblogs.com/small-pig/p/4359794.html
總結(jié)
以上是生活随笔為你收集整理的MYSQL基础--学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 绚丽照片墙效果
- 下一篇: MySql数据库学习--存储过程(1)