文章目录
【收藏】写给程序员的 MySQL 高频面试题!MySQL介绍及配置MySQL如何选用合适的数据类型DDLDML约束DQL数据备份如何设计一个项目的数据库数据库设计的三大范式常用函数
【收藏】写给程序员的 MySQL 高频面试题!
【收藏】写给程序员的 MySQL 高频面试题!
MySQL介绍及配置
SQL:structured query language 结构化查询语言。
MySQL:数据库管理系统(DBMS) RDBMS 软件 在指定系统上安装的一个软件(服务)。
主要管理数据获取存储等功能。包含数据库。
数据库管理系统有n个数据库—> 每个数据库有n张表—>每张表里面有n个字段(类型 约束)以及n行记录
配置情况:
在path: 配置mysql的 bin目录的路径;核心配置文件为my.ini,更改默认编码格式为utf8: 第
66行
default-character
-set
=utf8
第
100行 character
-set
-server
=utf8
可以愉快地使用了。
SQL的分类:
DDL 数据定义语言 create alterDML 数据操作语言 insert delete updateDQL 数据查询语言 selectDCL 数据控制语言 grant begin commit flush
MySQL如何选用合适的数据类型
MySQL如何选用合适的数据类型char和varchar MySQL中int(M)和tinyint(M)数值类型中M值的意义
DDL
1.创建数据库
create database 数据库名称
;
2.查看创建数据库的基本信息
show create database 数据库名称
;
java
| CREATE DATABASE `java`
3. 创建表
语法
: tb_ t_
create table 表名
(
字段
1 字段类型
[约束
],
字段
2 字段类型
[约束
],
字段
3 字段类型
[约束
],
.....
字段n 字段类型
[约束
],
);
创建用户信息表
(一张表里面必不可少的
3个字段
: id createtime updatetime
)
create table
tb_userinfo(
id
int(4) unsigned
,
name
varchar(20),
gender
tinyint(1),
salary
decimal(10,3),
birthday date
,
createtime datetime
,
updatetime datetime
);
表 vs 类
(ORM 对象关系映射
)
表名
===类名
表字段
==类属性
表字段类型
==类属性的数据类型
3. 删除表
drop table 表名
;
4. 操作表结构 alter
新增表字段: alter table 表名 add 新的字段名称 类型
[约束
];
alter table tb_userinfo add age
tinyint(2) unsigned
;
alter table tb_userinfo add age1
tinyint(2) unsigned after gender
;
删除指定字段
: alter table 表名 drop 字段名称
;
alter table tb_userinfo drop age
;
修改字段名称
: alter table 表名 change age1 age 指定数据类型
;
alter table tb_userinfo change age1 age
tinyint(2) unsigned
;
alter table tb_userinfo change age1 age
int(2) unsigned
;
mysql
> alter table tb_userinfo modify age
tinyint(2) unsigned
; 只能修改类型
修改表名
:
alter table 表名 rename 新的名称
;
rename table tb_user to tb_userinfo
;
DML
- insert
1.对所有的字段赋值
insert into 表名 values
(数据
1,....数据n
);
- 指定部分字段
(推荐
)
insert into 表名
(字段
1...字段n
) values
(数据
1,....数据n
);
修改指定数据库编码:
mysql
> ALTER database 数据库名 character set utf8
;
- delete
删除指定表里面的一条或者多行记录
delete from 表名
; == > 清空表数据
根据条件删除记录
: where
delete from 表名
[where 字段名
= 数据
and(or
) 字段名
= 数据
]; >=0行记录会受影响
- update
修改指定表里面的
>=1行记录
update 表名 set 字段名
1 = 新的数据
1 ,字段名
2 = 新的数据
2 [where 字段名
= 数据
and(or
) 字段名
= 数据
];
约束
空约束:null非空约束:not null默认约束:default唯一性约束:unique主键约束:primary key(行级约束:值唯一且不能为null)外键约束:foreign key(表级约束)
在开发中,表里面不允许出现外键。一切表与表的关联关系,在代码层面上进行解决。
DQL
-- 查询语句 select
* 通配符
(表的所有列
)
select
* from 表名
;
select 字段名称
1,字段名称
2 from 表
1,表
2
[where 条件
1 and
/or 条件
2
group by 字段名(对结果分组)
having 条件
1(分组后筛选行的操作)
order by 字段
1 asc
, 字段
2 desc(排序)
limit
?,?(限定,多用于分页)
]
条件查询 字段控制查询 聚合函数 分组查询 关联查询
数据备份
1. 物理内存复制data目录 my
.ini(
96行) datadir
=C
:/ProgramData
/MySQL
/MySQL Server
5.7/Data
2. 利用客户端(navicat)的工具功能 转储
-->结构
+数据
3. 使用命令行:
备份
: mysqldump
-hip
-uroot
-proot java_1
> d
:\\java_1
.sql
mysqldump
-hlocalhost
-uroot
-proot java_1
> d
:\\java_1
.sql
导入
:
source sql文件路径
如何设计一个项目的数据库
糟糕的数据库设计
数据冗余自带外键,数据插入删除麻烦(屏蔽使用物理外键)程序的性能差 数据库设计步骤(个人博客):分析需求,标识实体
用户表(用户登录注销,个人信息,写博客,创建分类) 分类表(文章分类) 文章表(文章的信息) 评论表 友链表(友情链接信息) 自定义表(系统信息,博客标题等) 标识实体之间的关系
写博客:user——>blog创建分类:user——>category关注:user——>user评论:user——>user——>blog
数据库设计的三大范式
第一范式:
列原子性,保证每一列不可拆分 第二范式:
前提:满足第一范式每张表只描述一件事情 第三范式:
前提:满足第一、第二范式数据表中的每一列数据都和主键直接相关,而不能直接相关 规范性和性能的冲突
阿里规约:关联查询的表不得超过三张。考虑商业化的需求和目标,性能更加重要。在规范性能的情况下,适当考虑规范性。会有故意增加冗余的字段(从多表查询变为单表查询)会故意增加一些计算列(从大数据量降低为小数据量的查询)
常用函数
字符串函数(不常用) 数值函数 日期和时间函数