☰
MySQL基础笔记
2026/9/27 6:37:44 网站建设 项目流程

一、数据库类型

1.关系型数据库:二维表格模型

如:MySQL、Oracle、DB2、SQLServer、SQLite等

2.非关系型数据库:Not only SQL(NoSQL),key-value键值对模型

如:Redis、Hbase、MongoDB等

二、MySQL登录

1.明文登录:

菜单键+R,运行打开cmd,输入命令:mysql -u[用户名] -p[密码],回车运行

2.暗文登录

菜单键+R,运行打开cmd,输入命令;mysql -u[用户名] -p,回车运行。Enter password :后输入[密码],回车运行

三、SQL语句分类

DDL:数据定义语言用于库/表的增删改
DML:数据操作语言用于表中数据的增删改
DQL:数据查询语言用于查询表中数据
DCL:数据控制语言用于控制权限

1.DDL数据定义语言

创建数据库:create database [if not exists] 库名称 [charset 字符集];

查看数据库:show databases

选择数据库:use 库名称

删除数据库:drop database 库名称

创建表:create table [if not exists] 表名称(字段1 数据类型 [约束],字段2 数据类型 [约 束],......);

查看表:show tables;

删除表:drop table 表名;(逻辑是drop表格后建立一个跟原来表结构一样的表)

清空表数据:truncate table 表名;

查看表结构:desc 表名称;

重命名表:①rename table 表名 to 新表名;

②alter table 表名 rename to 新表名;

修改表字段:①alter table 表名 change 旧字段名 新字段名 新数据类型 [新约束类型];

②alter table 表名 modify 旧字段名 新数据类型 [新约束类型];

增加表字段:alter table 表名 add 字段名 数据类型 [约束类型];

删除表字段:alter table 表名 drop 字段名;

2.DML数据操作语言

插入数据:①insert into 表名 values (值1,值2,......);

②insert into 表名(字段1,字段2,......) values (值1,值2,......);

③insert into 表名 values (值1,值2,......),(值1,值2,......),......;

删除数据:delete from 表名 (where 字段=值);(如果无where条件,则删除所有表数据)

更新数据:update 表名 set 字段1=值1 (where 字段2=值2);(如果无where条件,字段1中所 有数据更新为值2)

3.DML数据查询语言

基本语法结构:select 查询字段

from 查询的表

where 查询条件

group by 分组条件

having 分组后的查询条件

order by 排序

limit 分页;

执行顺序:from→where→group by→having→select→order by→limit

处理细节之select:

-- 查找表下所有数据用select *,*是通配符,代表所有数据。工作中尽量不要使用,企业数据量大。

-- 查询语句可以使用算数运算符“+、-、*、/等”,如select 字段1+字段2,select字段3*12等。如果某字段中存在null,不可直接运算,因为null与任何数值运算结果都是null,可用ifnull(字段,字如果字段中存在null则输出的值)处理后再运算。算数运算符只能对数值型字段使用。

-- 可为字段设置别名,如select 字段 as 别名,as 可以不写

-- 查询数据去重,select distinct 字段1,字段2。distinct 前面不能有任何字段,多列去重时,多列完全相同时才会去重。

处理细节之where:

-- 不等于符号用!=,或<>都可以;建议用!=,因为python中只有!=,没有<>。

-- 判断null不能用=或!=,只能用is 或is not。

-- 查询条件是否在两个数值(含)之间的语法:(not)between 数值1 and 数值2。

-- 查询条件在某个集合:in (值1,值2,......)

-- 模糊查询:like ‘存在内容’。%是like语法中的通配符,占用不固定字节。_是占位符,仅占用一个字节。\是转义字符,使%和_转义为字符串,而不是特殊字符。

-- 逻辑运算:and(且)、or(或)、not(取反)。执行顺序not>and>or

细节处理之order by:

-- desc 表示降序,asc表示升序,不写默认升序

-- MySQL中null永远为最小值,oracle中永远是最大值

字节处理之limit:

-- limit n,表示仅输出前n条数据

-- limit(x,y),表示不输出前X条数据,从X+1条数据开始输出y条数据

细节处理之group by 和having:

-- group by 分组后,select 后面只能跟分组字段和聚合函数

-- having 必然跟在group by 后面,无法单独使用having。

4.DCL数据控制语言

四、数据类型

1.数值类型

tinyint(小整数集),int(大整数集),bigint(极大整数集),float(单精度浮点数值,不适用金额),double(双精度浮点数值,不适用金额),decimal(最大总位数,小数点后位数)(定点小数)

2.字符串类型

char(定长字符串),varchar(不定长字符串),text(长文本数据)

3.日期时间类型

date,datetime

五、约束类型

primary key:主键,非空且唯一
unique:唯一
not null:非空
default:默认值,未指定时使用默认值
check:

检查是否符合业务逻辑

auto_increment:自增长,未指定时按顺序填写,一般搭配主键使用
foreign key:外键,引用主表字段

外键使用tips:

-- 建表时语法:create table [if not exists] 表名 (字段1 数据类型 [约束],字段2 数据类型 [约束],......,constrain [外键名] foreign key 外键字段 reference 主表名 (主表字段));

-- 建表后增加外键语法:alter table 表名addconstrain [外键名] foreign key 外键字段 reference 主表名 (主表字段);

删除外键语法:alter table 表名 drop foreign key [外键名]

六、函数(仅在DQL中使用)

1、字符串函数

low()转小写
upper()转大写
concat(字段1,字段2,......)多字段拼接,若拼接字段中有null,则必定返回null
concat_ws(拼接符,字段1,字段2,......)跟concat作用一样,不过要先输入拼接符
substr(字段,n,m)截取字符串,从字段第n个字符开始截取,截取m个字符。n可为负数,表示倒数第|n|个字符。m可不填,表示截取至最后一个字符
length()求长度函数,一个汉字算3个字符
char_length()求长度函数,一个汉字算1个字符
instr(字段,字符)

定位字符在字段中首次出现的位置,找不到返回0

replace(字段,被替换字符,替换字符)用替换字符替换字段中所有被替换字符。

2.数值函数

round(字段,n)保留n位小数,四舍五入
truncate(字段,n)保留n位小数,不四舍五入
mod(被除数,除数)取余
ceil()向上取整
floor()向下取整
power(底数,次方数)幂运算

3.日期函数

now()查看当前时间
date()查看日期
date_format(原数据,输出格式)日期格式化
datediff(date1,date2)计算date1-date2的天数
date_add(date,interval n 单位)计算date加n年/月/日/时/分/秒后的日期,单位可为year/month/day/hour/minute/second
courdate()查看当前日期

4.通用函数

ifnull(字段,返回值)把字段中的null处理为返回值
nullif(字段1,字段2)内容相同返回null,不同返回1
coalesce(字段1,字段2,......)返回第一个不是null的参数

5.聚合函数

sum()求和

avg()

求平均值
count()求个数,count(*)或count(常量)统计所有行数,count(字段名)统计该字段非null的行数。
max()求最大值
min()求最小值

6.条件表达式

-- case:打标签。

基本语法:case when 条件1 then 返回值1 when 条件2 then 返回值2...... else 返回数据3 end

-- if:if(条件,满足条件返回的值,不满足条件返回的值)

-- cast(字段 as 字段类型):把字段转换成字段类型。

七、级联操作与软删除

-- 级联操作:正常表连接之后,当主表中的数据被外键引用后,不可以删除主表或更新主表中已被引用数据。级联操作就是让你可以这样操作。不建议使用,了解即可

--软删除(逻辑删除):说白了就是不把数据真的删除,而是在表格中增加一个字段,用于识别该数据是否要呈现。本质上是数据更新

八、表连接(join on)

1.内连接

基本语法:表1 [表1别名] [inner] join 表2 [表2别名] on 连接条件

-- 能够连接的上的数据才会呈现

2.(左/右)外连接

基本语法:表1 [表1别名] left/right join 表2 [表2别名] on 连接条件

-- left表示左边的是主表,right表示右边的是主表, 执行后主表数据全部显示,从表满足条件的依次连接,不满足条件的用null填充

3.自连接

基本语法:表名 [别名1] [inner/left/right] join 表名 [别名2] on 连接条件

-- 自连接必须为表设置表名

其他情况说明:

-- 两个表中存在相同字段名时,可用”表名.字段名“表示。如emp和dept表中都有deptno字段,可设置emp.deptno=dept.deptno

-- 笛卡尔积:连接的表的行数的乘积,当表连接不设置on连接条件时,就会出现笛卡尔积。

九、子查询

定义:在一条查询语句中嵌套其他select,把返回的结果给主查询使用

1.单行子查询:适用于子查询返回单行单列或单行多列的场景,主查询使用单行比较运算符,如>、<、=等

2.多行子查询:适用于子查询返回多行单列或多行多列的场景,主查询使用多行比较运算符,如in,any,all等。

--子查询可以作为新表放在from后面使用,此时必须为子查询设计别名。

十、临时表

--基本语法:with 临时表名 as (临时表查询语句)

--建多张临时表基本语法:with 临时表名1 as (查询语句),临时表名2 as (查询预计),......

-- 临时表只在当前SQL语句中生效。

十一、视图

视图是对数据库中原始数据的一个映射,是一个虚拟表,仅占用很少的内存空间。

-- 创建视图基本语法:create view 视图名 as (查询语句);

-- 删除视图:drop view 视图名;

-- 修改视图:alter view 视图名 as (查询语句);

-- 因为视图是对数据库原始数据的映射,所以不能直接修改视图中的具体内容,只能修改映射的数据,本质上是用这个视图名重新设立了一个新的视图

十二、索引(index)

1.建表时插入索引基本语法:create table (if not exists)表名 (字段1 类型,字段2 类型,......,index [索引名1] (字段名1),index [索引名2] (字段名2),......);

2.建表后插入索引基本语法:create index on 表名 (字段名1 [desc/asc]),(字段名2 [desc/asc]),......;

其他说明:

-- 索引底层是一套树形查找方法,让数据库不用逐行扫描就能快速定位数据​编辑CSDN同步助手

-- 索引不是越多越好 -- 索引内部是一个哈希表,键值对形式 -- 给经常查询的字段取建立索引​编辑CSDN同步助手

-- where 后面使用函数会导致索引失效

-- 日期类型的字段不建议加索引(日期进经常需要用函数处理,导致索引失效)

-- 主键不用创建索引,主键自带索引

十三、事务

-- 事务四大特性

原子性事务是最小的原子单元,不可拆分。一个事务里的所有SQL要么全部执行成功,要么全部失败

一致性

事务执行前后,数据库的约束、完整性规则不会被破坏
隔离性多个事务并发执行时,事务之间互相隔离,互不干扰,每个事务看不到其他事务未提交的脏数据。数据库提供了4中隔离级别,控制并发冲突问题
持久性事务执行commit提交后,数据永久写入磁盘

--设置事务提交状态:set autocommit=0/1,0代表手动提交,1代表自动提交。MySQL默认自动提交

-- 开始事务:begin/start transaction

-- 设置安全节点:savepoint 安全节点名称,设置在需要回滚的节点上面,回滚后视为savepoint 后面的SQL均未执行

-- 回滚 :rollback to 安全节点名称,回滚至指定安全节点。

-- 提交事务:commit

十四、建表三范式

1NF_原子性表中字段内容应为不可再拆分的最小字段
2NF_消除部分依赖非主键字段必须依赖整个主键,不能仅依赖主键的部分(针对复合主键)
3NF_消除传递依赖

非主键字段之间不能有依赖关系(如A依赖B,B依赖主键→传递依赖)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询