MySQL数据库基础操作(一看就会)

MySQL数据库基础操作

SQL分类:

  • DQL:数据查询语言
    • 代表关键字:select
  • DML:数据操纵语言
    • 代表关键字:insertdeleteupdate
  • DDL:数据定义语言
    • 代表关键字:createdropalert
  • DCL:数据控制语言
    • 代表关键字:grantrevoke
  • TCL:事务控制语言
    • 代表关键字:commitrollback

一、常用命令

(一)启动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:

  1. \q
  2. exit
  3. 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 byhaving 语句

group by

语法格式:

select 字段名 from 表名 group by 字段名;

having

对已分组的数据再次进行过滤筛选

语法格式:

select 字段名 from 表名 group by 字段名 having ...;

select 总结

完整的select语句格式:

select 字段
from 表名
where ...
group by ...
having ...
order by ..

执行顺序:

  1. 首先执行where语句过滤原始数据
  2. 执行group by对数据进行分组
  3. 执行having对分组的数据再次过滤
  4. 执行select选出数据
  5. 执行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语句

可使用子查询的语句包括selectwherefrom

(四)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(对应字段数据类型的数据);

同时插入多个可用逗号隔开

可以省略字段插入

插入日期:

  1. 插入日期格式和显示格式一致
  2. 采用str_to_date
  3. 添加系统日期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:

  1. 原子性(Atomicity)
    • 整个事务中的所有操作,必须作为一个单元全部完成(或者全部取消)
  2. 一致性(Consistency)
    • 在事务开始之前与结束之后,数据库都保持一致
  3. 隔离性(Isolation)
    • 一个事务不会影响另一个事务的运行
  4. 持久性(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索引

十二、视图(虚拟表)

根据查询定义的数据库对象,用于获取想要看到和使用的局部数据

作用:

  1. 提高检索效率
  2. 隐藏表的实现细节(面向视图检索)

(一)创建视图

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数据库登录密码

十四、数据库设计的三种范式

(一)第一范式

数据库表中不能出现重复记录,每个字段是原子性的不能在分

每一行必须唯一,每个表必须要有主键,可使用数值型或者定长字符串表示,不可分割

(二)第二范式

建立在第一范式的基础上的,另外要求所有非主键字段完全依赖主键不能产生部分依赖

(三)第三范式

建立在第二范式的基础上的,非主键字段不能传递依赖于主键字段(不能产生传递依赖

(四)表的设计

一对多,两张表,多的表加外键

多对多,三张表,关系表两个外键

一对一,外键唯一,或主键共享

猜你喜欢

转载自blog.csdn.net/Noria107/article/details/115360799