MySQL笔记

tech2025-06-11  4

操作数据库

1 创建数据库

create database --name create database [if not exists] --name // 判断是否存在

2 删除数据库

drop database [if exisits] --name

3 使用数据库

use `--name` // `使用 表名或字段名是特殊字符

4 查看数据库

show database show table

数据类型

数值

tinyint 1个字节smallint 2个字节mediumint 3个字节int 4个字节big 8个字节float 4double 8decimal 字符串类型的浮点数

字符串

char 固定大小 0~255varchar 可变字符串 0~65535tinytext 微型文本 2^8 - 1text 文本串 2^16 - 1

时间日期

data YYYY-MM-DD,日期time HH:MM:SS 时间datatime YYYY-MM-DD HH:MM:SS 常用时间格式timestamp 时间戳 1970.1.1到现在的毫秒数year

null

没有值,未知不要使用null运算

字段属性

Unsigned:

无符号的整数不能声明为负数

zerofill

0填充不足的位数使用0填充

自增

自动在上一条记录的基础上+1(默认)通常用来设计唯一的主键, 必须是整数可以自己设置自增参数,起始值和步长

非空

如果不赋值就会报错

默认

设置默认值sex, 比如默认值 男, 如果不改变就用默认值填充。

MyISAM 和 InnoDB

默认使用InnoDB

MyISAMInnoDB事务支持不支持支持数据行锁定不支持支持外键约束不支持支持全文索引支持不支持?表空间大小较小较大,约为MyISAM的两倍

常规使用操作

MyISAM 节约空间, 速度快InnoDB 安全性高,事务的处理,多表多用户操作

在物理空间存在位置

所有数据库文件都在data目录下 文件存储 MySQL引擎在物理文件上的区别

InnoDB 在数据库中只有一个*.frm文件,以及上级目录下的ibdata1文件MyISAM对应文件 *.frm 表结构定义文件*.MYD 数据文件 data*.MYI 索引文件 index

设置数据料的字符集编码

CHARSET=utf8

不设置,数据库默认字符集,不支持中文 Latin1 my.ini中可改变默认

修改和删除

修改

ALTER TABLE {} rename as {} ALTER TABLE {} MODIFY {行} varchar(20) ALTER TABLE {} CHANGE {行} {new} INT(1)

删除

DROP TABLE [IF EXISTS] tablename -- tablename 如果存在, 删除

注意点

` ` 字段名 包裹注释 -- /**/sql 大小写不敏感

MySQL数据管理

外键 建表时, 创建外键 修改表命令来添加 alter table {name} add constraint `FK_xxx` foreign key () reference 表名 (`xxx`

物理外键不建议使用。避免数据库过多造成困扰

最佳实践 数据库就是单纯的表, 只存数据 多张表外键,程序实现

DML语言

insert insert into 表名 [字段1,字段2...] values (value1, value2,value3,...) updatedrop

添加

修改

删除

delete from name where {}

truncate 清空某一张表

truncate 和delete 区别

相同点:都能删除数据,都不会删除表结构不同: + truncate 重新设置自增列计数器归零 + truncate 不会影响事务 + delete 重启数据库 innoDB 自增列会重1开始 (在内存中) myisam 不会 (在文件中)

DQL查询数据

1 DQL

所有的查询操作都用select简单复杂都能用数据库最核心语言,最重要语句使用频率最高

2 查询指定字段 pass

3 表达式

pass

4 连表查询 Join left join right join inner join

on 先筛选后关联, where 先关联后筛选

操作描述left join会从左表中返回值,即使右表中没有right join会从右表中返回值,即使左表中没有inner join如果表中至少有一个匹配,就返回行 select s.studentNo,studentName,subJectName,StudentResult from student s right join result r on r.studentNo = s.studentNo inner join subject sub on r.studentNo = sub.studentNo

3 分页 limit 和排序order by ASC 升序 DSC 降序

分页: 对应瀑布流 缓解数据库压力

limit m,n --m起始位置, 页面大小

事务

要么都成功, 要么都失败

原则 ACID A 原子性

要么都成功, 要么都失败

C 一致性

事务前后的数据完整性要保持一致

I 隔离性

事务之间不干扰脏读 一个事务读取了另外一个事务未提交的数据虚读 一个事务内读到别的事务插入的数据,导致前后读取不一致不可重复读 一个事务读取表中某一行数据,多次结果不同 (不一定错误,某些场合不适合)

D 持久性 事务提交

是否提交 提交:持久化到数据库, 未提交:断电后不影响

Mysql 默认开启事务

set autocommit = 0 -- 关闭 set autocommit = 1 -- 开启 --手动处理事务 start transaction --标记事务开始 insert into .... insert into .... --提交 commit -- 回滚 事务内有一句执行不成功 rollback --事务结束 set autocommit = 1 -- 开启

索引

分类

主键索引 唯一的标识,主键不可重复,只能有一个列作为主键 唯一索引 避免重复的列出现,唯一索引字段值不可以重复,多个列都可以标识为唯一索引 常规索引全文索引

索引原则

不是越多越好不要对变动的数据加索引小数据量不加一般加在常用来查询的数据上

权限管理

数据库三大范式

第一范式

保证每一列不可再分

第二范式

满足第一范式,每张表只描述一件事

第三范式

满足第二范式 每列数据和主键直接相关。

最新回复(0)