关于MySQL的一些记录

1.1 mysql gbk乱码解决

解决办法: cp /usr/share/mysql/my-medium.cnf /etc/my.cnf ;

编辑:增加两个编码变量

[client]

default-character-set=gbk

[mysqld]
character_set_server=gbk
datadir=/var/lib/mysql

socket = /var/lib/mysql/mysql.sock

上面设置好后,重启mysql即可。



1.2 创建用户:

  mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
2.为用户授权

  授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 
    2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):

   mysql>grant all privileges on testDB.* to test@localhost identified by '1234';

   mysql>flush privileges;//刷新系统权限表

  格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 

  2.4 如果想指定部分权限给一用户,可以这样来写:

  mysql>grant select,update on testDB.* to test@localhost identified by '1234';

  mysql>flush privileges; //刷新系统权限表

  2.5 授权test用户拥有所有数据库的某些权限:  

  mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";

     //test用户对所有数据库都有select,delete,update,create,drop 权限。

  //@"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)

3. 删除用户

   @>mysql -u root -p

  @>密码

   mysql>Delete FROM user Where User='test' and Host='localhost';

   mysql>flush privileges;

   mysql>drop database testDB; //删除用户的数据库

删除账户及权限:>drop user 用户名@'%';

        >drop user 用户名@ localhost;

 

4. 修改指定用户密码

    @>mysql -u root -p

    @>密码

    mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";

    mysql>flush privileges;
 
 
/******************************************************
建议进行如下设置:
原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:
1、用root登录,修改 /etc/my.cnf;
2、在[mysqld]节点下,加入一行: lower_case_table_names=1
3、重启MySQL即可;

******************************************************/
 
 
4.  MySQL实现序列效果
一般使用序列(Sequence)来处理主键字段,在MySQL中是没有序列的,但是MySQL有提供了自增长(increment)来实现类似的目的,但也只是自增,而不能设置步长、开始索引、是否循环等,最重要的是一张表只能由一个字段使用自增,但有的时候我们需要两个或两个以上的字段实现自增(单表多字段自增),MySQL本身是实现不了的,但我们可以用创建一个序列表,使用函数来获取序列的值

 
1. 新建序列表

***************重要********************
set global log_bin_trust_function_creators=1;
//在/etc/my.cnf中找到[mysqld],在它下面添加这样一行:
log_bin_trust_function_creators = 1

DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
     seq_name VARCHAR(50) NOT NULL,
     current_val INT NOT NULL,
     increment_val INT NOT NULL DEFAULT 1,
     PRIMARY KEY (seq_name)
) ENGINE=InnoDB;

DROP FUNCTION IF EXISTS currval;
CREATE DEFINER=`xfxd`@`%` FUNCTION `currval`(v_seq_name VARCHAR(50)) RETURNS int(11)
begin     
    declare value integer;      
    set value = 0;      
    select current_val into value  from sequence where seq_name = v_seq_name;
   return value;
end

DROP FUNCTION IF EXISTS nextval;
CREATE DEFINER=`xfxd`@`%` FUNCTION `nextval`(v_seq_name VARCHAR(50)) RETURNS int(11)
begin
    update sequence set current_val = current_val + increment_val  where seq_name = v_seq_name;
    return currval(v_seq_name);
end

DROP FUNCTION IF EXISTS setval;
CREATE DEFINER=`xfxd`@`%` FUNCTION `setval`(v_seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
BEGIN
     UPDATE sequence
          SET current_val = value
          WHERE seq_name = v_seq_name;
     RETURN currval(v_seq_name);

END


2. 新增一个序列
    INSERT INTO sequence VALUES ('seq_test1_num1', '0', '1');  
    INSERT INTO sequence VALUES ('seq_test1_num2', '0', '2'); 


4. 查询当前值
    select currval('seq_test1_num1'); 

8. 新建触发器 插入新纪录前给自增字段赋值实现字段自增效果
    CREATE TRIGGER `TRI_test1_num1` BEFORE INSERT ON `test1` FOR EACH ROW BEGIN  
    set NEW.num1 = nextval('seq_test1_num1');  
    set NEW.num2 = nextval('seq_test1_num2');  
    END 

/*********************************************

ln -s /usr/lib64/mysql/libmysqlclient.so /usr/lib/libmysqlclient.so

***********************************************/


5. Mysql导出表结构及表数据 mysqldump用法

命令行下具体用法如下:  mysqldump -u用戶名 -p密码 -d 数据库名 表名 脚本名;


1、导出数据库为dbname的表结构(其中用戶名为root,密码为dbpasswd,生成的脚本名为db.sql)

mysqldump -uroot -pdbpasswd --default-character-set=gbk -d dbname >db.sql;


2、导出数据库为dbname某张表(test)结构

mysqldump -uroot -pdbpasswd --default-character-set=gbk -d dbname test>db.sql;


3、导出数据库为dbname所有表结构及表数据(不加-d)

mysqldump -uroot -pdbpasswd --default-character-set=gbk dbname >db.sql;


4、导出数据库为dbname某张表(test)结构及表数据(不加-d)

mysqldump -uroot -pdbpasswd --default-character-set=gbk dbname test>db.sql;

备份MySQL数据库为带删除表的格式,备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql

直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql

还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

5.如果需要导出mysql里面的函数或者存储过程
  mysqldump -hhostname -uusername -ppassword -ntd -R databasename > backupflie.sql
  mysqldump -hlocalhost -uroot -ntd -R hqgr > hqgr.sql
  其中的 -ntd 是表示导出存储过程;-R是表示导出函数

只导数据不导结构
mysqldump -t 数据库名 -uroot -p > xxx.sql

全导:(函数、表结构、数据)
mysqldump -hhostname -uusername -ppassword  -R databasename > backupflie.sql

猜你喜欢

转载自blog.csdn.net/u012724167/article/details/78250980