mysql问题总结

来源:互联网 发布:mac卸载windows系统 编辑:程序博客网 时间:2024/05/20 23:33

通过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。