Mysql数据库常用操作

时间:2022-09-16 14:47:56

1.登录数据库

格式: mysql -h主机地址 -u用户名 -p用户密码–P端口 –D数据库–e “SQL 内容”

常用:mysql -uroot -p 数据库名称

2.选择数据库

常用:use 数据库名称

3.修改用户密码

方法一: 
(适用于管理员或者有全局权限的用户重设其它用户的密码)
进入命令行模式
mysql -u root -p
 
mysql>use mysql;
mysql> update user set authentication_string=password("gsyg123abc")where user="mtkj_test";

mysql> FLUSH PRIVILEGES;
mysql> flush privileges;
 
方法二:
mysql -u root -p 
mysql>use mysql; 
mysql> SET PASSWORD FOR   username=PASSWORD('new password');
mysql> QUIT
 方法三:
 mysqladmin -u root "old password" "new password"
注:new password请输入你想要设置的密码。

 

4.添加用户并授权

添加用户:

语法:create user [用户名]@[IP] identifiedby [密码];

例:

create user 'test'@'localhost' identified by'test';

create user 'test'@'%' identified by 'test';

create user 'test'@'192.168.1.1' identified by'test';

授权:

§  授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):

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

     例:

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

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

§  指定部分权限给一用户,可以这样来写:

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

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

§  授权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,如果设为真实的本地地址,不知道是否可以,没有验证。)

//对localhost授权:加上一句grant all privileges on testDB.* to test@localhostidentified by '1234';即可。

撤销授权:

命令: REVOKE privilege ONdatabasename.tablename FROM 'username'@'host'; 
说明: privilege,databasename, tablename - 同授权部分. 
例子: REVOKESELECT ON *.* FROM 'pig'@'%'; 
注意: 假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ONtest.user TO 'pig'@'%', 则在使用REVOKE SELECT ON *.* FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECTON *.* TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select 权限. 
具体信息可以用命令SHOW GRANTSFOR 'pig'@'%'; 查看. 

5.删除用户

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

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

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

删除账户及权限:

>drop user 用户名@'%';

>drop user 用户名@ localhost; 

6.创建表

createtable s_position

(

idint not null auto_increment,

namevarchar(20) not nulldefault '经理',  #设定默认值

descriptionvarchar(100),

primarykey PK_positon (id) #设定主键

);

7.添加字段

alter table 表名 add column字段名 类型(int、varchar等) [not Null] [comment '注释'];

8.修改字段

修改字段名称:

alter table 表名称 change 原字段名称 新字段名称 字段类型 [是否允许非空];

修改字段类型或长度:

altertable 表名 modify column 字段名类型;

9.删除字段

ALTER TABLE 表名 DROP 字段名;

10.添加索引

添加PRIMARY KEY(主键索引):

ALTERTABLE 表名 ADD PRIMARY KEY ( `字段名` );

添加UNIQUE(唯一索引或约束):

ALTERTABLE 表名ADD UNIQUE ( `字段名` );

添加INDEX(普通索引):

ALTERTABLE `表名` ADD INDEX index_name ( `字段名` );

添加FULLTEXT(全文索引):

ALTERTABLE `表名 ` ADD FULLTEXT ( `字段名`);

添加多列索引:

ALTERTABLE `表名` ADD INDEX index_name ( `字段名1`, `字段名2`, `字段名3` );

11.mysql查询缓存

开启查询缓存:

my.cnf文件中添加如下配置:

query_cache_type= 1     # 0代表关闭查询缓存OFF,1代表开启ON,2(DEMAND)代表当sql语句中有SQL_CACHE关键词时才缓存

query_cache_size= 600000

查询缓区的碎片整理:

查询缓存使用一段时间之后,一般都会出现内存碎片,为此需要监控相关状态值,并且定期进行内存碎片的整理,碎片整理的操作语句:FLUSH QUERYCACHE;

清空查询缓存的数据:
那些操作操作可能触发查询缓存,把所有缓存的信息清空,以避免触发或需要的时候,知道如何做,二者可触发查询缓存数据全部清空的命令:
1. RESET QUERY CACHE;
2. FLUSH TABLES;

12.创建数据库

CREATEDATABASE 数据库名称 DEFAULTCHARACTER SET utf8 COLLATE utf8_general_ci

 

 

13.删除数据库

dropdatabase 数据库名称

 

14.备份(库或表)

mysqldump –hlocalhost -u root -p 数据库名 [表名] > xxx.sql

一次备份多个数据库:

mysqldump-uroot -p123456 --databases db1 db2 > xxx.sql

备份数据同时备份存储过程、函数、触发器

mysqldump -uroot -p123456 --single-transaction --routines --triggers 数据库名称 > xxx.sql

15.恢复(库或表)

mysql -u root -p[dbname][tablename] < xxx.sql

16.存储过程

执行权限问题:

       方法一:修改存储过程的definer

       update mysql.proc setdefiner='root@localhost' where db='db_name';

方法二:修改sql security

       sql secuirty的值决定了调用存储过程的方式,取值 :definer或者invoker

       definer:在执行存储过程前验证definer对应的用户如:root@192.168.2.%是否存在,以及是否具有执行存储过程的权限,若没有则报错

        invoker:在执行存储过程时判断inovker即调用该存储过程的用户是否有相应权限,若没有则报错。

       修改语法:

        alter procedure pro_name sql securityinvoker;

17.修改数据库表编码方式和排序规则

ALTERTABLE 表名DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

18.主从复制

主库配置:

在my.cnf[mysqld]下配置

server_id= 3

#log_bin=mysql-bin

#binlog-do-db=yijiayi #表示需要同步的数据库名字

#binlog-ignore-db=information_schema #表示不需要同步的数据库名字

设置完毕,命令行输入:show master status;

创建用于主从的用户并授权。

从库配置:

在my.cnf[mysqld]下配置

server_id= 2

relay_log         = mysql-relay-bin

log_slave_updates= 1

read_only         = 1

#replicate-ignore-db= yijiayi

#replicate-ignore-db= information_schema

在mysql命令行中输入:

CHANGEMASTER TOMASTER_HOST='192.168.1.170',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=513;

19查看用户权限

show grants for 'cactiuser'@'%';