MySQL基础总结
Posted fztomaster
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础总结相关的知识,希望对你有一定的参考价值。
SQL功能划分
- DDL:数据定义语言,用来操作database、table、column等,比如:
create
、alter
、drop
- DML:数据操作语言,关键字:
insert
、update
、delete
- DQL:数据查询语言,
select
(面试和工作都是最重要的) - DCL:数据库控制语言,管理数据库用户,权限等,关键字:
revoke
、grant
mysql服务管理
- 启动
net start mysql
- 关闭
net stop mysql
- 登录
mysql -u username -p password [-hMySQL的ip地址 -PMySQL的端口]
操作数据库
- 创建数据库
create database databaseName;
- 查看数据库
show database;
-- 查看创建数据库的详细信息
show create database databaseName;
- 切换数据库
use database;
-- 查看在哪个数据库里
select database();
- 删除数据库
drop database databaseName;
MySQL常用数据类型
MySQL | 说明 | 对应Java数据类型 |
---|---|---|
int | 整型 | int/Integer |
varchar | 可变长度的字符串 | String |
date | 日期类型 | java.sql.Date |
datetime | 日期时间类型,yyyy-MM-dd HH:mm:ss,范围1000-9999 | java.sql.Timestamp, java.sql.Date |
timestamp | 时间戳类型,yyyy-MM-dd HH:mm:ss ,范围:1970-2038 | java.sql.Timestamp |
decimal | 小数类型,常用金钱 | java.math.BigDecimal |
DCL-table
DCL
:数据库控制语言,管理数据库用户、权限等
- 创建用户
create user 'userName' @ 'hostName' identified by 'password'
- 修改用户密码
set password for 'userName' @ 'hostName' = password('newPwd')
- 删除用户
drop user 'userName' @ 'hostName'
- 增加权限
grant [select|update|delete|alter|drop...], ... on databaseName.tableName to 'userName' @ 'hostName'
- 查看权限
show grants for 'userName' @ 'hostName'
- 取消授权
revoke [select|update|delete|alter|drop...], ... on databaseName.tableName from 'userName' @ 'host Name';
DDL-table
- 创建表
create table tableName (
fieldName fieldType [constraint],
...
fieldName fieldType [constraint]
);
-- 创建表结构相同的新表
create table newTable like oldTable;
- 查看表
-- 查看所有表
show tables;
-- 查看表的结构
desc tableName;
-- 查看表创建信息
show create table tableName;
- 删除表
drop table tableName;
drop table if exists tableName
- 修改表
-- 重命名表
rename table oldTable to newTable;
-- 添加字段
alter table tableName add fieldName fieldType [constraint]
-- 修改字段名称
alter table tableName change fieldName newFieldName newFieldType [constraint]
-- 修改字段类型
alter table tableName modify fieldName fieldType [constraint]
-- 删除字段
alter table tableName drop fieldName
DML-table
- 增
insert into tableName(fieldName1, fieldName2, ...) values (fieldValue1, fieldValue2, ...)
-- 对应表的所有字段,且值的顺序必须和字段顺序保持一致
insert into tableName values (fieldValue1, fieldValue2, ...)
- 删
-- 一条一条删,效率低
delete from tableName [where condition]
-- 一次性删除,效率高,但是不能加where条件
truncate tableName
- 改
update tableName set fieldName1=fieldValue1, fieldName2=fieldValue2, ... [where condition]
DQL-table(重点)
- 基本查询
-- 查询全部
select * from tableName;
-- 查询指定列
select field1, field2, ... from tableName;
-- 查询并运算
select field1 + value1, field2 - value2, ... from tableName;
-- 查询运算做空值处理
select ifnull(field, 为空的值) + value1, ... from tableName;
-- 查询并起别名
select field1 alias1, field2 as alias2, ... from tableName;
-- 查询并去重
select distinct field1, field2, ... from tableName;
- 条件查询
select * from tableName where condition
-- 比较: >, >=, <, <=, !=, <>
-- 范围:包含头和尾
field between head and tail
-- 集合
field in (value1, value2, ...)
-- 模糊查询:%表示任意个字符,_表示一个任意字符
field like '%queryValue%'
field like concat('%', 'queryValue', '%')
- 排序
-- 语法
order by sortField1 sortRule1, sortField2 sortRule2, ...
-- 规则:ASC-升序(默认),DESC-降序
- 聚合函数
select 聚合函数 from tableName [where condition]
-- 统计个数
count(*)
-- 求和
sum(field)
-- 平均值
avg(field)
-- 最大值
max(field)
-- 最小值
min(field)
注意:聚合函数会忽略null值
- 分组
select 分组字段, 聚合函数1, 聚合函数2, ... from tableName [where condition order by 排序字段] group by 分组字段
-- 分组之后进行过滤
select 分组字段, 聚合函数1, 聚合函数2, ... from tableName [where condition order by 排序字段] group by 分组字段 having count(*) > 6
说明:
- 分组查询中,select子句中只有
分组字段
和聚合函数
- where是对表字段进行过滤,having是对分组后数据(结果列)进行过滤,where执行时间先于having执行时间
- 分页
limit index, size
分页通常位于sql语句的最后
- 查询总结
select * | field, distinct field2, ... from [tableName inner|left[outer]|right[outer] join] tableName [on condition] where condition group by groupField having groupFilter union [all|distinct] order by sortField sortRule limit index, size;
-- 执行顺序
from --> on --> join --> where --> group by --> having --> select --> distinct --> union --> order by --> limit
多表查询
- 内连接
select * from table1, table2 where relationCondition;
select * from table1 inner join table2 on relationCondition;
- 外连接
-- 左外连接:显示左表全部数据
select * from leftTable left[outer] rightTable on relationCondition;
-- 右外连接:显示右表全部数据
select * from leftTable right[outer] rightTalbe on relationCondition;
- 子查询
-- 单行单列-查询结果为一个值
select * from table where name=(select name from anotherTalbe where id='1');
-- 多行单列-查询结果是一个集合
select * from table where id in (select id from anotherTable where name like '%queryValue%');
-- 多行多列-查询结果是一张虚拟表
select * from table1, (select * from anotherTable) table2 where table1.id = table2.id;
以上是关于MySQL基础总结的主要内容,如果未能解决你的问题,请参考以下文章