MySQL/MariaDB Tips

一、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的鏈接超時參數能夠參考:服務器

三、Windows下移動MariaDB數據目錄

四、用 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五、MySQL整數(int)的取值範圍

wKiom1d8di2BlbCyAABA6xQoJAg938.png

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 ***

相關文章
相關標籤/搜索