Mysql学习笔记

MySql笔记

什么是数据库

数据库(DB,database)概念:数据仓库,安装在操作系统之上的,可以存储大量的数据

作用:存储数据,管理数据

分类:

关系型数据库(SQL)

  • MySQL Oracle SQL server DB2…

    通过表和表之间,行与列之间的关系进行数据的存储

非关系型数据库(NoSql)

  • redis MongDB

    对象存储,通过对象自身的属性来决定

Mysql简介

MySQL是一个关系型数据库(DBMS),Oracle旗下产品,是一个开源的数据库管理软件

体积小,速度快,使用成本低

建议:安装MySQL不要使用exe安装,会进注册表,卸载很麻烦 使用压缩包安装会简单很多

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JKnq1FeJ-1666976228686)(C:\Users\14178\AppData\Roaming\Typora\typora-user-images\image-20221025223337001.png)]

  • DML(Data Manipulation Language),即数据操纵语言,最常用的增删改查就属于DML,操作对象是数据表中的记录;
  • DDL(Data Definition Language),即数据定义语言,例如建数据库、建表等,都属于数据定义语言,也是今天本文的主角;
  • DCL(Data Control Language),数据控制语言,如Grant、Rollback等等,常见于数据库安全管理,多数人一般很少用。
  • DQL (Data Query Language)数据查询语言

操作数据库

操作数据库->操作数据表->操作表中的数据

MySQL关键字不区分大小写

CREATE DATABASE [IF NOT EXISTS] 数据库名; --[]代表可选

DROP TABLE IF EXISTS 数据库名; --删除数据库

USE 数据库名; --切换数据库

SHOW DATABASE; --查看所有的数据库

数据库的列类型

数值型:

  • tinyint 很小的数据 1个字节
  • smallint 比较小的数据 2个字节
  • mediumint 中等大小的数据 3个字节
  • int 标准的正数 4个字节 (常用)
  • bigint 较大的数据 8个字节
  • float 浮点数 4个字节
  • double 双精度浮点数 8个字节(会有精度问题)
  • decimal 字符串形式的浮点数 (金融计算的时候一般使用decimal)

字符串:

  • char 字符串固定大小 0-255
  • varchar 可变字符串 0-65535(常用 相当于String)
  • tinytext 微型文本 0-2^8-1
  • text 文本 0-2^16-1

时间日期:

  • Data YYYY-MM-DD 日期
  • time HH:mm:ss 时间
  • datatime YYYY-MM-DD HH:mm:ss 最常用的时间格式
  • timestamp 时间戳 1970.1.1到现在的毫秒数
  • year 年份表示

数据库的字段属性:

  • unsigned 无符号整数 如果使用 则声明该列不能为负数
  • zerofill 0填充 不足的位数使用0填充
  • 自增(AUTO_INCREMENT) 自动在上一条记录的基础上+1 通常用来设计唯一的主键(可以自定义设置主键自增的起始值和步长) 必须是整数类型
  • 非空 NULL 和 NOT NULL 如果字段为not null则不允许为空

数据库引擎

INNODB 默认使用 安全性高 支持事务 支持多表多用户操作

MYISAM 节约空间 速度较快

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vkozfE9w-1666976228688)(C:\Users\14178\AppData\Roaming\Typora\typora-user-images\image-20221025234857770.png)]

所有的创建和删除操作尽量加上判断

--修改表名
ALTER TABLE 旧表名  RENAME AS 新表名

--增加表的字段
ALTER TABLE 表名  ADD 字段名 列属性

--修改表的字段
ALTER TABLE 表名  MODIFY 字段名  列属性  --修改约束

ALTER TABLE 表名  CHANGE 旧字段名  新字段名  --修改字段名
(MDIFY一般用来修改表的字段类型和约束   CHANGE用来修改字段名)

--删除表的字段
ALTER TABLE 表名 DROP 字段名


--删除表
DROP TABLE IF EXISTS 表名

--添加外键约束
ALTER TABLE 表名
ADD CONSTRAINT 约束名 FOREIGN KEY (`字段名`) REFERENCES 	`表名`(`字段名`);

--添加数据
INSERT INTO 表名(字段名) VALUES('值')
--插入多个字段,用逗号分隔
INSERT INTO 表名(字段名1,字段名2...) VALUES('值','值2',...),
										('值','值2',...)

注意:

1.字段与字段之间用英文逗号隔开

2.字段名可以省略,但是后面的值需要一一对应

3.可以同时插入多条数据,VALUES后面的值需要用 , 隔开即(),()

--修改
UPDATE 表名  SET 列名='值',列名='值' WHERE 条件

--删除
DELETE FROM 表名 WHERE 条件

TRUNCATE命令,完全清空一个数据库表,表的结构和索引不变
TRUNCATE TABLE 表名

DELETE 和TRUNCATE的区别:

相同点:

都能删除数据,不会影响表结构

不同点:

TRUNCATE 重新设置自增列,计数器会归零

TRUNCATE不会影响事务

--查询语句(重点)
SELECT 字段  FROM 表名  --根据字段查询   *是通配符

--去重 DISTINCT(去除select语句查询出来的重复语句)
SELECT DISTINCT * FROM 表名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZA1iLJh-1666976228689)(C:\Users\14178\AppData\Roaming\Typora\typora-user-images\image-20221026175316558.png)]

where条件子句

检索数据中符合条件的值

模糊查询

like结合%(%代表任意个字符) _(一个字符)

in :在某个范围内(具体的一个值或多个值)

联表查询

SELECT 字段名 FROM 表名
INNER JOIN 表名
ON 连接条件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6F4Pgada-1666976228690)(C:\Users\14178\AppData\Roaming\Typora\typora-user-images\image-20221027001902243.png)]

分页和排序

ORDER BY(排序)
排序分为升序(ASC)和降序(DESC)
例:
SELECT 字段名 FROM 表名
INNER JOIN 表名
ON 连接条件
ORDER BY 字段 DESC/ASC
分页:可以缓解数据库压力,给别人的体验也更好
LIMIT  起始位置,pagesize
SELECT 字段名 FROM 表名
INNER JOIN 表名
ON 连接条件
ORDER BY 字段 DESC/ASC
LIMIT 起始位置,pagesize    --起始位置等于(当前页-1)*pagesize
          --数据总数/pagesize=总页数

分组:GROUP BY
HAVING
例:
SELECT 字段名...
FROM 表名
INNER JOIN 表名
ON 连接条件
GROUP BY 字段名  --根据什么来分组
HAVING 次要条件

子查询

本质上是在where语句中嵌套一个查询语句

事务

要么都成功 要么都失败

将一组sql 放在一个批次中去执行

事务原则:ACID原则

**原子性(原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。) **

一致性 (事务前后数据的完整性必须保持一致。)

隔离性 (事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。)

持久性(持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响)

参考链接:(16条消息) 事务ACID理解_dengjili的博客-CSDN博客_事务acid

隔离会导致一些问题:

如脏读

不可重复读

虚读

mysql是默认开启事务自动提交的

--关闭默认提交
set autocommit=0 --0是关闭   1是开启

start transaction;  --开启事务
执行sql

commit  --提交事务
rollback --回滚事务
set autocommit=1;

--首先开启事务    然后执行sql  如果执行完毕则提交事务  
否则回滚事务   保持事务的原子性 一致性  持久性

索引

索引是帮助mysql高效获取数据的数据结构

分类:

  • 主键索引 PRIMARY KEY
    • 唯一标识 主键不可重复 只能有一个列作为主键
  • 唯一索引 UNIQUE KEY
    • 避免重复的列出现 唯一索引可以重复 多个列都可以标识为唯一索引
  • 常规索引 KEY/INDEX
    • 默认的
  • 全文索引 FullText
    • 在特定的数据库引擎下才有 快速定位数据
--在一张表中  主键索引只能有一个   唯一索引可以有多个

--增加一个全文索引
ALTER TABLE 表名  ADD FULLTEXT INDEX 索引名(列名)

--给表中的某个字段添加一个常规索引
CREATE INDEX 索引名 ON(字段)

索引在数据量少的时候用处不大,但是数据达到百万条时,区别就很明显了

索引原则
  • 索引不是越多越好
  • 不要对经常变动的数据加索引
  • 数据量少的时候不需要加索引
  • 索引一般加载经常用来查询的字段上

数据库三大范式

三大范式就是为了规范数据库的设计

第一范式:

要求数据库的每一列都是不可再分的原子数据项(保证数据的原子性)

第二范式:

前提:满足第一范式

每张表只描述一件事情

第三范式

前提:满足第一范式和第二范式

确保数据中的每一列都和主键直接相关,而不能间接相关

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值