一、客户端命令

1.1 mysql接口自带的命令

  1. \h help 或? 查看帮助
  2. \G 格式化查看数据(keyvalue
  3. \T tee 记录日志
  4. \c5.7可以ctrl+c 结束命令
  5. \s status 查看状态信息
  6. \. source 导入SQL数据
  7. \u use 使用数据库
  8. \q exit quit 退出

help命令的使用

  1. mysql> help status
  2. mysql> help show

source命令的使用

  1. #在MySQL中处理输入文件:
  2. #如果这些文件包含SQL语句则称为:
  3. #1.脚本文件
  4. #2.批处理文件
  5. mysql> SOURCE /data/mysql/world.sql
  6. #或者使用非交互式
  7. mysql</data/mysql/world.sql

1.2 mysqladmin命令的使用

  1. #查看MySQL存活状态
  2. [root@db01 ~]# mysqladmin -uroot -p123 ping
  3. #查看MySQL状态信息
  4. [root@db01 ~]# mysqladmin -uroot -p123 status
  5. #关闭MySQL进程
  6. [root@db01 ~]# mysqladmin -uroot -p123 shutdown
  7. #查看MySQL参数
  8. [root@db01 ~]# mysqladmin -uroot -p123 variables
  9. #删除数据库
  10. [root@db01 ~]# mysqladmin -uroot -p123 drop wyf
  11. #创建数据库
  12. [root@db01 ~]# mysqladmin -uroot -p123 create wyf
  13. #刷新日志
  14. [root@db01 ~]# mysqladmin -uroot -p123 flush-log
  15. #刷新缓存主机,重载授权表
  16. [root@db01 ~]# mysqladmin -uroot -p123 reload
  17. #修改口令
  18. [root@db01 ~]# mysqladmin -uroot -p123 password

二、SQL语句

2.1 SQL介绍

  1. 结构化查询语言
  2. 5.7 以后符合SQL92严格模式
  3. 通过sql_mode参数来控制

2.2 常用SQL分类

  1. DDL:数据定义语言
  2. DCL:数据控制语言
  3. DML:数据操作语言
  4. DQL:数据的查询语言

2.3 DDL:数据定义语言

2.3.1 库对象

库名字、库属性

创建库:create database
  1. #创建oldboy数据库
  2. mysql> create database oldboy;
  3. #查看数据库
  4. mysql> show databases;
  5. #查看oldboy的创建语句(DQL)
  6. mysql> show create database oldboy;
  7. #查看创建数据库语句帮助
  8. mysql> help create database
  9. #创建oldboy数据库添加属性
  10. mysql> create database testa charset utf8;

查看有那些库 show databases
  1. mysql> show databases;

删库:drop database
  1. #删除oldboy数据库
  2. mysql> drop database oldboy;

修改定义库:alter database
  1. #修改oldboy数据库属性
  2. mysql> alter database oldboy charset utf8;
  3. #查看oldboy的创建语句(DQL)
  4. mysql> show create database oldboy;

查询所在库
  1. #查询当前所在库select database (DQL)
  2. mysql>select database();

2.3.2 表对象

列名、列属性、约束

数据类型&数据属性

数据类型
int: 整数 -231 ~ 231 -1
varchar:字符类型 (变长)
char: 字符类型 (定长)
tinyint: 整数 -128 ~ 128
enum: 枚举类型
datetime: 时间类型 年月日时分秒

数据属性
not null: 非空
primary key: 主键(唯一且非空的)
auto_increment: 自增(此列必须是:primary key或者unique key)
unique key: 单独的唯一的
default: 默认值
unsigned: 非负数
comment: 注释

创建表:create table
  1. #查看创建表语句帮助
  2. mysql> help create table
  3. #创建表
  4. mysql> create table student(
  5. sid INT,
  6. sname VARCHAR(20),
  7. sage TINYINT,
  8. sgender ENUM('m','f'),
  9. cometime DATETIME);
  1. ##创建表加其他属性##
  2. mysql> create table student(
  3. sid INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘学号’,
  4. sname VARCHAR(20) NOT NULL COMMENT ‘学生姓名’,
  5. sage TINYINT UNSIGNED COMMENT ‘学生年龄’,
  6. sgender ENUM('m','f') NOT NULL DEFAULT m COMMENT ‘学生性别’,
  7. cometime DATETIME NOT NULL COMMENT ‘入学时间’)chatset utf8 engine innodb;
  8. ##查看建表语句##
  9. mysql> show create table student;
  10. ##查看表##
  11. mysql> show tables;
  12. ##查看表中列的定义信息##
  13. mysql> desc student;

查看表中列的定义信息 desc
  1. mysql> desc student;

删除表 drop table
  1. #删除表
  2. mysql> drop table student;

修改表定义:alter table
  1. #修改表名
  2. mysql> alter table student rename stu;
  3. #添加列和列定义
  4. mysql> alter table stu add age int;
  5. #添加多个列
  6. mysql> alter table stu add test varchar(20),add qq int;
  7. #指定位置进行添加列(表首)
  8. mysql> alter table stu add classid varchar(20) first;
  9. #指定位置进行添加列(指定列)
  10. mysql> alter table stu add phone int after age;
  11. #删除指定的列及定义
  12. mysql> alter table stu drop qq;
  13. #修改列及定义(列属性)
  14. mysql> alter table stu modify sid varchar(20);
  15. #修改列及定义(列名及属性)
  16. mysql> alter table stu change phone telphone char(20);

2.4 DCL:数据控制语言

针对权限进行控制

授权 grant
  1. #授权root@10.0.0.51用户所有权限(非超级管理员)
  2. mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123';
  3. #怎么去授权一个超级管理员呢?
  4. mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123' with grant option;
  5. #其他参数(扩展)
  6. max_queries_per_hour:一个用户每小时可发出的查询数量
  7. max_updates_per_hour:一个用户每小时可发出的更新数量
  8. max_connections_per_hour:一个用户每小时可连接到服务器的次数
  9. max_user_connections:允许同时连接数量

回收权限 revoke
  1. #查看权限
  2. mysql> show grants for root@'10.0.0.51';
  3. #收回select权限
  4. mysql> revoke select on *.* from root@'10.0.0.51';

2.4 DML:数据操作语言

插入表数据 insert
  1. #基础用法,插入数据
  2. mysql> insert into stu values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456);
  3. #规范用法,插入数据
  4. mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456);
  5. #插入多条数据
  6. mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456),
  7. ('linux02',2,NOW(),'zhangsi',21,'f',NOW(),111,1234567);

修改表数据 update
  1. #不规范
  2. mysql> update student set sgender='f';
  3. #规范update修改
  4. mysql> update student set sgender='f' where sid=1;
  5. #如果非要全表修改
  6. mysql> update student set sgender='f' where 1=1;

删除表数据 delete
  1. #不规范
  2. mysql> delete from student;
  3. #规范删除(危险)
  4. mysql> delete from student where sid=3;
  5. #DDL删除表
  6. mysql> truncate table student;

伪删除 update

使用update代替delete

1)额外添加一个状态列

  1. mysql> alter table student add status enum(1,0) default 1;

2)使用update

  1. mysql> update student set status='0' where sid=1;

3)应用查询存在的数据

  1. mysql> select * from student where status=1;

2.5 DQL:数据查询语言

基础查询 select
  1. #常用用法
  2. mysql> select countrycode,district from city;
  3. #查询单列
  4. mysql> select countrycode from city;
  5. #行级查询
  6. mysql>
  7. select countrycode,district from city limit 2;
  8. mysql> select id,countrycode,district from city limit 2,2;
  9. #条件查询
  10. mysql> select name,population from city where countrycode='CHN';
  11. #多条件查询
  12. mysql> select name,population from city where countrycode='CHN' and district='heilongjiang';
  13. #模糊查询
  14. mysql> select name,population,countrycode from city where countrycode like '%H%' limit 10;
  15. #排序查询(顺序)
  16. mysql> select id,name,population,countrycode from city order by countrycode limit 10;
  17. #排序查询(倒叙)
  18. mysql> select id,name,population,countrycode from city order by countrycode desc limit 10;
  19. #范围查询(>,<,>=,<=,<>)
  20. mysql> select * from city where population>=1410000;
  21. #范围查询OR语句
  22. mysql> select * from city where countrycode='CHN' or countrycode='USA';
  23. #范围查询IN语句
  24. mysql> select * from city where countrycode in ('CHN','USA');

高级用法 select

例:根据两张表的内容查出张三的成绩

  1. select t1.sname,t2.mark from t1,t2 where t1.sid=t2.sid and t1.sname=’zhang3’;

1.1传统连接(只能内连接,只能取交集)

  1. #世界上小于100人的人口城市是哪个国家的?
  2. select city.name,city.countrycode,country.name
  3. from city,country
  4. where city.countrycode=country.code
  5. and city.population<100;

1.2 NATURAL JOIN(自连接的表要有共同的列名字)

  1. SELECT city.name,city.countrycode ,countrylanguage.language ,city.population
  2. FROM city NATURAL JOIN countrylanguage
  3. WHERE population > 1000000
  4. ORDER BY population;

1.3企业中多表连接查询(内连接)

  1. select city.name,city.countrycode,country.name
  2. from city join country on city.countrycode=country.code
  3. where city.population<100;

建议:使用join语句时,小表在前,大表在后。

1.4外连接

  1. select city.name,city.countrycode,country.name
  2. from city left join country
  3. on city.countrycode=country.code
  4. and city.population<100;

1.5 UNION(合并查询)

  1. #范围查询OR语句
  2. mysql> select * from city where countrycode='CHN' or countrycode='USA';
  3. #范围查询IN语句
  4. mysql> select * from city where countrycode in ('CHN','USA');
  5. 替换为:
  6. mysql> select * from city where countrycode='CHN'
  7. union all
  8. select * from city where countrycode='USA' limit 10

union:去重复合并
union all :不去重复
使用情况:union<union all