MySQL数据库基础操作
SQL分类:
- DQL:数据查询语言
- 代表关键字:
select
- 代表关键字:
- DML:数据操纵语言
- 代表关键字:
insert
,delete
,update
- 代表关键字:
- DDL:数据定义语言
- 代表关键字:
create
,drop
,alert
- 代表关键字:
- DCL:数据控制语言
- 代表关键字:
grant
,revoke
- 代表关键字:
- TCL:事务控制语言
- 代表关键字:
commit
,rollback
- 代表关键字:
一、常用命令
(一)启动MySQL数据库
net start mysql
G:\MySQL\mysql-5.7.28-winx64\mysql-5.7.28\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
(二)关闭MySQL数据库
net stop mysql
G:\MySQL\mysql-5.7.28-winx64\mysql-5.7.28\bin>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。
(三)登录用户
G:\MySQL\mysql-5.7.28-winx64\mysql-5.7.28\bin>mysql -u root -p
Enter password: **************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
(四)查看数据库
show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.16 sec)
mysql有内置的四个数据库
创建数据库
//语法格式:
create database 数据库名;
//以 英文逗号 ; 结尾
选择数据库并使用
use 数据库名;
终止一条语句:ctrl+c
退出mysql:
- \q
- exit
- quit
二、简单查询
(一)查询一个字段
语法格式:
select 字段名 from 表名;
表:数据库中的一种文件结构
(二)查询多个字段
语法格式:
select 字段名1,字段名2,... from 表名;
(三)查询全部字段
语法格式:
select * from 表名;
(四)查询后的结果重命名
语法格式:
select 字段名 as 新字段名 from 表名;
三、条件查询
条件查询必须用到where
语句,where
语句必须放到from
语句后面
运算符 | 说明 |
---|---|
= | 等号 |
!=或者<> | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between…and… | 两值之间,相当于>=and<= |
is null | 为null(is not null不为null) |
and | 并且 |
or | 或者 |
in | 包含 |
not | 取非 |
like | 模糊查询,支持%或者下划线匹配,%匹配任意个字符,一个下划线只能匹配一个字符 |
四、排序操作
数据排序使用order by
语句
默认升序排序
多个排序字段之间使用逗号隔开
若有where
语句,则order by
语句必须放在where
语句后面
语法格式:
select * from 表名 where .. order by 字段名;
手动指定排序
从小到大:(asc)
select * from 表名 where .. order by 字段名 asc;
从大到小:(desc)
select * from 表名 where .. order by 字段名 desc;
多个字段排序(用逗号隔开)
select * from 表名 where .. order by 字段名1 desc,字段名2 desc..;
五、函数
(一)单行处理函数
函数名 | 说明 | 用法 |
---|---|---|
lower | 转小写 | eg:select lower(字段名) from 表名; |
upper | 转大写 | eg:select upper(字段名) from 表名; |
substr | 取子串 | substr(被截取的字符串,起始下标,截取的长度) |
length | 取长度 | … length(字段名); |
trim | 去首尾空格 | … trim(字段名); |
str_to_date | 将字符串转换成日期(严格标准按照输出) | 1、与数据库格式匹配2、将字符串转换成date类型 |
date_format | 格式化日期 | 按照指定日期格式输出 |
format | 设置千分位 | eg:select format(字段名,数字) from 表名; |
round | 四舍五入 | select round(小数) |
rand() | 生成随机数 | select rand() |
ifnull | 将值为null的转换为一个具体的数 | eg:select ifnull(字段名,指定的数值) from 表名; |
now() | 获取当前时间 |
日期格式说明:
%Y
:代表4位的年份
%y
:代表2位的年份
%m
:代表月,格式(01 … 12)
%c
:代表月,格式(1…12)
%H
:代表小时,格式(00…23)
%h
:代表小时,格式(01…12)
%i
:代表分钟,格式(00…59)
%r
:代表 时间,格式位12小时(hh:mm:ss)
%T
:代表 时间,格式为24小时(hh:mm:ss)
%S
:代表秒,格式(00…59)
%s
:代表秒,格式(00…59)
(二)多行处理函数
函数名 | 说明 | 用法 |
---|---|---|
count | 取得记录数 | eg:select count(字段名)from 表名; |
sum | 求和 | eg:select sum(字段名)from 表名; |
avg | 取平均 | eg:select avg(字段名)from 表名; |
max | 取最大数 | eg:select max(字段名)from 表名; |
min | 取最小数 | eg:select min(字段名)from 表名; |
六、分组查询
使用group by
和 having
语句
group by
语法格式:
select 字段名 from 表名 group by 字段名;
having
对已分组的数据再次进行过滤筛选
语法格式:
select 字段名 from 表名 group by 字段名 having ...;
select
总结
完整的select
语句格式:
select 字段
from 表名
where ...
group by ...
having ...
order by ..
执行顺序:
- 首先执行
where
语句过滤原始数据 - 执行
group by
对数据进行分组 - 执行
having
对分组的数据再次过滤 - 执行
select
选出数据 - 执行
order by
对数据排序
七、连接查询
(一)内连接
将一张表看做两张表
语法格式:
表1 inner join 表2 on 关联条件
关联条件必写
inner可省略
select
A.a1,A.a2,B.b
from
A字段 A
inner join
B字段 B
on
...
where
...
;
(二)外连接
(1)左外连接
将左边的表当做主表来比较,与左表不相等的会被显示
表1 left outer join 表2 on 关联条件
关联条件必写
outer可省略
select
A.a1,A.a2,B.b
from
A字段 A
left outer join
B字段 B
on
...
where
...
;
(2)右外连接
将右边的表当做主表,与右表不相等的会被显示
表1 rigth outer join 表2 on 关联条件
关联条件必写
outer可省略
select
A.a1,A.a2,B.b
from
A字段 A
right outer join
B字段 B
on
...
where
...
;
(三)子查询
嵌套的select
语句
可使用子查询的语句包括select
、where
、from
等
(四)union
合并集合
语法格式:
select 字段名 from 表名 where...
union
select 字段名 from 表名 where...;
(五)limit
提取前几条或中间几条数据
语法格式:
select 字段名 from 表名 limit m,n;
m:记录开始的index,从0开始,表示第一条记录,省略m默认从0开始
n:从第m+1条开始,提取n条
八、MySQL常用数据类型
类型 | 说明 |
---|---|
char(长度) | 定长字符串,存储空间大小固定,适合作为主键或者外键 |
varchar(长度) | 变长字符串,存储空间等于实际数据空间 |
double(有效数字位数,小数位) | 数值型 |
float(有效数字位数,小数位) | 数值型 |
int(长度) | 整型 |
bigint(长度) | 长整型 |
Date | 日期型 |
BLOB | 二进制大对象 |
CLOB | 字符大对象 |
其他… | … |
九、表
(一)建表
语法格式:
create table 表名(
字段名 数据类型,
...
);
(二)查看表
语法格式:
desc 表名;
(三)向表中加入数据
语法格式:
insert into 表名(要插入数据的字段) values(对应字段数据类型的数据);
同时插入多个可用逗号隔开
可以省略字段插入
插入日期:
- 插入日期格式和显示格式一致
- 采用str_to_date
- 添加系统日期
now()
(四)添加字段
语法格式:
alter table 表名 add 字段名 数据类型;
(五)修改字段
语法格式:
alter table 表名 modify 字段名 数据类型;
(六)删除字段
语法格式:
alter table 表名 drop 字段名;
(七)表复制
语法格式:
create table 新表名 as select 字段名 from 表名;
(八)update
语法格式:
update 表名 set 字段名1 = 需要修改的值1,字段名2 = 需要修改的值2 where ...
(九)delete
语法格式:
delete from 表名 where...;
(十)约束
常见约束:
- 非空约束:
not null
- 某个字段设置其值不能为空
- 唯一约束:
unique
- 某个字段的值不能重复
- 主键约束:
primary key
- 每个表都一个具有主键
- 标识记录的唯一性
- 分为单一主键和复合(联合)主键
- 单一主键:由一个字段构成
- 复合(联合)主键:由多个字段组成
- 外键约束:
forgin key
- 保证表的完整性
- 若表中的某个字段是外键字段,则该字段的值必须来源于参照的表的主键
(1)添加约束
添加主键约束
alter
table 表名
add constraint
约束名称
primary key
表名(主键字段);
添加外键约束
alter
table 从表表名
add constraint
约束名称
forign key
从表表名(外键字段)
references
主表表名(主键字段);
添加唯一性约束
alter
table 表名
add constraint
约束名称
unique
表名(字段);
(2)删除约束
删除主键约束
alter
table 表名
drop
primary key;
删除外键约束
alter
table 表名
drop forign key
外键(区分大小写);
删除约束约束
alter
table 表名
drop key
约束名称;
(3)修改约束
即修改字段
alter table 表名 modify 表名 数据类型 约束名称;
十、事务
保证多个操作原子性,要么全成功,要么全失败
特征ACID:
- 原子性(Atomicity)
- 整个事务中的所有操作,必须作为一个单元全部完成(或者全部取消)
- 一致性(Consistency)
- 在事务开始之前与结束之后,数据库都保持一致
- 隔离性(Isolation)
- 一个事务不会影响另一个事务的运行
- 持久性(Durability)
- 在事务完成之后,该事务对数据库所作的更改会持久保存在数据库中,不会被回滚
开启事务
start transaction;
回滚事务
rollback;
事务提交
commit;
十一、索引
(一)创建索引
create unique index 索引名 on 表名(列名);
或
alter table 表名 add unique index 索引名(列名);
(二)查看索引
show index from 表名;
(三)使用索引
explain select 字段名 from 表名 where ... ;
(四)删除索引
drop index 索引名 on 表名;
或
alter table 表名 drop index 索引名;
或
alter table 表名 drop primary key;//一个表只有一个primary key索引
十二、视图(虚拟表)
根据查询定义的数据库对象,用于获取想要看到和使用的局部数据
作用:
- 提高检索效率
- 隐藏表的实现细节(面向视图检索)
(一)创建视图
create
view 视图名
as
select
字段名...
from
表名...
where
...
;
MySQL不支持子查询创建视图
(二)修改视图
alter
view 视图名
as
select
字段名...
from
表名...
where
...
;
(三)删除视图
drop view if exists 视图名;
if exists
判断是否存在
十三、数据库的导入和导出
(一)数据库导入
source 绝对路径
(二)数据库导出
mysql dump 要导出的数据库/表 导出位置的绝对路径 -u root -p数据库登录密码
十四、数据库设计的三种范式
(一)第一范式
数据库表中不能出现重复记录,每个字段是原子性的不能在分
每一行必须唯一,每个表必须要有主键,可使用数值型或者定长字符串表示,不可分割
(二)第二范式
建立在第一范式的基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖
(三)第三范式
建立在第二范式的基础上的,非主键字段不能传递依赖于主键字段(不能产生传递依赖)
(四)表的设计
一对多,两张表,多的表加外键
多对多,三张表,关系表两个外键
一对一,外键唯一,或主键共享
转载:https://blog.csdn.net/Noria107/article/details/115360799