mysql datatable_MySQL-数据表操作
1.打開數(shù)據(jù)庫
語法:USE 數(shù)據(jù)庫名稱;
SELECT DATABASE();---查詢當(dāng)前使用的數(shù)據(jù)庫
2.創(chuàng)建數(shù)據(jù)表
語法:CREATE TABLE [IF NOT EXITS] table_name(
column_name data_type,
...
)
3.查看數(shù)據(jù)表
語法:SHOW TABLES;
4.查看數(shù)據(jù)表結(jié)構(gòu)
語法:SHOW COLUMNS FROM tbl_name;---查詢表的列結(jié)構(gòu)
4.數(shù)據(jù)表插入記錄
語法:
INSERT [INTO] tbl_name [(col_name,...)] VALUES (VAL,...)
說明:.如果省略列名,則需要給每列都要賦值!
.可以只給部分字段插入值,通過指定要插入的字段即可。
.對float型,如果插入值的小數(shù)點位數(shù)大于實際定義位數(shù),可以插入成功,只是截取定義的位數(shù)。
查看數(shù)據(jù)表內(nèi)容:
SELECT expr FROM tbl_name;
注意:常用的SELECT * FROM tbl_name,不是查詢所有記錄,而是指查詢所有字段。
5.數(shù)據(jù)表數(shù)據(jù)的更新
UPDATE TABLE tableName SET field1=newValue1,field2=newValue2,...
[WHERE clause]
6.數(shù)據(jù)表數(shù)據(jù)的刪除
DELETE FROM TABLE tableName [WHERE Clause]
說明:DML語句即是對數(shù)據(jù)表中數(shù)據(jù)的操作語句,是指INSERT,UPDATE,DELETE
7.SELECT *與SELECT 所有字段差異
.特別注意:兩者的查詢效率是一樣的;
.建議使用后者,主要是考慮到數(shù)據(jù)庫代碼的可閱讀性,特別是其他人來維護(hù)代碼時,后者更容易讓其他人了解數(shù)據(jù)表的字段!
8.冪等性
8.1概念
一個冪等操作的特點是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。
冪等函數(shù),或冪等方法,是指可以使用相同參數(shù)重復(fù)執(zhí)行,并能獲得相同結(jié)果的函數(shù)。
8.2實際的冪等技術(shù)方法
1.查詢操作 查詢一次和查詢多次,在數(shù)據(jù)不變的情況下,查詢結(jié)果是一樣的。select是天然的冪等操作。
刪除操作 刪除操作也是冪等的,刪除一次和多次刪除都是把數(shù)據(jù)刪除。(注意可能返回結(jié)果不一樣,刪除的數(shù)據(jù)不存在,返回0,刪除的數(shù)據(jù)多條,返回結(jié)果多個)
3.唯一索引,防止新增臟數(shù)據(jù) 比如:支付寶的資金賬戶,支付寶也有用戶賬戶,每個用戶只能有一個資金賬戶,怎么防止給用戶創(chuàng)建資金賬戶多個,那么給資金賬戶表中的用戶ID加唯一索引,所以一個用戶新增成功一個資金賬戶記錄
要點: 唯一索引或唯一組合索引來防止新增數(shù)據(jù)存在臟數(shù)據(jù) (當(dāng)表存在唯一索引,并發(fā)時新增報錯時,再查詢一次就可以了,數(shù)據(jù)應(yīng)該已經(jīng)存在了,返回結(jié)果即可)
token機(jī)制,防止頁面重復(fù)提交
業(yè)務(wù)要求:頁面的數(shù)據(jù)只能被點擊提交一次
發(fā)生原因:由于重復(fù)點擊或者網(wǎng)絡(luò)重發(fā),或者nginx重發(fā)等情況會導(dǎo)致數(shù)據(jù)被重復(fù)提交
解決辦法:集群環(huán)境:采用token加redis(redis單線程的,處理需要排隊) 單JVM環(huán)境:采用token加redis或token加jvm內(nèi)存。
處理流程:
數(shù)據(jù)提交前要向服務(wù)的申請token,token放到redis或jvm內(nèi)存,token有效時間
提交后后臺校驗token,同時刪除token,生成新的token返回
token特點:要申請,一次有效性,可以限流
注意:redis要用刪除操作來判斷token,刪除成功代表token校驗通過,如果用select+delete來校驗token,存在并發(fā)問題,不建議使用。
5. 悲觀鎖 獲取數(shù)據(jù)的時候加鎖獲取
select * from table_xxx where id='xxx' for update;
注意:id字段一定是主鍵或者唯一索引,不然是鎖表,會死人的
悲觀鎖使用時一般伴隨事務(wù)一起使用,數(shù)據(jù)鎖定時間可能會很長,根據(jù)實際情況選用
樂觀鎖 樂觀鎖只是在更新數(shù)據(jù)那一刻鎖表,其他時間不鎖表,所以相對于悲觀鎖,效率更高。
樂觀鎖的實現(xiàn)方式多種多樣可以通過version或者其他狀態(tài)條件:
1、通過版本號實現(xiàn)
update table_xxx set name=#name#,version=version+1 where version=#version#
2、通過條件限制
update tablexxx set name=#name#,version=version+1 where id=#id# and version=#version#
update tablexxx set avaiamount=avaiamount-#subAmount# where id=#id# and avai_amount-#subAmount# >= 0
注意:樂觀鎖的更新操作,最好用主鍵或者唯一索引來更新,這樣是行鎖,否則更新時會鎖表
總結(jié)
以上是生活随笔為你收集整理的mysql datatable_MySQL-数据表操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 5.6 双向互备_mysql
- 下一篇: tp5备份mysql_tp5备份数据库