# 常用指令
select version();
# 查看mysql的版本
show databases;
# 显示当前所有的数据库
use database_name;
# 选择使用的数据库名字
create database database_name charset utf8;
# 创建数据库
```bash
# 对于数据表的操作(对数据表的操作使用alter)
show tables;
# 显示当前数据库中所有的数据表
create table table_name(
id int unsigned auto_increment primary key not null,
name varchar(50)
);
# 创建一个数据表,int unsigned无符号整型,auto_increment:自动增长
# primary key:主键, not null:不为空
# 创建表的时候,需要定义数据表的字段名,以及属性(varchar(50))
# 注意(name varchar(50),后面没有逗号)
desc table_name;
# 查看使用的数据库所选择的数据表的字段
alter table table_name add 字段名 字段属性(int/varchar(n));
# 给相应的数据表添加字段
alter table table_name change 字段名(原名) 字段名(新名) 字段类型 约束(not null);
# 对数据表进行字段修改(同时名字也修改)
alter table table_name modigy 字段名 类型 约束;
# 对数据表进行字段的修改(不修改字段名)
alrer table table_name drop 字段名;
# 删除数据表中的某个字段
drop table table_name;
# 删除数据表
# 对数据表中的数据进行操作
insert into table_name values(id,'name','gender',score...),(id,'name','gender',score)....;
# 这样是对照表的字段名,进行数据填充,必须所有的字段名都有
insert into table_name(name) values('name'),('name')...;
# 这里是这填充相应字段的数据
update table_name set 字段名=值 where id = n;
# 对数据进行修改,where进行限定
delete table_name where id = n;
# 对数据进行删除
# 对数据进行查询
select * from table_name;
# 查询表中的所有数据
select name,gender,... from table_name;
# 从数据表中查询对应的数据
select * from table_name where id in (3,5,6);
# 查询表中id=3,id=5,id=6的数据
select * from table_name where id between 3 and 5;
# 查询数据表中连续的3到5的数据
select * from table_name where id > 5;
# 查询数据表中id>5的数据
select * from table_name where id >5 and gender ="男";
# 可以使用and来进行俩个条件同时限制的查询
# 优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
# and比or先运算,如果同时出现并希望先算or,需要结合()使用
select * form table_name order by score (asc/desc);
# 将查询的结果集进行排序,默认是asc(升序),然后是desc(降序)
select * from talbe_name limit 0,count;
# 进行查询结果的分页操作
# 0是从第几条开始,默认是0
# count是每页有几条数据
# 聚合函数使用的查询
select max(score) from people where gender = '男';
# 选择男生里最高的成绩
select num(score) from people where gender='男';
# 查询男生的总成绩
select avg(score) from people where gender='男';
select sum(score)/count(*) from people where gender='男';
# 查询男生的平均成绩
select gender from people group by gender;
# 根据性别进行分组,并查看分组结果
# 分组查询的用法
select gender, group_concat(id) from people group by gender;
# 根据性别进行分组,并且查询对应组的id
# select gender,count(*) from people group by gender;
# 根据性别进行分组,并且根据查询出每组对应的人数
select gender,group_concat(name) from people group by gender having id>2;
# 这里的having是和where的效果一样的,但是只适用于group by
select gender,count(*) from students group by gender with rollup;
# 这里的with rollup是专门在最后新增一行,来记录当前表中该字段对应的操作结果
# 连接查询的规则
select * from 表1 inner/left/right join 表2 on 表1.列 运算符 表2.列
select * from people inner join book on people.book_id = book.id
# 内连接就是查询表和表之间满足连接条件的数据
# 数据库的左右内连接查询
mysql> select * from book;
+----+----------------+--------+-------------+
| id | name | author | create_time |
+----+----------------+--------+-------------+
| 1 | <三国演义> | 1985 | 李四 |
| 2 | <西游记> | 1888 | 张三 |
| 3 | <红楼梦> | 1898 | 王五 |
| 4 | <西游记> | 1888 | 张三 |
+----+----------------+--------+-------------+
4 rows in set (0.00 sec)
mysql> select * from people;
+----+--------+--------+-------+-------+---------+
| id | name | gender | class | score | book_id |
+----+--------+--------+-------+-------+---------+
| 1 | 张三 | 男 | a | NULL | 3 |
| 2 | 李四 | 男 | b | NULL | 3 |
| 3 | 王六 | 女 | c | NULL | 3 |
| 4 | 周七 | 女 | d | NULL | 1 |
+----+--------+--------+-------+-------+---------+
4 rows in set (0.00 sec)
mysql> select * from people inner join book on people.book_id = book.id;
+----+--------+--------+-------+-------+---------+----+----------------+--------+-------------+
| id | name | gender | class | score | book_id | id | name | author | create_time |
+----+--------+--------+-------+-------+---------+----+----------------+--------+-------------+
| 4 | 周七 | 女 | d | NULL | 1 | 1 | <三国演义> | 1985 | 李四 |
| 1 | 张三 | 男 | a | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
| 2 | 李四 | 男 | b | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
| 3 | 王六 | 女 | c | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
+----+--------+--------+-------+-------+---------+----+----------------+--------+-------------+
4 rows in set (0.00 sec)
mysql> select * from people left join book on people.book_id =book.id;
+----+--------+--------+-------+-------+---------+------+----------------+--------+-------------+
| id | name | gender | class | score | book_id | id | name | author | create_time |
+----+--------+--------+-------+-------+---------+------+----------------+--------+-------------+
| 4 | 周七 | 女 | d | NULL | 1 | 1 | <三国演义> | 1985 | 李四 |
| 1 | 张三 | 男 | a | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
| 2 | 李四 | 男 | b | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
| 3 | 王六 | 女 | c | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
+----+--------+--------+-------+-------+---------+------+----------------+--------+-------------+
4 rows in set (0.00 sec)
mysql> select * from people right join book on people.book_id =book.id;
+------+--------+--------+-------+-------+---------+----+----------------+--------+-------------+
| id | name | gender | class | score | book_id | id | name | author | create_time |
+------+--------+--------+-------+-------+---------+----+----------------+--------+-------------+
| 1 | 张三 | 男 | a | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
| 2 | 李四 | 男 | b | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
| 3 | 王六 | 女 | c | NULL | 3 | 3 | <红楼梦> | 1898 | 王五 |
| 4 | 周七 | 女 | d | NULL | 1 | 1 | <三国演义> | 1985 | 李四 |
| NULL | NULL | NULL | NULL | NULL | NULL | 2 | <西游记> | 1888 | 张三 |
| NULL | NULL | NULL | NULL | NULL | NULL | 4 | <西游记> | 1888 | 张三 |
+------+--------+--------+-------+-------+---------+----+----------------+--------+-------------+
6 rows in set (0.00 sec)
#登录MySQL,使用命令
mysql -u root -p或mysql -u root -ppassword【ps:-ppassword后面的密码是你的root密码】
#修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#更新用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
#刷新权限
FLUSH PRIVILEGES;
#重置密码
alter user 'root'@'localhost' identified by '你的密码';
/usr/local/mysql/bin/mysql -uroot 进入mysql命令
建议:更改环境变量PATH,增加mysql的绝对路径 (export PATH=/usr/local/mysql/bin)
mysqladmin -uroot password’123456’ 给root用户增加密码
密码更改操作:mysqladmin -uroot p’123456’ password’13456’
密码重置
vi /etc/my.conf mysqld增加一行skip-grant 意思忽略授权
之后重启mysql /etc/init.d/mysql restart
进入mysql 打开mysql库 use mysql
update user set password =password(‘123456’) where user =‘root’; 设置root的新密码为123456
修改后将skip-grant 删掉 重启mysql
4.常用连接mysql的命令
mysql -uroot -p12345
mysql -uroot -p12345 -h127.0.0.1 -p3306 远程连接
mysql -uroot -p12345 -S/tmp/mysql.sock sock连接
mysql -uroot -p12345 -e “show databases” 直接使用命令一般用于shell脚本
5.查询库 show databases;
6.切换库 use mysql;
7.查看库里的表 show tables;
8.查看表里的字段 desc tb_name;
9.查看建表时的语句 show create table tb_name\G; G是竖排显示,不加会乱
10.查看当前用户 select user ();
11.查看当前使用的数据库 select database();
创建库 create database db1 ;
13.创建表 use db1 ; create table t1(‘id’ int(4),‘name/ char(40)) ;
14.查看当前数据库版本 select version() ;
15.查看数据库状态 show status ;
查看各参数 show variables ; show variables like ‘max_connect%’ ;
17.查看队列 show processlist ; show full processlist ;
18.mysql创建用户以及授权 grant 授权,允许 identified 认定为 %通配符
grant all on . to ‘user1’ @‘127.0.0.1’ identified by ‘passwd’ ; 授权user1用户来源于127.0.0.1
grant SELECT,UPDATE,INSERT on db1. to ‘user2’ @‘192.168.133.1’ identified by ‘passwd’ ;
grant all on db1 , to ‘user3’@’%’ identified by ‘passwd’ ;
show grants ;
show grants for user2@192.168.133.1 ; 用来查看指定用户的授权情况
grant完之后,还要执行 flush privileges;
例:怎么查询mysql当前有多少个用户呢?
use mysql;
select user,host from user;
19 。常用sql 语句
myusam 引擎查找很快,会统计行数 InnoDB 查找很慢,不会自动统计行数占资源
select 选择 insert 插入 update 修改 drop 删除 truncate table 清空表(不删除) desc 查看
set是修改系统参数或者设置变量用的
seletc count () from mysql.user ; count ()查找整个表的行顺 库和表中间有个点
select from mysql.db ; 查看所有内容 查看myql库下db表所有内容 可加\G
select db from mysql.db ; 查看单个字段
select db ,user from mysql.db ; 查看多个字段
select * from mysql.db where host like ‘192.168.%’ ; 模糊查询 查看mysql下db的192.168开头字段
insert info db1.t1 vlaues (1,‘abc’) ;
update db1.ti set name =‘aaa’ where id =1 ;
truncate table db1.t1 ; 清空db1库下的ti表
drop table db1.t1 ; 删除db1库下的ti表
drop database db1 ; 删除db1库
Mysql 数据库的备份与恢复 备份时先库后表 此适用于小型数据库
备份库 mysqldump -uroot -p12345 mysql >/tmp/mysqlbak.sql 备份mysql库到/tmp/mysqbakl.sql
恢复库 mysql -uroot -p12345 mysql </tmp/mysqlbak.sql
备份表 mysqldump -uroot -p12345 mysql user >/tmp/user.sql
恢复表 mysql -uroot -p12345 mysql </tmp/user.sql 只需库名
备份所有库 mysqldump -uroot -p -A >/tmp/123.sql -A相当于所有
只备份表结构 mysqldump -uroot -p12345 -d mysql >/tmp/mysql.sql
一些最重要的 SQL 命令
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引