mysql入门,随便写写

📅 发布时间:2026/7/14 6:24:11 👁️ 浏览次数:
mysql入门,随便写写
一.Mysql简介MySQL 是一种开源的关系型数据库管理系统RDBMS主要用于存储、管理和查询数据。它由 Oracle Corporation 维护是目前最流行的数据库之一广泛应用于网站、后台系统和数据平台中。Mysql的用途非常广泛世界上许多最大、增长最快的组织包括Facebook、Twitter、Booking.com 和Verizon都依赖MySQL来节省时间和资金为其高容量网站、关键业务系统和打包软件提供支持。二.sql语句的分类在介绍sql语句的分类前简单介绍一下sql的数据类型2.1 sql的数据类型I.数值类型CREATE TABLE user{ id INT UNSIGNED(无符号) }选择范围时具体根据业务类型判断字段是否可以存在负值II.字符串类型III.日期类型2.2 sql语句类型sql语句分为四类 DDL(数据定义语言)DML(数据操纵语言)DQL数据查询语言DCL数据控制语言对于日常开发来说DML和DQL语言使用频率较为频繁。2.1.1 DDL(数据定义语言)常用sql语句数据库操作-- 查询所有数据库 show databases ; -- 查询当前数据库 select database(); -- 创建数据库 create database [if not exists] 数据库名 [default character 字符集] [collate 排序规则] create database song default character set utf8mb4 collate utf8mb4_general_ci; -- 删除数据库 drop database [if exists] 数据库名; drop database if exists song; -- 使用数据库 use 数据库名; use song;表的相关操作-- 表的相关操作 -- 查询当前数据库所有表 show tables; -- 创建表 create table 表名 (字段1 字段1属性[comment 字段1注释],字段2 字段2属性[comment 字段2注释],字段3 字段3属性[comment 字段3注释])[comment 表注释]; create table May ( id int primary key auto_increment comment 编号, name varchar(50) comment 姓名, age int comment 年龄, sex char(1) comment 性别, position varchar(50) comment 位置 ); -- 查询表结构 describe May; -- 修改数据类型 alter table 表名 modify column 字段名 新数据类型(长度) [comment 字段注释]; alter table May modify column age float(10) comment 年龄; -- 修改字段名和字段类型 alter table 表名 change column 旧字段名 新字段名 新字段属性[comment 字段注释]; alter table May change column age ages float(10) comment 年龄; -- 删除表 drop table [if exist] 表名; drop table May; -- 删除指定表并重新创建该表 truncate table 表名; truncate table May;2.2.2 DML语句常见语法-- 给指定字段添加数据 insert into 表名(字段1,字段2,...) values (值1,值2,...); insert into May values (null,张三,18,男,上海); -- 给全部字段添加数据 insert into 表名 values (值1,值2,...); insert into May values (null,张三,18,男,上海); -- 批量添加数据 insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...); -- 或者 insert into 表名(字段1,字段2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...); insert into May values (null,张三,18,男,上海),(null,张三,18,男,上海),(null,张三,18,男,上海); insert into May(id,name,age,sex,position) values (null,张三,18,男,上海),(null,张三,18,男,上海),(null,张三,18,男,上海); -- 修改数据 update 表名 set 字段1 值1,字段2 值2,... where 查询条件; update May set name 李四,age 18,sex 男,position 上海 where id 1; -- 删除数据 delete from 表名 where 删除条件; delete from May where id 1;2.2.3 DQLI.基础语法-- SELECT: 选择列 (select [distinct] 字段列表) -- FROM: 指定表 (from 表名) -- WHERE: 行过滤条件 (where 查询条件) -- GROUP BY: 分组依据 (group by 分组字段) -- HAVING: 分组后过滤 (having 分组条件) -- ORDER BY: 排序规则 (order by 排序字段 [asc|desc]) -- LIMIT: 分页限制 (limit 开始索引查询数量) -- 查询多个字段 select name,age,sex,position from May; -- 查询并设置别名 select name as Mname,age as Mage,sex as Msex,position as Mposition from May; -- 去重 select distinct name,age,sex,position from May;II.条件查询-- 语法select 字段列表 from 表名 where 查询条件; select name from May where age 18;常见条件运算符III.聚合运算符 – 将一列数据作为一个整体进行纵向计算常见聚合函数语法select 聚合函数(字段列表) from 表名IV.分组查询语法select 字段列表 from 表名 [where 条件] group nu 分组字段名 [having 分组后过滤条件]补充:where与having的区别- 执行时机不同: where 是分组之前进行过滤不满足where条件不参与分组而having是分组之后对结果进行过滤-判断条件不同: where不能对聚合函数进行判断而having 可以-执行顺序: where聚合函数havingV.排序查询语法:select 字段列表 from 表名 order by 字段一 排序方式1,字段2,排序方式2ASC升序默认值 DESC降序注意: 如果是多字段排序当第一个字段值相同时才会根据第二个字段进行排序。VI.分页查询语法:select 字段列表 from 表名 limit 起始索引,查询记录数;注意起始索引从 0 开始起始索引 查询页码 - 1* 每页显示记录数。分页查询是数据库的方言不同的数据库有不同的实现MySQL 中是LIMIT。如果查询的是第一页数据起始索引可以省略直接简写为 limit 10。附DQL语句的执行顺序2.2.4 DCL语句DCL - 管理用户查询用户USE mysql; SELECT * FROM user;创建用户CREATE USER 用户名主机名 IDENTIFIED BY 密码;修改用户密码ALTER USER 用户名主机名 IDENTIFIED WITH mysql_native_password BY 新密码;删除用户DROP USER 用户名主机名;Mysql常见权限语法-- 查询权限 SHOW GRANTS FOR 用户名主机名; -- 授予权限 GRANT 权限列表 ON 数据库名.表名 TO 用户名主机名; -- 撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM 用户名主机名;三.函数定义:是指一段可以直接被另一段程序直接调用的程序或代码下面介绍几种函数的类型这里只介绍一些常用的函数3.1 字符串函数3.2 数值函数3.3 日期函数3.4 流程函数eg: 流程函数的两种不同写法四.约束定义: 约束是作用于表中字段的规则 用于限制存储在表中的数据目的保证数据库中数据的正确性 有效性和完整性4.1 类别4.2 sql语句添加外键方式一创建表时添加CREATE TABLE 表名( 字段名 数据类型, ... [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名) );方式二修改表时添加ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);删除外键ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;在删除/更新对应记录时no action 和 restrict是默认的行为语法ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;五.多表查询多表查询在实际开发中用的较多复杂业务可以通过sql代码来实现5.1 多表关系分为一对一一对多多对多。一对一-在任意一方添加外键 关联另一方的主键 并设置外键属性为unique并对大表进行拆分一对多-在多的一方创建外键。eg: 员工(创建外键)-部门多对多-建立第三中间表 中间表至少包含两个外键 分别关联两张表的主键5.2 内连接I.隐式内连接语法SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ...;II. 显示内连接语法SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ...;5.3 外连接I.左外连接相当于查询表 1 (左表) 的所有数据包含表 1 和表 2 交集部分的数据。语法SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;II.右外连接语法SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ...;left outer join 和 left join实现的效果一样可以选择添加outer强调是一个外连接5.4 自连接查询5.5 联合查询联合查询同样作用于开发中参考其他博客的讲解union 和union all 存在性能方面的差异。详细请参考https://blog.csdn.net/2401_88762662/article/details/150379861?fromshareblogdetailsharetypeblogdetailsharerId150379861sharereferPCsharesource2301_80420062sharefromfrom_linkUNION:1.执行所有独立的SELECT查询。2.将结果集放入一个临时表。3.对这个临时表进行DISTINCT 操作去重。去重通常意味着排序 (Using filesort) 或构建哈希表 (Using temporary Using filesort 或其他算法)这是一个昂贵的操作尤其当结果集很大时。4.返回去重后的结果。5.开销: 额外内存/磁盘空间 (临时表)高 CPU (排序/哈希计算)高 I/O。、UNION ALL:1.执行所有独立的SELECT查询。2.简单地将所有结果追加在一起。3.返回合并后的结果。4.开销: 几乎只有各个独立查询的开销之和。没有额外的去重成本。所以当业务允许的情况下尽量使用union all代替union来提升查询的性能。5.6 子查询定义SQL 语句中嵌套 SELECT 语句称为嵌套查询又称子查询。语法SELECT * FROM t1 WHERE column1 (SELECT column1 FROM t2);子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 的任何一个。I.分类(按子查询结果)标量子查询子查询结果为单个值列子查询子查询结果为一列行子查询子查询结果为一行表子查询子查询结果为多行多列||. 分类(按子查询位置)WHERE 之后FROM 之后SELECT 之后5.6.1 标量子查询子查询返回的结果只有一条5.6.2 列子查询子查询返回的结果是一列(可以是多行)这种查询称为列子查询in操作符all操作符Some操作符Any操作符实现效果同some5.6.3 行子查询各操作符含义及其作用5.6.4 表子查询解读: 将a这部分查询的数据作为临时表 并且由于其中数据存在Null值 使用左外连接将临时表的数据全部使用与其他表关联核心是为了保留所有符合入职日期条件的员工数据哪怕该员工没有分配部门dept_id 为 NULL 或不存在对应部门记录。六.事务定义一组操作的结合他是一个不可分割的单位事务会把所有操作作为一个整体一起向系统提交或撤销操作请求即这些请求要么一起成功要么一起失败。官方的解释事务是一组 SQL 语句的执行单元这些语句作为一个整体执行要么全部成功提交commit要么全部失败回滚。6.1 事务操作方式一通过 autocommit 控制事务提交-- 查看 / 设置事务提交方式 SELECT autocommit; SET autocommit 0; -- 提交事务 COMMIT; -- 回滚事务 ROLLBACK;方式二显式开启事务-- 开启事务 START TRANSACTION 或 BEGIN; -- 提交事务 COMMIT; -- 回滚事务 ROLLBACK;6.2 事务的四大特性6.3 事务的并发问题脏读幻读不可重复读脏读可以读取未提交的数据。RC 要求解决脏读不可重复读同一个事务中多次执行同一个select, 读取到的数据发生了改变(被其它事务update并且提交)可重复读同一个事务中多次执行同一个select, 读取到的数据没有发生改变(一般使用MVCC实现)RR各级级别要求达到可重复读的标准幻读同一个事务中多次执行同一个select, 读取到的数据行发生改变。也就是行数减少或者增加了(被其它事务delete/insert并且提交)。SERIALIZABLE要求解决幻读问题这里不做过多解释 感兴趣自己查6.4 事务的隔离级别Mysql默认采用RR的隔离级别Oracle仅仅实现了RC 和 SERIALIZABLE隔离级别。默认采用RC隔离级别解决了脏读。但是允许不可重复读和幻读。其SERIALIZABLE则解决了脏读、不可重复读、幻读。对隔离级别底层感兴趣的可以参考https://www.cnblogs.com/digdeep/p/4968453.html个人觉得蛮通俗易懂的