一、mysql 忽略主鍵衝突、避免重複插入的幾種方式 。html
1.一、ignore,主鍵重複則不插入新數據。mysql
示例:linux
INSERT IGNORE INTO tbl (columnA,columnB,columnC) VALUES (1,2,3);
1.二、replace into,主鍵重複時用新數據整條替換老數據。git
示例:github
REPLACE INTO tbl (columnA,columnB,columnC) VALUES (1,2,3);
1.三、on duplicate key update,主鍵重複時更新部分字段。sql
示例:數據庫
INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA);
二、關於 MySQL 的超時值。ruby
1)、查看 MySQL 的各類超時值。bash
SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME LIKE '%timeout%'; # or SHOW GLOBAL VARIABLES LIKE '%timeout%';
2)、設置MySQL的鏈接超時參數能夠參考:一、二、三。服務器
四、用 sql 語句查看 MySQL/MariaDB 版本。
SELECT VERSION();
五、查看mysql當前鏈接數。
1)、查看狀態:
SHOW STATUS;
2)、查看當前鏈接數:
SHOW STATUS WHERE VARIABLE_NAME='Threads_connected';
3)、查看當前用戶有哪些鏈接:
SHOW processlist;
4)、查看全部用戶鏈接。(需root權限)
SHOW full processlist;
六、修改mysql最大鏈接數。
1)、查看:
/* 查看全部全局變量 */ SHOW GLOBAL VARIABLES; /* 查看最大鏈接數 */ SHOW GLOBAL VARIABLES WHERE VARIABLE_NAME='MAX_CONNECTIONS';
2)、臨時修改:
SET GLOBAL max_connections=3600;
3)、寫入配置文件,以Windows下MariaDB爲例,在C:\Program Files\MariaDB 10.0\data\my.ini的
[MySQLd]段增長或修改 max_connections=3600 。
七、查看大表的行數。
對於上千萬數量級大表,直接用
SELECT COUNT(*) FROM tablename;
即便建了主鍵或惟一索引也仍是很慢。能夠用下面兩種方式查看。
(1)、看下面結果的rows列。
SHOW TABLE STATUS FROM mydbname WHERE Name='mytablename';
(2)、看下面結果的TABLE_ROWS列。
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='mydbname' AND TABLE_NAME='mytablename' ;
上面兩種方式對於MyISAM存儲引擎結果是準確的;對於 InnoDB 存儲引擎,結果是近似值,可能還差很遠。walker對 InnoDB 一次測試的情況是,實際數據條數爲31182219,上面方式得出值爲38569811。可參考文檔SHOW TABLE STATUS Syntax關於rows的描述。
八、MySQL利用存儲過程執行循環語句。
USE dbname; DELIMITER $$ --定義結束符爲$$ DROP PROCEDURE IF EXISTS test_×××ert; --刪除已有存儲過程 CREATE PROCEDURE test_×××ert() --建立新的存儲過程 BEGIN DECLARE i INT DEFAULT 1; WHILE i<10 DO INSERT INTO tableName(idx) VALUES (i); SET i=i+1; END WHILE; END $$ --結束定義語句 DELIMITER ; --恢復結束符爲; CALL test_×××ert(); --調用存儲過程
九、將文本導入到mysql,load file示例。(行內分隔符爲Tab,換行符爲\n)
LOAD DATA [LOCAL] INFILE 'D:\\tmp\\test.txt' IGNORE INTO TABLE tableName FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
十、從mysql導出數據到文本
(1)、select ...into outfile,只能導出到服務端。
SELECT fieldname FROM tableName INTO OUTFILE 'D:\\-9.txt' LINES TERMINATED BY '\n';
(2)、mysql -e "SELECT ..." > file_name
mysql -h my.db.com -u usrname --password=pass db_name -e 'SELECT foo FROM bar' > /tmp/myfile.txt
注意:若是密碼用短命令格式-ppass,-p後不能有空格。
十一、用 mysqldump 遷移數據。
(1)、兩臺 mysql 服務器能直連。
mysqldump --databases db_name | mysql -uuser -p*** [--compress] -h 121.121.121.121 db_name
(2)、兩臺 mysql 服務器不能直連。(mysqldump with create database line)
#備份數據庫,若是沒有 -B 參數導出語句不會建立數據庫 mysqldump -uuser -p*** [-B] dbname > bakfile.sql #還原數據庫 mysql -uuser -p*** dbname [--default-character-set=utf8] < bakfile.sql
(3)、導出指定表。
mysqldump -uuser -p*** -t dbName --tables tableName > bakfile.sql
十二、mysql將數字字符串轉換爲數字的方法。參考這裏。
方法一:SELECT CAST('123' AS SIGNED); 方法二:SELECT CONVERT('123', SIGNED); 方法三:SELECT '123'+0;
1三、關於數據庫的字符集:
(1)、十分鐘搞清字符集和字符編碼
(2)、Aliyun RDS Change MySQL Charset From utf8 To utf8mb4
1四、修復/優化表。
#修復表(僅MyISAM引擎支持repair) REPAIR TABLE `table_name`; #優化表 OPTIMIZE TABLE `table_name`;
1六、修改用戶密碼。(可參考這裏)
use mysql; UPDATE user SET password=password('newpassword') WHERE user='root'; flush privileges;
1七、修改外鍵數據。
17.一、全局更改
# 禁用外鍵約束 SET FOREIGN_KEY_CHECKS=0; # 啓用外鍵約束 SET FOREIGN_KEY_CHECKS=1; # 查看外鍵約束 SELECT @@FOREIGN_KEY_CHECKS;
17.二、表級更改
1八、找出 url 字段斜線(/)字符大於兩個的條目。
SELECT * FROM issue WHERE (LENGTH(url) - LENGTH( REPLACE (url, '/', ''))) >2;
1九、查看錶的建立命令
SHOW CREATE TABLE my_table_name;
【相關閱讀】
*** walker ***