MySQL中可能忽视的几个细节问题

从SQL SERVER转型到MySQL的过程中,我发现对SQL SERVER的DBA来说,使用MySQL时有些容易忽略的问题。先整理了几个:

一、用户名是大小写敏感的(我们开启了lower_case_table_names来解决表名和库名大小写的问题,但是貌似没找到参数可以配置用户名的大小写问题),比如说创建的用户名是appuser,用AppUser登录就会失败,这点在我们配置连接串的时候出现过问题,而且一时难以发现。

二、关于自增长列:

1、 自增长列可能不是唯一的。MySQL在创建表时,要求auto_crement的字段必须是key,但并不要求是唯一索引,因此如果只将自增长列定义为普通的索引,则可以在里面插入重复的自增ID。

2、当自增长列超过字段类型允许的上限时,获取到的值就是允许的最大值。比如定义为tinyint的自增长,当增长到127时达到上限,继续插入数据,获取到的值仍然是127。这时如果自增长是主键或有唯一约束,则会插入报错;否则,会有重复的127值插入。

三、关于存储过程的definer:(如果不指定definer,则存储过程的definer就是创建者)除非在创建存储过程时显式指定SQL SECURITY为INVOKER,否则默认情况下存储过程运行时就是以definer的权限运行。也就是说,当definer有足够权限的时候,任何用户只要有执行存储过程的权限,就可以成功运行存储过程中的任何内容。并且,如果definer的用户在MySQL里不再存在,那么存储过程的运行就会出错。

猜你喜欢

转载自ctripmysqldba.iteye.com/blog/1852213