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