mysql常见知识点

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在mysql的学习中,将一些常用的知识点写出来,句句皆干货

先吹吹:

0-0 什么是数据库?

数据 : qq密码 仓库

数据库:保存海量数据的仓库。

0-1数据库的诞生:

瞬时——》放在内存里的,程序结束,第二次运行的时候,上次的数据就没了。

解决方法:保存在文件里。(写文件里)

瞬时状态—》持久性数据;如:txt文件;

0-2 萌芽阶段:

0-3层次模型:

层次:

层次模型的问题:查询的效率和不完整性。

0-4网状模型:

0-5关系型模型(第二代数据库):

关系:共性。

1、安装连接和配置

安装一个Navicat就行

1-4 连接Mysql(登录)

在hyper里F11就能关闭Mysql服务。

Mysql使用的语句是sql语句,Sql server使用的是T-SQl,但是几乎相差不大。

在Hyper中登录命令:

mysql -u root -p//我要用户管理员的身份登录进入数据库。

在Hyper中退出:\q等。

1-5 创建data文件

下载了hyper,cd进入C:\Program Files\MySQL\MySQL Server 5.7,输入

mysqld --initialize-insecure --user=root

管理员身份运行,创建data文件。

这样环境就配置好了。

2、 数据库的基本操作:

2-1 数据库显示和详解:

show databases;

2-2 创建一个仓库:

create database +名字;

例:create database student;

创建一个数据库,如果不存在:

create database if not exists 数据库名

2-3 删除一个数据库:

drop database 数据库名;

例如:drop database student;

类比:创建数据库:drop database if exists student;

2-4 查看数据库的sql:

//例如
show create database student;

2-5 创建数据库指定字符编码以及查看数据库的字符编码:

例如:create database if not exists 'stdudent' charset=gbk;(或者utf-8)

        show create database student;//这条命令进行验证。

乱码->字符编码

但是实际开发过程中一定要用utf8;

2-6 修改字符编码:

例如:

alter database teacher charset=gbk;

3、表的基本操作:

3-1 提出问题,引入表的思维:

仓库-> 数据库

1.电子产品

2.日用品

3.化妆品

4.。。。。

结论:仓库的下边,其实,是有其他东西。这个东西,归类,表。

3-2 引用数据库和查看数据库中的表:

use +数据库名

查看表用:show tables;

3-3 创建表:

create table student(

-> id int,

-> name varchar(30),

-> age int

-> )

3-4 创建表(B格):

id int auto_increment primary key comment'主键id',

id name age 字段

auto_increment 自动增长

primary key 主键 最主要的 靠它来区分学生这张表

comment 注释

default 默认值

mysql> create table if not exists teacher(

​            -> id int auto_increment primary key comment'主键id',

​            -> name varchar(30)    not null comment '老师的名字',

​            -> phone varchar(20)    comment  '电话号码',

​            -> address varchar(100) default  '暂时未知'  comment  '住址'

​            -> )engine=innodb;

3-5 查看表的结构

desc teacher;

3-6 删除表

drop table student;

drop table if not exists student,teacher;

3-7 修改表

alter table student add phone varchar(20);添加

alter table student gender varchar(1) after name;放在一个固定位置

alter table student gender varchar(1) first:最前面

alter table student drop address;删除固定的字段

alter table student change phone tele_phone int(11);既改名字又改类型

alter table student rename to students;改变表名

4、MySQL数据类型:

0)数据库的数据类型问题

没有统一的标准,但应该符合业务项目的逻辑标准。

1)int的数值类型

unsigned int;无符号整形

2)int 类型实际操作和注意事项:

可以超过本身的宽度,但是不能超过范围。

3)浮点数:

float和double会出现精度丢失。解决方法:定点数

4)定点数:

deciaml:因为整数和浮点数分开,不会出现丢失。

5)字符串和文本类型:

char 0-255 定长字符串,VARCHAR 0-65535 变长字符串,会回收字节,但char的效率比varchar高。

6)布尔类型:

boolean;true:1 false:0;

7)枚举类型:

enum;通过整数管理。节省空间。

8)set类型:(集合类型)

9)时间日期类型:

每一张表都要有时间日期类型,DATETIME:YYYY-MM-DD;

5、列属性完整性:

1)列属性问题:
auto__increment:自动增长,一定是primary key;

primary key 不一定是auto increment;用了auto increment之后,比如删除3这个字段,就不能用3了

2)primary key主键的作用及企业用途:

类比身份证;

唯一的;关联表;

主键是不能设置为null的,除非设置为auto—increment;

3)删除、组合键、选择主键:

用尽量唯一的“号”来进行区分。

4)复合主键究竟有什么用:

做网站时:昵称和id;一个表里只有一个主键,主键不能为空。即使有多个主键也认为为一个。

5)unique唯一键的作用和添加介绍:

一个表里可以有多个唯一键,可以为null,主键是区分数据的,唯一键是,只能在一张表里凑热闹,主键能在多个表里凑热闹。

6)唯一键拓展:

alter table t_11 drop index phone;

7)主键和唯一键的区别:

主键和唯一键不能重复,唯一键只能在自己的表里折腾,主键可以在多个表里

8)sql的内注释和代码注释:

:字段注释,comment ‘姓名);sql内注释

9)数据库完整性:

一张表里至少得有一个主键,有些字段可以为空,有些字段为default。等等。

10)外键:

foreign key;

11)更正错误,删除外键:

show create table entry;

删除外键:删除constraint;

12)外键三招操作严格、置空和级联的使用场景介绍:

置空:主表删除ID,从表置为null。

级联:主表更新ID,从表也更新ID。

13)置空和级联演示:

6、数据库设计思维:

1)数据库设计基本概念:

关系?关系型数据库,两张表的共有字段去确定数据的完整性。

行?一条数据 一条数据记录 实体

列?一个字段 属性

冗余:提高查询性能;

2)实体和实体之间的关系:

一对一、一对多、多对一、多对多。

3)Codd第一范式 确保每列原子性:

确保每列(字段)不能再分了。

4)Codd第二范式

不能扯淡,不能在学生表里加钱啊、男女朋友啥的。

5)Codd第三范式

消除传递依赖;比如“张三”、“张”、“三”;

7、单表查询:

1)select:select 'Go fuck yourself' as gnmd,select 加字段名,as可以用来改名。(不加也行)。

2)from:select * from t1,t2;

3)limit: select * from 表名 order by age desc limit 1,2(从1开始,往后两个)(降序排序);

4)dual :伪表 select 2*7 from dual;

8、多表查询

union 多表查询+distinct就能消除重复行

多表查询时,inner join 在没有外键时,要有公共字段。内连接。on后加公共字段。

left join 左连接,以左表为基准,另一张表为辅。缺少的为NULL。

right join 右连接,以右表为基准,缺少的为NULL。

cross join 交叉连接,返回笛卡尔积。

nature join 自然连接,找到公共字段进行连接。公共字段名必须相同,若没有公共字段,则返回笛卡尔积。若两个字段都有为NULL。

using 指定连接字段。

9、子查询

子查询的基本语法:

in 和 not in:

exits 和 not exits:

十一、高级部分:

1.视图:刻意隐藏信息,如教务处学生系统,起到隐藏的作用。

(1)view视图创建、使用、作用

create view vw_stu as SELECT name from Student;

select * from vw_stu;

视图算法:temptable:临时表算法、merge:合并算法。

(2)显示视图:

终端上show tables;show create view vw_stu;

(3)更新和删除视图:

修改视图:alter;

删除视图:drop;

(4)视图算法temptable、merge:

merge:合并

temptable:临时

2.事务

一)事务的提出:

(1)点购买但你没付款。

(2)为什么转账的时候还要提醒你是不是这个卡号。

不可能两边update。

但所有事情确定了才更新就叫事务。

二)事务:transaction

跟西方结婚一样,淘宝收货和发货。

start translation

update wallet set balance=balance-50 where id=1;

update wallet set balance=balance+50 where id=2;

commit;

三)rollback to回滚点

设置回滚点:相当于虚拟机的快照,

savepoint +four(点)。

rollback to+four(点)。

保留点之前的数据。

四)事务的四大特性ACID :

atomicity 原子性(不能再分,要执行一起执行)。

consistency 一致性(事务一旦commit或回滚所有数据都该执行)。

isolation 隔离性。(A与B的交易不可能被C打断)

durability 持久性。(在数据库永久写存)

五)注意事项

事务只能在数据库引擎为innodb的时候才能使用。

3.索引

index(普通索引) Primary Key(主键) unique index(唯一索引)

如字典查笔画,快速查找数据。频繁查找数据。设置索引增删改查慢

4.存储过程(用来模块化设计)(相当于函数)

(1)delimiter

之前用分号为结尾,用delimiter // 就能以 //为结尾了

(2)procedure存储过程的用途

10、企业约束规范

10-1 库表字段约束规范:

表示是否的时候:is_vip 一定要使用类型:tinyint,为无符号。长度:1,只有0和1;

表名和字段名必须为小写字母,不能有大写字母。出现分隔单词必须用下划线隔开。

表名不能出现复数,表名不能起table(mysql里的);

索引名:

主键:pk__xxx

唯一键:uk _ _xxx

索引:idx__xxx

所有的小数全用decimal。

字符串很小时用char,别用varchar。

如果超过了5000,用text;

表里必须要有的字段id、create_time、update_time;

id必须为bigint,而且为无符号,id为单表时设为自增。

create_time 必须为datatime;

update_time 必须为datatime;

字段频繁查询,应该允许一定的冗余。

单表超过2w,分库分表。

年龄一般为tinyint,且无符号。

12-2 索引规范:

(1)限制每张表上的索引数量,建议单张表索引不超过5个:

​ 索引并不是越多越好!索引可以提高效率同样可以降低效率。

​ 索引可以增加查询效率,但同样会降低插入和更新效率,甚至可能会降低查询效率。

(2)禁止给表中的每一列都建立单独的索引:

(3)尽量避免使用外键索引。

(4)join数据类型两边必须一致。

12-3 SQL规范:

不要妄想使用count(xxx,xx,xx)去替代count(*),因为count星会统计null的行。如果某一列值都为null,你要注意count

不是name =null而是is null。

判断一个是不是空用is null。

不要用外键和级联。尤其是在高并发集群的项目中里,其他的表也要跟着改。一切外键的问题放在serve层解决或者应用层解决。

实际开发过程中禁止使用存储过程。存储过程很难调试,而且很难扩展。

删除和修改的时候先select出来查询错误,再删除

子查询的in操作能避免就避免

数据库全为utf8。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
关系型数据库 MySQL
【MySQL】——Select查询语句知识点练习(其一)
【MySQL】——Select查询语句知识点练习(其一)
|
7月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL LIKE 子句
总结 vue3 的一些知识点:MySQL LIKE 子句
|
7月前
|
安全 关系型数据库 MySQL
总结MySQL 的一些知识点:MySQL 排序(上)
总结MySQL 的一些知识点:MySQL 排序
|
7月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL NULL 值处理
总结 vue3 的一些知识点:MySQL NULL 值处理
|
7月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL 连接的使用
总结 vue3 的一些知识点:MySQL 连接的使用
|
关系型数据库 MySQL 数据库
关于mysql涉及到的知识点,C语言如何操作mysql
关于mysql涉及到的知识点,C语言如何操作mysql
|
存储 关系型数据库 MySQL
MySQL,其他部分知识点补充
MySQL,其他部分知识点补充
|
1月前
|
存储 Oracle 关系型数据库
[MySQL]知识点
本文详细介绍了MySQL中int族和char族数据类型的特点、存储范围及使用建议,以及text、blob类型和内置字符处理函数。文章强调了数据类型选择的重要性,并提供了多个实例帮助理解。
38 0
[MySQL]知识点
|
4月前
|
存储 关系型数据库 MySQL
mysql锁的知识点简述
了解和合理应用MySQL中的锁机制,对于设计高并发、高可用的数据库应用至关重要。在系统设计初期就要考量锁策略,根据实际使用场景灵活调整,以最小化锁竞争,提高事务处理速度。
61 0
|
6月前
|
SQL 关系型数据库 MySQL
Mysql从入门到精通——Mysql知识点总结(基础篇)
Mysql从入门到精通——Mysql知识点总结(基础篇)