mysql计算后精度增大_Mysql用法汇总
mysql用法總結(jié)及整理
1、group by …HAVING 獲取分組大于某個總數(shù)的的前多少位
SELECT user_id, count(*) as total FROM `blog_index_tbl` WHERE add_time BETWEEN UNIX_TIMESTAMP('2016-01-01 00:00:00') AND UNIX_TIMESTAMP('2016-12-31 23:59:59') GROUP BY user_id HAVING total > 1 ORDER BY total DESC;
最近研發(fā)的項目對DB依賴比較重,梳理了這段時間使用MySQL遇到的8個比較具有代表性的問題,答案也比較偏自己的開發(fā)實踐,沒有DBA專業(yè)和深入,有出入的請使勁拍磚!…
MySQL讀寫性能是多少,有哪些性能相關(guān)的配置參數(shù)?
MySQL負載高時,如何找到是由哪些SQL引起的?
如何針對具體的SQL做優(yōu)化?
SQL層面已難以優(yōu)化,請求量繼續(xù)增大時的應對策略?
MySQL如何做主從數(shù)據(jù)同步?
如何防止DB誤操作和做好容災?
該選擇MySQL哪種存儲引擎,Innodb具有什么特性?
MySQL內(nèi)部結(jié)構(gòu)有哪些層次?
3、MySQL表復制
復制表結(jié)構(gòu)+復制表數(shù)據(jù)
mysql> create table t3 like t1;
mysql> INSERT INTO t3 SELECT * t1;
注意:如果需要把表中的某一個字段拷貝到另一個表中對應的字段處,就可以使用相應的字段。
4、MySQL事務(wù)處理
MyIsam 引擎不支持事務(wù)處理,必須使用 innoDB
然后進行 commit 命令提交,數(shù)據(jù)才能被真正刪除,否則該操作會鎖行,其他的不能進行操作。
1、關(guān)閉自動提交功能:
SET autocommit=0;
2、刪除id為1的用戶:
DELETE FROM test_tbl WHERE id=1;
3、在表界面手動刪除id=1的用戶
在開啟事務(wù)的情況下,另一個用戶在表界面手動刪除id=1的用戶,會出現(xiàn)鎖行的情況出現(xiàn)
4、提交事務(wù)后,刪除的數(shù)據(jù)才會被從表中真正的刪除。
commit
綜上,如果有事務(wù),則其他操作會被鎖行,等到事務(wù)提交后,才能對鎖行的進行編輯、刪除操作。
關(guān)于事務(wù)的一篇文章,大家可以看看:
MySQL默認操作模式就是 autocommit 自動提交模式。這就表示除非顯式地開始一個事務(wù),否則每個查詢都被當做一個單獨的事務(wù)自動執(zhí)行。我們可以通過設(shè)置autocommit的值改變是否是自動提交autocommit模式。
通過以下命令可以查看當前autocommit模式
mysql> show variables like ‘a(chǎn)utocommit’;
Variable_name
Value
autocommit
ON
1 row in set (0.04 sec)
從查詢結(jié)果中,我們發(fā)現(xiàn)Value的值是ON,表示autocommit開啟。我們可以通過以下SQL語句改變這個模式
mysql> set autocommit = 0;
值0和OFF都是一樣的,當然,1也就表示ON。通過以上設(shè)置autocommit=0,則用戶將一直處于某個事務(wù)中,直到執(zhí)行一條commit提交或rollback語句才會結(jié)束當前事務(wù)重新開始一個新的事務(wù)。
舉個例子:
張三給李四轉(zhuǎn)賬500元。那么在數(shù)據(jù)庫中應該是以下操作:
1,先查詢張三的賬戶余額是否足夠
2,張三的賬戶上減去500元
3,李四的賬戶上加上500元
以上三個步驟就可以放在一個事務(wù)中執(zhí)行提交,要么全部執(zhí)行要么全部不執(zhí)行,如果一切都OK就commit提交永久性更改數(shù)據(jù);如果出錯則rollback回滾到更改前的狀態(tài)。
利用事務(wù)處理就不會出現(xiàn)張三的錢少了李四的賬戶卻沒有增加500元或者張三的錢沒有減去李四的賬戶卻加了500元。
MySQL默認的存儲引擎是MyISAM,MyISAM存儲引擎不支持事務(wù)處理,所以改變autocommit沒有什么作用。但不會報錯,所以要使用事務(wù)處理的童鞋一定要確定你所操作的表示支持事務(wù)處理的,如InnoDB。如果不知道表的存儲引擎可以通過查看建表語句查看建表的時候有沒有指定事務(wù)類型的存儲引擎,如果沒有指定存儲引擎默認則是MyISAM不支持事務(wù)的存儲引擎。
當然,事務(wù)處理是為了保障表數(shù)據(jù)原子性、一致性、隔離性、持久性。這些都是要消耗系統(tǒng)資源的,要謹慎選擇。
php中使用事物實例
$state = 0;
// 添加事物處理
try {
// 開啟事物
$GLOBALS['db']->beginTransaction();
// 更新管理平臺密碼
$state = $GLOBALS['db']->query("update admin_user set password='$password_confirm' where user_id=$user_id");
if($state != true)
{
throw new Exception ('更新管理平臺密碼失敗!');
}
$ret = $this->modify_ldap_pwd($user_name, $user_password_old, $user_password_confirm);
if(!$ret)
{
throw new Exception ('更新LDAP密碼失敗!');
}
// 提交事物
$GLOBALS['db']->commit();
$state = 1;
}
catch (Exception $e)
{
// 回滾
$GLOBALS['db']->rollBack();
}
4、MySQL表外鍵
一個表的外鍵必定是另外一個表的主鍵,只有innodB支持外鍵和事務(wù)處理。
5、刪除表數(shù)據(jù)主鍵從1開始
在數(shù)據(jù)庫應用,我們經(jīng)常要用到唯一編號,以標識記錄。在MySQL中可通過數(shù)據(jù)列的AUTO_INCREMENT屬性來自動生成。mysql支持多種數(shù)據(jù)表,每種數(shù)據(jù)表的自增屬性都有差異,這里將介紹各種數(shù)據(jù)表里的數(shù)據(jù)列自增屬性。
數(shù)據(jù)庫中設(shè)置了自增列,有時候需要清楚數(shù)據(jù)庫從新錄入數(shù)據(jù).最常見的做法就是使用sql語句”delete 表明名”或是直接選中數(shù)據(jù),然后刪除數(shù)據(jù).但是再次插入數(shù)據(jù)的時候,你就會發(fā)現(xiàn)自增列會從上次刪除數(shù)據(jù)的最大值的下一個值開始,而不是從1開始的.有沒有一種感覺,感覺挺苦惱的.
現(xiàn)在就交你一種方法,讓你刪除數(shù)據(jù)后,再次插入記錄的時候,自增列從1開始.
truncate table 你的表名 // 這樣不但將數(shù)據(jù)全部刪除,而且重新定位自增的字段
truncate table `goods_tbl`;
mysql 小數(shù)點精度問題
今天在設(shè)計數(shù)據(jù)表時,突然發(fā)現(xiàn)原來FLOAT是很不靠譜的,所以在這里建議大家換成DOUBLE類型,
原因是:
在mysql手冊中講到,在MySQL中的所有計算都是使用雙精度完成的,使用float(單精度)會有誤差,出現(xiàn)意想不到的結(jié)果。
在我們查詢數(shù)據(jù)時,MySQL使用64位十進制數(shù)值的精度執(zhí)行DECIMAL操作,float(5.54) = 5.54 如果出現(xiàn)精度丟失,這個是不等的。這樣,本來我們應該能查到的數(shù)據(jù)就會莫名其妙的消失。
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的mysql计算后精度增大_Mysql用法汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python读文件缺key_在Pytho
- 下一篇: 静态路由实验 +http+dns_华为静