mysql基础入门

前沿

MySQL 是当前最受欢迎的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。其受欢迎的原因主要在于其开源特性、稳定性、高性能以及广泛的社区支持。MySQL 提供了强大的数据管理和查询功能,支持多种存储引擎,如 InnoDB 和 MyISAM,满足不同应用场景的需求。随着云计算的普及,MySQL 也适应了云环境,许多云服务提供商如 AWS、Azure 和 Google Cloud 都提供托管的 MySQL 服务。此外,MySQL 的灵活性使其在各种应用程序中易于集成,无论是 web 应用、数据仓库还是数据分析。总之,MySQL 以其可靠性和强大的功能,在现代数据库管理系统中占据了重要位置

Mysql常用的存储引擎

Mysql5.6之前是MyISAM引擎,Mysql8.0之后就改为用InnoDB引擎。

show engines     # 查看当前数据的引擎
SELECT VERSION() # 查看数据库的版本
set default_storage_engines=MyISAM # 修改数据的引擎,也可以通过配置文件的方式修改
# my.conf or my.ini文件的配置实现,需要先关闭mysql服务
[mysqld]
default_storage_engines=MyISAM # 修改完后重启mysql服务

1. InnoDB事务型

使用InnoDB引擎创建数据库时会自动生成个".ibd"文件,数据表的数据映射都会放在mysql/data下的ibdata1文件中,支持事务,支持外键,同时支持奔溃修复能力和并发控制,如果对事务的完整性要求比较高,要求实现并发控制,需要频繁的进行更新,删除操作的数据库,选择InnoDB,因为该存储类型可以实现事务的提交和回滚。

2. MyISAM查询型

MISAM存储引擎的出入数据快,空问和内存使用比较低,如果表主要是用于插入新记录和读取记录,那么选择MVISAM存储引擎能实现处理的高效率。如果应用的完整性,并发性要求很低,也可以选择MyISAM存储引擎。

3. MEMORY内存型

Memory存储引擎的所有数据都在内存中,数据的处理速度快,但是安全性不高,如果需要很快的读写速度,对数据的安全性要求低。那么可以选择Memory数据库存储引擎。

**总结**:这些选择存储引擎的建议,都是根据各种存储引擎的不同特点提出的,并不是绝对的,实际应用中还需要根据实际情况进行分析。一般来说,在同一个数据库中,不同的表可以使用不同的存储引擎,如果一个表要求较高的事务处理,可以选择imnnodb引擎,如果一个表会被频察的査询,可以选择myisam存储引擎,如果是一个用于査询的临时表,那么可以选择memory存储引擎。

数据库、表操作 DDL

  • 列,也称之为栏位(column),在创建表的时候,必须指定列的名字和数据类型。
  • 索引(Index) 根据指定数据表列建立起来的顺序,提供了快速访问数据的途径。
  • 触发器(Trigger) : 用户定义的事务命令的集合,当一个表中数据进行了插入,更新或者删除时,这组命令就会自动执行,可以用来确保数据的完整性和安全性。
表的字符集
# 查看可设置的字符集
show character set

# 创建表时指定字符集
create table user(
  id    int(20),
  name  varchat(38) 
) default character set utfb8mb4 collate utfbmb4_general_ci

# 修改表的字符集
alter table user default character set utf8mb4 collate utfbmb4_general_ci
常用命令
# 数据库操作
# 创建数据库
CREATE DATABASE xk-bbs
# 删除数据库
DROP DATABASE xk-bbs
# 查看所有数据库
SHOW DATABASES 
# 使用数据库
USE xk-bbs


# 表的操作
# 创建表
CREATE TABLE user(
    id int(11),
    name varchat(28)
)
# 查看表
SHOW TABLES
# 查看表明细
DESC/DESCRIBE user
# 删除表
DROP TABLE user


01整数类型
02 浮点类型

FLOAT类型会造成精度的丢失,一般情况是选择DOUBLE,银行系统之类的建议使用DECIMAL

03 日期类型
04 字符串类型

varchat弹性伸缩。

05 JSON类型

MySQL8.0新特性

表的相关操作

-- 修改表名 rename
alter table user rename xk_user

-- 查看创建表的sql语句
show create table xk_user

-- 添加新字段 add
alter table xk_user add username varchar(100)

-- 删除字段 drop
alter table xk_user drop username

-- 更新字段的名字和数据类型 change
alter table xk_user change username name varchar(50)

-- 更新字段的数据类型和位置 modify
alter table xk_user modify name varchar(30) first/after field_name

表的约束

primary key    -- 主键约束 非空且唯一
auto_increment -- 自增长约束
unique         -- 唯一约束 
default        -- 默认约束 
not null       -- 非空约束 
主外键约束

保证数据的一致性,一个表的主键是另外一个表的外键。当新增学生时,学生的教室编号不存在,新增会失败。

**student表中的classno和classroom表中的主键classno建立主外键关系,在student中foreign key (classno)referencest_classroom(classno)**

当在使用删除t_classroom语句,会报错,因为该表的数据被另外一个表所引用。需要将所引用的数据删除干净才能删除。

表操作之DML

-- 新增 insert
insert into xk_user(name,age) values ("msh",18),
("xy",16)

-- 删除 delete
delete  from xk_user   -- 删除全部数据,但是新增
-- 的索引不是从1开始。可以使用truncate
truncate table xk_user --   进行重置索引

-- 修改 update
update xk_user set age = 22 , name = "sh" where uuid = 1


*DQL *

-- 查询某个表全部的数据
select * from user
-- 查询name字段在user表中并且去重
select distinct name from user
-- 查询某个表指定的字段
select age,name from user
-- in/not in查询
-- 查询user表中1,2,3班的所有数据
select * from user where classno in (1,2,3)
-- between and 范围查询,关键词类型只能是int
-- 在user表中查询年龄在16~25之间的所有数据
select * from user where age between 16 and 25

-- 聚合函数配合group by使用并且被group by的field
-- 不能具有唯一性
-- count 统计表中的数据有多少条 count(1/*)
-- avg   平均数
-- max   最大值
-- min   最小值
-- sum   总数
-- group_concat(name) 拼接name默认最大长度是1024
-- 可以设置 set group_concat_max_len = 10240


-- group by having 分组查询 
-- 一个查询sql语句的执行 把前半段段sql执行完的结果
-- 再执行group by 语句,再将group by结果交给having执行


-- link模糊查询
-- % 匹配多个字符
select * from user where name link '%sh'
-- _ 匹配单个字符
select * from user where name link '_xy'



-- order by desc/asc 默认asc
-- 查询user表的数据按照年龄从大到小进行排序
select * from user order by age desc 



-- 联合查询
-- inner join on 内联查询 
-- 查询拥有班级的学生信息和班级信息
select s.*, c.* from student s inner join class c on
s.classno = c.classno

-- left [out] join on 
-- 左外查询,左表是主表,如果条件中左表匹配不上从表的数据
-- 查询出来的结果,主表都会显示,只不过从表的数据都是空

-- right [out] join on 
-- 右外查询 结论和左外查询类似。



-- 子查询
-- 统计分类栏目中的数据条数
select t1.id,t1.title,(select count() from xk_bbs. t2 where t2.id = t1.categoryid)
 from xk_bbs_category t1 
 
 
-- 分页 limit pageno - 1 * 每页显示的数量
select * from user limit 0(pageno) 5  


-- union/union all 不去重
-- 查询班级里男和女的总数
select count(1) as '男的总数' from class where gender = 1 
union
select count(1) as '女的总数' from class where gender = 0

索引

一种数据结构,b+tree + hash

  1. 主键索引 primary
  2. 唯一索引 unique
  3. 常规索引
  4. 全文索引
const - ref - range - index - all
-- 创建索引
create index name_idx on user(name)
-- 删除索引
drop index name_idx on user
-- 查询索引
show index from user
-- 复合索引 name是带头大哥 
create index name_age_idx on user(name,age)
select * from user where age = 10 -- 因为大哥name不在此刻是不会命中索引的 type = all

-- 全文索引 只支持char varchar字符串类型
-- 添加全文索引
alter table user add fulltext index `name_full_idx`(`name`)
-- 使用全文索引进行查询
select * from user where match(name) against('love')




索引准则
  1. 索引不是越多越好,一张表最好控制在3个索引
  2. 不要对经常变动的数据加索引
  3. 数据量小时不需要加索引,一般10w条数据左右才考虑加索引(真和假,数字列,价格)
  4. 在设计表中经常看到isdelete字段是为了保护索引。

MySQL权限管理

-- 创建用户
create user feige@localhost identified 12345
-- 删除用户
drop user feige@localhost
-- 查看某个用户的权限
show grants for feige@localhost
-- 添加某个用户的权限
grants insert, select on *.* from feige@localhost
-- 删除某个用户的权限
rovoke insert,delete,update on *.* from feige@localbost
-- 修改权限/删除权限之后需要执行
flush privileges

-- 修改用户密码
alter user feige@loclshowt identified by 

MySQL事务处理

-- set autocommit = 0 关闭 1 开启
-- 开启事务
start transaction
-- 提交事务
commit
-- 回滚事务
rollback
事务的ACID原则
  1. 原子性
  2. 一致性
  3. 隔离性
  4. 持久性

MySQL数据库备份

数据备份

sql#### 数据恢复

  1. source 命令
-- 登陆mysql中
source Document/backup/xk_bbs.sql
  1. mysql登陆命令
mysql -uroot -psanyueshi > Document/backup/xk_bbs.sql

数据库设计

第一范式
  1. 主键 每张表都要有主键
  2. 原子性 每个字段都要求不能在进行分割
第二范式

建立在第一范式之上,保证表的原子性,每张表只存储一种数据,例如:用户表保存用户数据,商品表保存

商品数据,订单表保存订单数据。

第三范式

第三范式数据表的数据都要和主键直接关联,不能说间接关联。主外键关联 一张表t1和另外一种表t2进行关联,t1的主键和t2的外键必须是一样的字段。

总结

本文给各位小伙伴们,带来了mysql的基础篇,本文有不足的多多包涵,望跟小伙伴们一起进步!

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sanyueshui_Go

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值