關於mysql SQL語句的細節

2021-06-28 06:17:34 字數 1499 閱讀 2703

當一天的工作量比較大的時候,我們有時候都會被自己寫的語句給矇到。以下是本人工作中遇到的情況

1、on duplicate key update 寫多了set :

insert into t_abcd(a,b,c,d) values(1,1,1,1) on duplicate key update set a =2
而正確的寫法應該是: insert into t_abcd(a,b,c,d) values(1,1,1,1) on duplicate key update a =2

2、對於有自增id的主鍵,又有時間的,常常使用order by `time` desc 而不是使用order by id desc; 

在此情況下為了提高查詢效率,應該使用 order  by id desc;

3、對於每天獎勵領取的,在使用者領取的時候,特別要留意更新的語句;

如:新年活動,玩家充值後,即可每天領取300個金幣。判斷是否領取的條件是使用gettime的字段。

3)、isget>0 再執行 充值金幣邏輯語句。

其實以上的邏輯是有問題的。特別是在幾台伺服器做負載均衡的時候;使用者隨便寫乙個批量請求的指令碼就可以領取多次金幣了;因為每次請求,當獲取到的time解決方法:使用資料庫的更新條件加以判斷即可:

update table_a set  gettime=now() where userid=?  and gettime < convert(now(),date);

4、對於鍵表,如果是記錄次數的,最好先default 0;如果不default 0,那麼在初始化的時候一定要賦值。否則,在執行語句update set num = num + 1 的時候,是不會報錯的:

create table tb_test(

id int(11) auto_increment,

a tinyint(3),

primary key (id)

)engine=innodb default character set=utf8mb4;

insert into tb_test(id) values(1);

update tb_test set a=a+1 where id = 1;

select *from tb_test;

正確的建表:

create table tb_test(

id int(11) auto_increment,

a tinyint(3) default 0,

primary key (id)

)engine=innodb default character set=utf8mb4;

2015-03-02更新:

mysql  varchar(20)  ;表明字段可以容納20個字元的字串,漢字字母均為乙個字元;

以上是工作上的一些sql語句總結,如果有錯誤,請大家指出。

MySql Sql語句總結

建表語句 create table class id int primary key,class char 255 name varchar 4000 hobby text int 和 integer 是一樣的,只是為了簡寫罷了,主鍵宣告直接跟在定義後面,char和varchar char是固定長度...

MySQL SQL語句優化

檢視表定義 show create table users 檢視表的索引 show index from users 你要獲取第乙個表的所有資訊,你說全表掃瞄快呢還是索引掃瞄快呢?所以當你查詢庫 包括left join中的臨時庫 的所有資訊時,資料庫會選擇最優方法 全表掃瞄!s表dept id na...

MySQL sql語句筆記

sql 插入insert into 表名 列名 values 值列表 關鍵字 可省略 insert into stu name,age,city values 18,1 更新 update 表名 set 列名 更新值 where 更新條件 update stu set name sdfsdf age...