資料
http://www.cnblogs.com/lyhabc/p/3691555.html
http://www.cnblogs.com/lyhabc/p/3691555.html
MariaDb
官網: https://mariadb.org/
安裝位址: https://downloads.mariadb.org/mariadb/repositories
1. MySql .net Connector 在執行完指令後,關閉連接配接, 字元串中的 Password 會被清空。 設定帶有 Password 的新字元串,連接配接字元串也不顯示,但可以打開。
2. 我使用的是 HeidiSql用戶端, 在使用 group_concat 函數時報錯, 調試發現, group_concat 函數後面有一個空格,如果去除空格,則正确。不知道是用戶端的原因,還是MySql的原因。
3. MySqlWorkbench 自定義快捷鍵: http://blog.csdn.net/stableboy/article/details/45887035
4. 國内鏡像:
5. 連接配接: mysql -uroot -p1234
Windows安裝
安裝多份執行個體 , 拷貝多份 my.ini 目錄。運作:
C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqld --install MySql57_2 --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7_2\my.ini"
linux設定
檢視狀态: service mysql status
啟動服務: service mysql start
對于mariadb新版: systemctl restart mariadb.service
轉移資料庫
http://blog.csdn.net/renfufei/article/details/17616549
檢視配置
查找位置
which mysqld
/usr/sbin/mysqld --verbose --help
找出配置檔案位址:
/usr/sbin/mysqld --verbose --help | grep -A1 'Default options'
-A1 顯示查找到該行以及該行之後的 after 1行。
大小寫
設定MySql 區分大小寫:http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names
1)找到Mysql服務的配置檔案,它在服務啟動參數中: --defaults-file ,預設是:C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
2)在my.ini,在 [mysqld] 下添加: lower_case_table_names=2
3)重新開機MySql服務。
0:存儲為指定,大小寫比較。 特殊情況:Windows,Mac 不能指定為0
1: 存儲為小寫。
2:存儲為給定的名稱,但使用小寫比較。
CentOs7+mariadb10.0 路徑: /etc/my.cnf.d/server.cnf
Ubuntu14+ mariadb10.1 路徑: /etc/mysql/my.conf
設定遠端連接配接
參考:http://www.cnblogs.com/24la/p/mariadb-remoting-access.html
在本地打開mysql,執行:
use mysql;
select * from user\G; #檢視 user = 'root' 的記錄。 \G 表示一行一段的展示,友善閱讀。
GRANT ALL PRIVILEGES ON *.* to 'root'@'%' identified by '123456';
flush
privileges
;
如果上面的辦法不行(影響行數為0),則可以修改配置檔案。把 my.conf 裡的 bind-address一行注釋掉。
添加使用者
程式執行時的使用者及權限:
CREATE USER 'testuser'@'%' IDENTIFIED BY '1234';
GRANT USAGE ON *.* TO 'testuser'@'%';
GRANT SELECT, EXECUTE,CREATE, CREATE TEMPORARY TABLES, DELETE, INSERT, UPDATE, LOCK TABLES ON `test`.* TO 'testuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'testuser'@'%';
用戶端管理者的權限:
GRANT SELECT, EXECUTE, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, LOCK TABLES ON `test`.* TO 'testuser'@'%' WITH GRANT OPTION;
修改密碼
先看使用者在哪些主機上定義。
SELECT `user`, `host` FROM `mysql`.`user`;
SET PASSWORD FOR 'root'@'%' = PASSWORD('lwl417');
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('lwl417');
編碼
MySql編碼最奇葩,标準編碼: utf8mb4
collation: utf8mb4_general_ci
characterset: utf8mb4
非主鍵更新删除報錯
http://jingyan.baidu.com/article/e5c39bf58ed69239d76033a4.html
執行:
SET SQL_SAFE_UPDATES = 0;
備份還原
我沒有找到好的備份還原方法,MySql 這一點做的實在太差。
備份分為兩部分: 一是備份腳本,包含表結構,函數,存儲過程, 二是備份Insert資料.
預設情況下,導出資料庫和 Insert 資料 .不包含存儲過程和函數 .
一. 腳本:
mysqldump --host=server --user=root --password=1234 --no-data --routines DataBaseName > FileName
-d, --no-data 是不生成Insert語句
-R, --routines 是包含存儲過程和函數
二. 僅 insert語句.
mysqldump -u root -t DataBaseName > FileName
-t, --no-create-info , 在預設的基礎上,去除 create sql , 就剩 insert sql 了.
恢複:
mysql -uroot -p"db_password" -f dbname < backup.sql
-f 參數表示在導出過程中忽略出現的SQL錯誤
主從 資料同步設定
http://369369.blog.51cto.com/319630/790921/
快速複制資料庫
mysqldump -h ${源伺服器IP} -uroot -p123456 ${源資料庫} --add-drop-table | mysql -h ${目标資料庫IP} -u root -p123456 ${目标資料庫}
如果要忽略某些表, mysql dump 時添加:
--ignore-table=database.table1 --ignore-table=database.table2
https://blog.csdn.net/whatlookingfor/article/details/51942566
文法
1.函數模闆:
delimiter $$
CREATE function CompareStr (FirstVal varchar(1000),SecondVal varchar(1000) )
returns int
begin
if ( FirstVal is null ) then
return -1 ;
end if;
if ( SecondVal is null ) then
return -1 ;
end if;
set FirstVal = lower(rtrim(ltrim(FirstVal)));
set SecondVal = lower(rtrim(ltrim(SecondVal)));
if (FirstVal = SecondVal ) then
return 0;
else
return 1;
end if;
end
$$
DELIMITER ;
If ( condition) then statement elseif ( condition ) then statement end if ; 最後的 ; 一定要有。
2.存儲過程模闆
DELIMITER $$
CREATE PROCEDURE `S_CreateVarTable`(VarTable varchar(50) , VarName varchar(50), VarValue varchar(9) )
label_pro:
begin
set @CorpTable = replace(VarTable , concat( '{' , VarName ,'}' ), concat('{' , VarValue , '}')) ;
if exists (select 1 from information_schema.Tables where table_schema= database() and table_Name = @CorpTable ) then
leave label_pro;
end if;
set @sql = N'
create table `{InstanceTable}` (
select *
from `{VarTable}`
limit 0,0 );
';
set @sql = replace(@sql,'{VarTable}', VarTable) ;
set @sql = replace(@sql,'{InstanceTable}', @CorpTable) ;
prepare smt from @sql ;
execute smt ;
end$$
DELIMITER ;
3. 修改自增種子值:
alter table
users
AUTO_INCREMENT=10000;
4. 計算列:
https://mariadb.com/kb/en/mariadb/virtual-computed-columns/
http://www.linuxidc.com/Linux/2016-02/128066.htm
在建立列類型後面添加: GENERATED ALWAYS AS ($表達式$)
如果是計算列, MySql 有兩種方式:Virtual 和 Stored。 MariaDb 稱為: Virtual 和 Presistent
5. 血的教訓. 分頁必須要有 order by
詭異的情況: group by broker_id , dealer_id limit #{take} , #{skip} 擷取所有的資料時, 出現重複資料.
![]() | 作者:NewSea 出處:http://newsea.cnblogs.com/ QQ,MSN:[email protected] 如無特别标記說明,均為NewSea原創,版權私有,翻載必糾。歡迎交流,轉載,但要在頁面明顯位置給出原文連接配接。謝謝。 |