您的位置:首页 > 数据库 > MySQL

mysql问题总结

2010-08-25 13:21 351 查看
通过xyykt项目,总结了mysql的一些常用命令及遇到的问题.

登陆:mysql -u用户名 -p密码

用户

为用户赋权限语句:GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `AUTHTEST`.* TO 'username@'%'

注意:username@'%'username@'localhost'是两个不同的用户,付给一个用户的权限不会适用于另一个。

配置文件my.cnf

mysql配置文件路径:/etc/my.cnf (如果这里没有,还可以尝试查找:mysql-data-dir/my.cnf, ~/.my.cnf)

mysql安装完后,需要修改这个配置文件,添加两行:

default-character-set=gbk(或utf8):使数据库支持中文,使后面新建的模式默认字符为gbk(详细见前面的博文“MYSQL数据库字符集支持”、“mysql字符集问题”);

lower_case_table_names=1:使mysql不区分大小写(如果在数据库区分大小写的情况下,新建了名称为大写的模式、表等。后来在my.cnf添加了这一行,这些对象就不能再使用。因为不区分大小写就意味着mysql将所有命令及sql语句的大写字母自动转换成小写,再到数据库中匹配,若数据库中有大写名称的对象,就无法被识别);

表类型

(参见“mysql表类型”)如果表涉及到事务操作,需要在建表时制定表类型为InnoDB,

语句是:

create table databasename.tablename
(
……
)engine=InnoDB;

timestamp类型注意

(参见“mysql TIMESTAMP详解 ”)一个表里只能有一个自动生成类型的字段:自动生成字段类型包括自增流水、insert自动更新timestamp、update自动更新timestamp。

如果一个表里需要存在多个这种字段,可以用触发器trigger,例如:

create table databasename.tablename
(

……
intime timestamp not null default CURRENT_TIMESTAMP,
modtime timestamp,
……

);

create trigger databasename.triggername before update on databasename.tablename for each row set new.modtime=now();

存储过程执行权限

原理:用户A创建一个存储过程,将其执行权限赋给用户B,则用户B可以执行该存储过程。

mysql-connector-java-5.1.12-bin.jar的bug:以上原理不适用,也就是说,用户A创建的存储过程,给用户B付了执行权限以后,B仍然无法执行。解决办法是在mysql连接的参数中添加“noAccessToProcedureBodies=true”;

mysql-connector-java-5.1.13-bin.jar修正了这个bug。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: