MYSQL日常操作

1、MyIASM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyIASM

2、InnoDB用于事务处理(默认),具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB

 

安装完mysql第一次登陆账号为root,密码为空

mysql –u root

[root@c1 ~]# mysqladmin -u root password  qwer1234  #设置密码

[root@c1 ~]# mysqladmin -uroot -pqwer1234 password qwert6789     #修改密码
[root@c1 ~]# mysql -uroot –pqwert12345                  #密码登陆

MariaDB [mysql]> create database auth;                #创建库
MariaDB [(none)]> show databases;                        #查看有哪些库

MariaDB [(none)]> use mysql;                                  #进入库

MariaDB [mysql]> show tables;                               #查看有哪些表

MariaDB [mysql]> describe user;                            #查看表结构

创建表

MariaDB [mysql]> use auth;

create  tables  表名 (字段1名称 类型,字段2名称 类型,…..,primary key (主键名))                  #创建表

MariaDB [auth]> create  table users (user_name char(16) not null, user_passwd char(48) default '', primary key (user_name));

mysql> create table user(
    -> id int unsigned not null auto_increment primary key,
    -> user_name varchar(20) not null,
    -> password char(32) not null,
    -> email varchar(50) not null,
    -> mobile char(11) not null,
    -> fee decimal(10,2) default 0.00 not null,
    -> age tinyint unsigned not null
    -> );

插入数据记录

insert into  表名 (字段1,字段2,……) values (字段1的值,字段2的值,…….)    #插入数据记录

MariaDB [auth]> insert into users(user_name,user_passwd) values('zhangsan', password ('123456'));

如果记录完整包括表中所有字段的值,则插入语句中指定字段的部分可以省略

MariaDB [auth]> insert into users  values('lisi',password('654321'));

查询数据记录

select 列名1,列名2,…… from 表名  where  条件表达式

MariaDB [auth]> select * from auth.users;

MariaDB [auth]> select user_name,user_passwd from auth.users where user_name='zhangsan';

mysql> truncate user;                      #清空表

修改数据记录

update 表名 set  字段1=字段值1[,字段2=字段值2]  where 条件表达式

MariaDB [auth]> update auth.users set user_passwd=password('') where user_name='li';

在如,修改连接mysql root的连接密码

MariaDB [auth]> update  mysql.user set password=password('123456') where user='root';

MariaDB [auth]> flush privileges;                            #刷新权限

因为这个改密码和上面的定义结构不一样,所以是password不是user_passwd
image

删除数据记录

delete from 表名 where  条件表达式

MariaDB [(none)]> delete from auth.users where user_name='li';         #删除用户

在如,删除默认用户表user里的用户名密码都为空的记录

MariaDB [(none)]> select user,host,password from mysql.user where user='';

MariaDB [(none)]> delete from auth.users where user='';        

授予权限

gant  权限列表 on 库名.表名  to 用户名@来源地址 [  identified by  ‘密码’]

权限列表 : select insert uptate   使用all表示所有权

库名.表名:指定授权的库和表的名称,使用通配符’*‘

用户名@来源地址:指定谁能连接,能从哪里连接

identified by: 用于设置用户连接数据库时所使用的密码字符串,在新建用户时,若省略’identified by‘部分,则用户的密码将为空

授权给root所有权限,包括远程权限

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'qwer1234' WITH GRANT OPTION;;

mysql> FLUSH PRIVILEGES;

创建用户并授权,这个不用刷新

MariaDB [(none)]> grant select on auth.* to 'xiaoqi'@'localhost' identified  by '123456';


创建数据库,创建连接用户,授权

MariaDB [(none)]> create database bdqn;

MariaDB [(none)]> grant all on bdqn.* to 'dbuser'@'192.168.4.19' identified by 'qwe123';


查看权限

show grants for 用户名@来源地址

MariaDB [(none)]> show grants for 'dbuser'@'192.168.4.19';      #查看dbuser用户从地址访问数据库时的授权信息


撤销权限

revoke  权限列表 on 数据库名.表名  from 用户名@来源地址

MariaDB [(none)]> revoke  all on auth.* from 'xiaoqi'@'localhost';

MariaDB [(none)]> show grants for 'xiaoqi'@'localhost'


 

备份

[root@c1 ~]# mysqldump -u root -p auth  users > auth-users.sql       #备份auth库的users 表
[root@c1 ~]# mysql -uroot -p123456  auth <auth-users.sql               #还原表到auth库中

[root@c1 ~]# mysqldump -uroot -p123456 --database auth >auth.sql   #备份auth库

[root@c1 ~]# mysql -uroot -p123456  < auth.sql                             #还原单个库

[root@c1 ~]# mysqldump -uroot -p123456 --opt --all-databases >all-data.sql         #备份所有库

[root@c1 ~]# mysql -uroot -p123456 < ~/all-data.sql                     #还原全部库
注:若备份文件中已经包括完整的库信息,则执行导入操作时无需指定库名

MariaDB [test]> source /root/all-data.sql;                                   #也可以用source还原数据

drop  table auth.user;                                              #删除数据表

drop  database  auth;                                               #删除数据库

MariaDB [(none)]> show master logs;                      #查看二进制日志文件

管理表中的数据记录

insert into 表名                                                          #插入数据记录

select  * from auth.users                                         #查询users表中的所有数据记录

update  auth.users set…………                                  #修改数据记录

delete from 表名  条件表达式                                       #删除数据记录

grant                                                                         #授权

show  grant for 用户名@来源地址                                #查看授权

revoke                                                                       #撤销权限

mysqldump  -u root –p mysql user  > mysql-user.sql   #备份库中的表

mysql –u root –p  --databasa  auth   >auth.sql            #备份库

mysql –u root –p –-opt –all-databases > all-data.sql    #备份所有的库

mysql –u root –p test < mysql-user.sql                         #恢复表到库中

mysql –u root –p < ~/all-data.sql                                  #导入备份的所有库

若备份文件中已经包含完整的库信息,则执行导入操作时无需指定库名

mysql> update user set user_name='lili'  where id in(5,6,7);    #修改567列的用户名为lili

mysql> update user set password='123456' where  id in(2,5,6,7);

mysql> update user set email='lili@163.com'  where id  in(3,5,6,7);

mysql> update user set  mobile='15800000000' where id between 2 and 7;   #修改类型mobile2-7列值为15800000000

mysql> update user set password='*6BB4837EB74329105EE4568DDA7DC67',email='peng@163.com' where id=4;          #更改ID4的密码和email

mysql> update user set fee='11' where fee=0.00;           #把fee为0.00都改改成11

 

mysql> select user,host  from user;

mysql> delete from user where host='::1'

mysql> flush privileges;

mysql> update user set host='10.0.0.123' where user='root';

mysql> flush privileges;

一, 创建用户:
命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';

二,授权:
命令:GRANT privileges ON databasename.tablename TO 'username'@'host'

注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

三.设置与更改用户密码

命令:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword");
例子: SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");

五.删除用户

命令: DROP USER 'username'@'host';

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DQL查询

以下练习操作在centos6.8:

show grants for 'root'@'192.168.4.19'G;

过滤重复的值

mysql> select distinct password from user;

image

把字段连接起来

mysql> select concat(user_name,email) from user;

image

把字段连接起并重命名

mysql> select concat(user_name,email) as user_name_email from user;

image

分隔符

mysql> select concat(‘==’user_name,email) as user_name_email from user;

查询字段并重命名查看

mysql> select user_name as name,email as em from user;

image

模糊查询数据流大不用)

select user_name from user where user_name like '%n%';  

image

排序

image

mysql> select count(*) from user;                  #共多少条记录  数据大不用

image

mysql> select sum(age) as sum_age from user;    # 字段总和     #应用场景销量

mysql> select avg(fee) as sum_age from user;    #字段平均数,字段就是列

mysql> select  max(age) from user;                       #列的最大值

mysql> select  min(age) from user;                  #列的最小值

image

mysql> alter table user add sex tinyint unsigned not null default 0 comment'0男1女' after email;#添加列

image

mysql> update user set sex=1 where id in (2,3);

分组

按性别分组

mysql> select count(*) from user group by sex;

image

命名总人数

image

mysql> select sex from user group by sex having count(*)>2;   #把总人数大于2的列出来 0是男 1是女

也可以这样查

mysql> select count(*) from user where sex=0;

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

SELECT u.`user_id`,u.`user_name`, u.`user_rank`, ap.`id`,ap.`authority_zone`, ap.`apply_class`, ap.`apply_type`, ap.`apply_time` FROM dsc_users u LEFT JOIN dsc_user_apply ap ON ap.`user_id` = u.`user_id` WHERE u.`user_name`IN ( '彭忠涛');

 image

SELECT * FROM dsc_region_grant r WHERE r.`user_id` IN( 13364 );

image

SELECT * FROM dsc_region r WHERE r.`parent_id` = 38854;

image

image

image

image

pid  cid rid tid

image

生产练习-查询数据记录

SHOW TABLE STATUS                                                    #查看表注释

SHOW FULL COLUMNS FROM dsc_suning_address      #查看字段注释

SHOW FULL FIELDS FROM  dsc_suning_address         #查看字段注释

SHOW FULL FIELDS FROM  dsc_order_info

image

image

image

order         #订单

SHOW FULL COLUMNS FROM dsc_user_commision

image

SHOW FULL COLUMNS FROM dsc_user_profits

image

 

profilts                   #收益

DESCRIBE dsc_users                                       #用户表   (所有字段)

SHOW FULL FIELDS FROM  dsc_users        

image

image

user_rank                #用户等级

SHOW FULL COLUMNS FROM dsc_user_apply

 image

apply_type        #申请类型 1大客户 2服务商 3运营商

apply_type         #类别  0未区分 1A类服务商 2B类服务商   9大客户

apply_time          #申请时间

DESCRIBE dsc_region                              #地区表

SHOW FULL FIELDS FROM dsc_region

image

表内容

image

DESCRIBE dsc_region_grant        #地区授权表

SHOW FULL FIELDS FROM  dsc_region_grant

image

表内容

image

dsc_suning_address                                       #苏宁地址表

DESCRIBE dsc_suning_address

SHOW FULL FIELDS FROM  dsc_suning_address

image

SELECT * FROM  dsc_suning_address  WHERE   pid=190

pid  # 父编码

second_pid   #二级父编码                 比如说我要找番禺区下的所有的镇:

1.找出二级父编码,对镇来说区是一级父编码,市就是二级父编码,先找出市的编码,找市的编码先找省的

SELECT * FROM dsc_suning_address WHERE pid=0                    #找出广东省编码是190

SELECT * FROM dsc_suning_address WHERE pid=“190”                #找出市是020

SELECT * FROM dsc_suning_address WHERE pid="020"           #找出区是07,因为区在全国地址库中有可能会重复,所以不能像上面那样直接使用07找出区下面的所有镇,要结合上面两个条件

2.SELECT * FROM dsc_suning_address WHERE  second_pid=020  AND pid=07          #番禺区下面所有的镇

image

select 列名1,列名2,…… from 表名  where  条件表达式

SELECT * FROM  dsc_suning_address  WHERE   pid=190          #广东所有城市

PID字段      #父

OR(或) 和 AND(且) 连接语句

SELECT * FROM  dsc_suning_address  WHERE   pid=08 AND NAME="申港镇"

image

-- 1 查询当前授权区域

SELECT u.`user_id`,u.`user_name`, u.`user_rank`, ap.`id`,ap.`authority_zone`, ap.`apply_class`, ap.`apply_type`, ap.`apply_time` FROM dsc_users u LEFT JOIN dsc_user_apply ap ON ap.`user_id` = u.`user_id`
WHERE u.`user_name`IN ( '18992619159');

image

 

-- 2 修改授权区域
SELECT * FROM dsc_region_grant r WHERE r.`user_id` IN( 3803 );  -- 用户ID

 image

3.--  查询地区及ID

SELECT * FROM dsc_region r WHERE r.`parent_id` = 16570;  -- 区域id

image

-- 3 处理界外订单(佣金)( 变量:user_id, street), 修改 grant_status 为 1
SELECT o.order_id, o.`order_sn` ,uc.`id`,uc.`check_status`, uc.`grant_status` FROM dsc_order_info o
LEFT JOIN dsc_user_commision uc ON o.order_id = uc.`order_id`
WHERE o.`user_id` = 3803 AND o.`street` = 16575 AND o.`pay_status` = 2;

image

order_sn                #苏宁订单

grant_status        #授权区域结算状态

LEFT JOIN          #左外联接,结果中的记录在A表中存在,B表中不一定有。相当于a表为主体表,b为辅助表

order_id              #订单编号

street                 #街道

pay_status        #支付状态

-- 3 处理界外订单(收益)  变量:订单号, 修改 grant_status 为 1

SELECT up.`id`, up.`order_sn`, up.`grant_status` FROM dsc_user_profits up WHERE up.`order_sn` IN (
'2018042108432996911');

 

 

SHOW TABLE STATUS                                                    #查看表注释

SHOW FULL FIELDS FROM  dsc_suning_address         #查看字段注释

数学符号条件--WHERE限制条件可以有数学符号 (=,<,>,>=,<=)

例如

SELECT user_id,user_rank FROM  dsc_users WHERE  user_rank>0

模糊查询数据流大不用)

SELECT * FROM  dsc_suning_address  WHERE  NAME LIKE '%沙头%'

SELECT COUNT(*) FROM  dsc_suning_address;                 #表共多少条记录

 

SELECT DISTINCT  user_name,user_rank FROM dsc_users    #完全重复的记录只一次

select user_name,id from user order by  字段;   #升序

select user_name,id from user order by  字段 desc ;  #降序 (场景发布文章)

 

 

表关联语法

select * from a left join b on a.id=b.id ;   #a表关联

SELECT COUNT(*) FROM dsc_users LEFT JOIN dsc_user_apply   ON dsc_users.`user_id` = dsc_user_apply.`user_id`                    #统计表中所有用户

SELECT COUNT(*) FROM dsc_user_apply  WHERE apply_time BETWEEN '2017-04-01 00:00:00' AND '2017-05-01 00:00:00' 

BETWEEN           #在….之间

 

SELECT COUNT(*) FROM dsc_users LEFT JOIN dsc_user_apply   ON  dsc_users.`user_id` = dsc_user_apply.`user_id` WHERE  apply_time BETWEEN '2017-04-01 00:00:00' AND '2017-05-01 00:00:00'

 

 

 

 

其他>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

mysql>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

mysqladmin -u root password 'qwer1234'              #为root用户设置密码,不然无法登录msyql

information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。

什么是元数据呢?元数据是关于数据的数据,属性等信息,如表名等

mysqldump -uroot -p --default-character-set=utf8  db >1.sql  备份数据库

show tables ; 查看当前库下有哪些表

status 查看mysql数据库的运行状态

desc  table_name; 查看表结构

show full  processlist;  #查询数据库连接

show status like '%Threads_connected%';#当前连接数

show status like '%qcache%'; #查询缓存情况

show status like 'Aborted_clients';  #由于客户没有正确关闭连接已经死掉,已经放弃的连接数量

show variables like '%max_connections%';//查看最大连接数量

show variables like '%timeout%';#查看超时时间

show variables like 'log_%'; #查看日志是否启动

show variables like '%quer%'; log_slow_queries状态为OFF, 说明没有开启慢查询

开启慢查询修改mysqld服务配置文件/etc/my.cnf

log-slow-queries = /var/lib/mysql/mysql-slow.log        #慢查询日志放置目录,必须有写入权限,此项配置放放置[mysqld]下

long_query_time = 2                                     #最长执行时间,此项配置放放置[mysqld]下

重启mysqld服务

select * from 表名 查表所有数据

show variables like 'storage_engine';          查看mysql支持的存储引擎

mysql忘记密码修改mysqld服务配置文件/etc/my.cnf的[mysqld]下添加skip-grant

mysql                 #不用输密码直接登录

use mysql;

update user set password=password('qwer1234') where  user='root';

flush privileges; 

最后修改/etc/my.cnf 去掉 skip-grant , 重启mysql服务

当我们第一次使用mysql命令的时候我们提示命令不存在的时候,我们加入path就行了

在配置文件中 /etc/profile 中

PATH=$PATH:/usr/local/mysql/bin

然后别忘记

source /etc/profile

或者写全路径   /usr/local/mysql/bin/mysql -uroot

查看表的字段 desc tb;

当前是哪个用户  select user();

当前库 select database();

查看数据库版本 select version();

mysql操作记录>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#查看表数据

SELECT  * FROM   sys_module_version;

原文地址:https://www.cnblogs.com/pengrj/p/8777228.html