mysql数据库详解(一):sql语句

go语言通过database/sql使用mysql数据库,以及以及第三方sqlx扩展 go语言通过database/sql使用mysql数据库,以及以及第三方sqlx扩展 mysql支持插件式的存储引擎, 常见的存储引擎有:MyISAM,InnoDB MyISAM: 查询速度快 只支持表锁 不支持事务 InnoDB: 整体速度快 支持表锁和行锁 支持事务 事务:多个SQL操作为一个整体执行 事务特点:ACID 原子性 一致性 隔离性 持久性 索引... 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

一.语句分类

1.DDL(Data Definition Languages)

数据库的定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增删改表的结构。

2.DML(Data Manipulation Language)

数据库的操作语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。增删改表的数据。

3.TCL(Transaction Control Language)

数据库的事务控制语句,用于控制事务,常用的关键字有:COMMIT,ROLLBACK,SAVEPOINT,TRANSCATION等。

二、各个关键字详解

DDL语句

1.创建表:create table 表名

CREATE TABLE tb_test_user (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30) DEFAULT NULL,
sex varchar(4) DEFAULT ‘F’ COMMENT ‘F:女 M:男’,
age int(5) DEFAULT NULL,
gmt_create timestamp NULL DEFAULT NULL,
gmt_modified timestamp NULL DEFAULT NULL,
PRIMARY KEY (id)
)

字段的约束有:
1.NOT NULL 非空
2.NULL 可以为NULL
3.DEFAULT 默认值,如果不设置的话默认为NULL
4. AUTO_INCREMENT自动递增
5. COMMENT 注释
6. PRIMARY KEY 主键
7. unique key 唯一键
8. unsigned 无符号类型,即>1
在这里插入图片描述

2.修改表

1.添加字段
alter table 表名 add 字段名 类型 约束 after 列名 comment 注释
默认是添加到表的最后一列,如果是想在某一列后面,可以使用after关键字
alter table tb_test_user add phone varchar(11) NULL after age comment ‘手机号’
在这里插入图片描述
2.修改字段
alter table tb_test_user modify name varchar(50)
在这里插入图片描述
3.删除字段
alter table tb_test_user drop phone
在这里插入图片描述
4.重新命名表名
alter table tb_test_user rename to tb_test_user_rename
在这里插入图片描述
5.添加索引
5.1主键索引
alter table tb_test_user_rename add PRIMARY KEY (列名)
5.2 唯一索引
alter table tb_test_user_rename add UNIQUE (列名)
5.3 普通索引,可以创建联合索引
alter table tb_test_user_rename add index 索引名 (列名…)

3.删除表

1.删除表数据及表结构
drop table if exists 表名
2.只是删除表数据,表结构不删除
有两种方式:delete和truncate
两者的区别在于truncate不仅会删除数据,还会把自动递增字段初始化到0
delete from tb_user_test_rename
TRUNCATE table tb_test_user_rename

4.表注释

建表的时候给表加注释
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT COMMENT ‘学号’,
name VARCHAR(200) COMMENT ‘姓名’,
age int COMMENT ‘年龄’
) COMMENT=‘学生信息’

如果已经建好表再给表加注释
alter table 表名 comment 注释

DML语句

1.insert添加记录 insert into 表名(字段名…) values(值…)

如果所有字段都会赋值,则字段名可以省略,主键为自动递增时,可以写null,如果字段有默认值可以写default。
添加一条数据:insert into tb_test_user values(null,“里斯”,‘M’,25,NOW(),NOW())
批量添加数据:insert into tb_test_user values(null,“王五”,‘M’,28,NOW(),NOW()),(null,“白云”,default,28,NOW(),NOW())…
在这里插入图片描述

2.update修改记录 update 表名 set 字段名=值 where 条件

如果更新多个字段时,用逗号隔开
update tb_test_user set name = “测试修改”,age = 30 where id = 1
在这里插入图片描述

3.delete删除记录 delete from 表名 where 条件

delete from tb_test_user where id = 1
在这里插入图片描述

4.复杂查询

其实mysql的DML语句比较难的就是查询,修改和删除比较简单,查询往往会配合许多其他的关键字来搜索出想要的数据。

4.1 联表查询

1.内连接、左连接、右连接、全连接
内连接:inner join on where,将涉及到的表根据外建连接起来,然后根据条件过滤出想要的数据。
左连接:left join on where,将涉及到的表以左表为基础表,根据外建连接起来,即就算左表的某条数据跟右表没有连接起来也会显示左表的数据,右表的数据显示null
右连接:同左连接一样,只是基础表是右表
全连接:左右两张表都是基础表,所有的数据全连接起来,但mysql不支持

举例:现在有三张表,学生表,课程表,选课表
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

现在查询以下数据:
1.有选课的学生姓名和所选课程:

select t.name,c.course from tb_test_student as t 
inner join tb_test_select_course as s on t.student_id = s.student_id 
inner join tb_test_course as c on s.course_id = c.course_id

在这里插入图片描述
inner join 是把满足条件的交集查询出来。

2.查询所有的学生,如果有选课的把选课信息也显示出来
select t.name,c.course from tb_test_student as t
left join tb_test_select_course as s on t.student_id = s.student_id
left join tb_test_course as c on s.course_id = c.course_id
在这里插入图片描述

3.查询所有的课程,如果有学生选则把学生姓名显示出来

select t.name,c.course from  tb_test_course as c
left join tb_test_select_course as s on  s.course_id = c.course_id
left join tb_test_student as t on t.student_id = s.student_id

在这里插入图片描述
左右连接其实是可以互换的,把涉及的表做并集

4.2 分组查询与聚合函数

分组查询一般来讲是为了统计信息,与聚合函数一起使用,可以更方便快捷的获取到想要的数据。
语法:group by 字段 注意group by后面的字段一定也要在select 后面跟上

聚合函数

1.avg(column):求平均数
2.max(column):求最大值
3.min(column):求最小值
4.sum(column):求和
5.count(column):求和
6.group_concat(column):连接字符串,这个是最近发现的一个很好用的函数
注意:
1.其他的聚合函数不会对null值进行计算,count会。
2.count如果没有查询出结果,返回0,sum返回null。

举例:
1.用刚才上面的一个例子,查询所有的学生,如果有选课的把选课信息也显示出来,如果一个学生选了多个课程,则合并显示,一个学生只有一条记录

select t.name,group_concat(c.course) from  tb_test_student as t 
left join tb_test_select_course as s on t.student_id = s.student_id 
left join tb_test_course as c on s.course_id = c.course_id
group by t.name

在这里插入图片描述
新添加一张成绩表,在选课表里多添加几条数据:
在这里插入图片描述
在这里插入图片描述
2.查询所有学生的最低分,没有选课的也要显示

select u.student_id,u.`name`,c.course,max(g.grade) from tb_test_student as u 
left join tb_test_grade as g on u.student_id= g.student_id
left join tb_test_course as c on c.course_id = g.course_id 
group by u.student_id

在这里插入图片描述
3.查询每个学生的平均分

select u.student_id,u.`name`,c.course,avg(g.grade) from tb_test_student as u 
left join tb_test_grade as g on u.student_id= g.student_id
left join tb_test_course as c on c.course_id = g.course_id 
group by u.student_id

在这里插入图片描述
4.查询班级一共有多少个学生

select count(id) from tb_test_student

在这里插入图片描述

having和where

1、 where和having都可以使用的场景:
select goods_price,goods_name from goods where goods_price > 100
select goods_price,goods_name from goods having goods_price > 100
上面的having可以用的前提是我已经筛选出了goods_price字段,在这种情况下和where的效果是等效的。
但是如果没有select goods_price 就会报错!!因为having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的。

2、只可以用where,不可以用having的情况:
select goods_name,goods_number from goods where goods_price > 100
select goods_name,goods_number from goods having goods_price > 100
解释:第二个sql语句报错,这是因为前面并没有筛选goods_price 造成的,更能看出having是针对结果集发挥作用。

3、只可以用having,不可以用where情况:
查询每种category_id商品的价格平均值,获取平均价格大于1000元的商品信息。
select category_id , avg(goods_price) as ag from goods group by category_id having ag > 1000
select category_id , avg(goods_price) as ag from goods where ag>1000 group by category_id
解释:第二个sql语句报错,这是因为from goods 这张数据表里面没有ag这个字段。

所以如果group by要对聚合的字段进行过滤就需要使用having

举例:
1.查询平均分大于80的学生

select u.student_id,u.`name`,c.course,avg(g.grade) as ag from tb_test_student as u 
left join tb_test_grade as g on u.student_id= g.student_id
left join tb_test_course as c on c.course_id = g.course_id 
group by u.student_id having ag>=80

在这里插入图片描述
上述语句如果把having换成where就会报错。

4.3 子查询

子查询其实还是查询语句,就是因为是在查询里嵌套查询,所以嵌套的查询被叫做子查询。
举例:
1.查询没有选课的学生姓名

 select `name` from tb_test_student where student_id not in 
 (select student_id from tb_test_select_course)

在这里插入图片描述

5.其他常用的关键字

1、DISTINCT column:去掉重复数据
2、ORDER BY DESC/AES column:根据字段排序,默认是升序,倒序使用DESC,多个字段排序使用逗号隔开。
3、BETWEEN … AND …:比较的时候使用
4、LIKE %param%:模糊查询
5、LIMIT x,y :分页查询

6.mysql的常用内置函数

1、ABS(X):返回结果的绝对值
2、CONCAT(s1,s2,…):将字符串合并为一个字符串
3、UPPER(s):将结果里的字符转为大写,LOWER(s):转为小写
4、TRIM(s):去掉头尾空格
5、REVERSE(s):将字符串倒序
6、CURDATE(),CURRENT_DATE():返回当前日期的年月日
7、CURTIME(),CURRENT_TIME():返回当前日期的时分秒
8、NOW():返回当前的日期,年月日 时分秒
9、IF(expr,v1,v2):根据表达式的结果,正确输出v1,错误输出v2
10、IFNULL(v1,v2):如果v1为null,输出v2,否则输出v1
11、
CASE
  WHEN e1
  THEN v1
  WHEN e2
  THEN e2
  …
  ELSE vn
END

CASE expr
  WHEN e1 THEN v1
  WHEN e1 THEN v1
  …
  ELSE vn
END

12、DATE_FORMAT(column,’%Y-%m-%d %H:%i:%s’):将日期转换为指定格式字符串

7.mysql的数据类型

1、字符型: char varchar text blob
char和varchar比较:
长度:char最大255,varchar最大65535。
效率:char效率高,varchar相对低。
空间:char定长,varchar长度可变动。

2、数值型
精确数值型: int,tinyint,smallint, mediumint,bigint,decimal(decimal无精度损失,所以为精确数值型,常用于金融系统中)
近似数值型:float,double
float和double只是数值范围的区别,即double表示的范围更大而已。

3、日期型:date(年月日),time(时分秒),datetime(年月日 时分秒),timestamp:自1970年到现在的秒数
4、NULL
5、内置类型:
ENUM,枚举,如定义性别 ENUM(‘F’,‘M’),只能是其中一个。
SET,集合,只能是集合内一个或几个值的组合。

STM32G0——USB虚拟串口 STM32G0用cubeMX配置实现USB虚拟串口 阅读详情

相关推荐

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

数据库视图、索引、存储过程、触发器简单创建

1、视图 1.1创建视图 1.2修改视图 1.3创建复杂视图 1.4删除视图 #​视图示例 2、索引 2.1直接创建索引 2.2有表创建索引 #索引示例 3、存储过程 #存储过程示例 4、触发器 #触发器示例

spring℡ 2882

树莓派4B安装 ubuntu20.04 & VNC远程桌面 & 安装ROS noetic

树莓派4B安装ubuntu20.04 & VNC远程桌面1、安装ubuntu方式1:下载Imager文件。方式2:下载镜像文件。2、查询树莓派 IP 地址3、使用ssh远程登录树莓派4、更新源地址5、更新6、安装桌面环境7、允许root登陆8、登陆远程桌面9、设置中文 1、安装ubuntu 方式1:下载Imager文件。...

weixin_44415639的博客 2万+

数据库MySql的四种语句

MySQL四种基础语句

Myzhujie的博客 1525

华为od 面试八股文_JAVA语言_01_含答案

华为od 面试八股文_JAVA语言_01_含答案

MISAYAONE的博客 4296

华为od 面试八股文_数据库_01_含答案

华为od 面试八股文_数据库_01_含答案

MISAYAONE的博客 2160

如何使用sql语句 修改MySQL表格的字段长度

MySQL是一种管理大量数据的关系型数据库管理系统。在MySQL中,表格的字段长度在表格被建立后是不可修改的,但是,可以通过一些操作在不改变数据的情况下修改字段长度。本文将提供一些有用的方法来修改MySQL表格的字段长度。

qq_39951524的博客 4069

一文掌握 Playwright 的详细使用

Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。

数据知道的博客 1万+

mysql 更改 字段长度

sql。

qq_33192454的博客 6247

OpenHarmony可信执行环境:TEE模块源码分析与实现原理

TEE(Trusted Execution Environment)是OpenHarmony系统中的安全执行环境,用于提供隔离的安全执行环境,保护敏感数据和操作。OpenHarmony的TEE模块基于OpenTrustee实现,采用微内核架构,为系统提供可信执行环境支持。OpenHarmony TEE模块是一个复杂的安全系统,通过提供隔离的执行环境保护敏感数据和操作。

m0_67505153的博客 548

Qt入门教程【Core篇】singal and slot信号与槽

Qt中信号与槽singal and slot

小鱼酱的博客 2448

mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿。这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现。 1.修改字段的长度 语法: ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度) 例子: 将字段的长度由10改为20 ALTER TABLE attence MODI.

gb4215287的博客 8万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL夯实基础2: 使用SQL语句操作MySQL数据库DATABASE

数据库可以看作是一个专门存储数据对象的容器。这里的数据对象包括表、视图、触发器、存储过程等,其中表是最基本的数据对象。5 删除数据库,其中的数据同步被删除(单机用户除外)1 创建数据库, 并指定数据库字符集和校对规则。3 查看当前可用的所有数据库列表 (复数s)存储数据库相关的信息的系统数据库,如。2 修改数据库的字符集及其校对规则。等,否则MySQL将不能正常工作。4 选择指定的数据库 【常用】

YunYingLiang的博客 342

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

db_mysql.sql_go操作database/sql的mysql相关

go操作database/sql的mysql相关下载依赖go get -u github.com/go-sql-driver/mysql事例package mainimport ("database/sql""fmt")import _ "github.com/go-sql-driver/mysql" // 匿名导入,只会执行mysql包中的init()方法,可以不用在main中使用mysql包/...

weixin_34616304的博客 616

迁移Mysql数据库到Azure上的SQL database

Windows Azure上可以提供多种Database As a service。其中SQL database是由微软提供发布并提供支持的。Azure上的SQL database与传统的SQL server的区别在于,Azure提供了原生的数据库高可用(一主两备)、可在数秒内创建新的数据库实例、可快速进行数据库扩容、支持Federation、提供了全Web化的管理和设计界面、简便的备份恢复等。同

ShaunFang的专栏 4085

【Navicat系列】如何解决导入 MySQL 数据库sql文件失败报错 [Error] 1046 – No database selected 问题

摘要 在使用Navicat导入MySQL数据库时,遇到[Error] 1046 – No database selected错误,通常是由于未创建或选中目标数据库直接执行SQL脚本所致。本文提供三步解决方案: 创建目标数据库:确保数据库存在(如my_project_db),字符集设为utf8mb4。 选中数据库:在Navicat中高亮目标库后执行SQL文件。 脚本优化:在SQL文件开头添加USE db_name;语句以明确上下文。 此外,还涉及权限检查、字符集匹配及大文件导入优化等扩展建议,帮助彻底解决类似

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 6913

linq2db多数据库支持详解:如何无缝切换SQL Server、MySQL、PostgreSQL

linq2db是一个轻量级的ORM(对象关系映射)库,它可以使开发人员使用LINQ语法查询和操作关系数据库。适合用于.NET应用程序中的关系数据库访问,尤其是对于需要使用LINQ语法简化数据库操作的开发人员。 [![linq2db多数据库支持](https://raw.gitcode.com/gh_mirrors/li/linq2db/raw/80816cbf0164c6ebac2940eba6

gitblog_00863的博客 746

go操作mysql数据库(database/sql)

是Go语言中用于管理数据库连接池的核心类型。它通过复用连接、支持高并发和自动管理连接生命周期,显著提高了数据库操作的性能和效率。通过合理配置连接池参数,可以进一步优化应用与数据库的交互行为。: 设置连接的最大存活时间。超过该时间的连接会被关闭并重新创建。: 设置连接的最大空闲时间。超过该时间的空闲连接会被关闭。: 设置连接池中最大打开的连接数。: 设置连接池中最大空闲连接数。

2401_89221704的博客 531

windows azure mysql data disk_将Mysql数据库迁移到Windows Azure上的SQL database中

Windows Azure上可以提供多种Database As a service。其中SQL database是由微软提供发布并提供支持的。Azure上的SQL database与传统的SQL server的区别在于,Azure提供了原生的数据库高可用(一主两备)、可在数秒内创建新的数据库实例、可快速进行数据库扩Windows Azure上可以提供多种Database As a service。...

weixin_42364301的博客 212

sql操作mysql数据库_使用SQL操作MySQL数据库

从本节开始正式介绍各种SQL语句。本节介绍有关数据库级的SQL以及相关操作,查看、建立和删除等操作。 用SHOW显示已有的数据库 句法:SHOW DATABASES [LIKE wild] 如果使用LIKE wild部分,wild字符串可以是一个使用SQL的“%”和“_”通配符的字符串。 功能:S从本节开始正式介绍各种SQL语句。本节介绍有关数据库级的SQL以及相关操作,查看、建立和删除等操作。用...

weixin_28704565的博客 195

《Go 数据库编程开篇:彻底打通 database/sql 与 MySQL 驱动的连接池调优密码》

本篇博客作为 Go 数据库编程的开篇之作,由浅入深地拆解了 Go 语言原生 `database/sql` 与第三方 `github.com/go-sql-driver/mysql` 驱动包的高级协同机制。 文章首先从软件架构视角,揭秘了 Go 官方“接口与实现分离”的解耦哲学,硬核剖析了引入驱

jieyucx的博客 368

azure mysql 配置_Azure服务之Azure SQL数据库和Azure Database For MySQL

数据在企业生产经营中起着至关重要的作用,数据是企业,生产,经营,战略,等等,几乎所有的经营活动所依赖的,不可或缺的信息,是组织最具价值的资产之一。因此数据对用户的重要性不言而喻。选择存储数据的数据库就显得尤为重要,而在云计算飞速发展的今天,云端数据库也是百家齐放,这也让那些准备上云的企业一时间难以抉择,作为微软在浙江的重要合作伙伴,今天我们就来讲讲在微软云平台Azure上数据库的2个代表:SQL数...

weixin_42396760的博客 738

go database/sql sql-driver/mysql 操作

转载:https://www.cnblogs.com/jackylee92/p/6209596.html 这里使用的是github.com/Go-SQL-Driver/MySQL, 所以需要下载一个github.com/Go-SQL-Driver/MySQL 引入 database/sql 和github.com/Go-SQL-Driver/MySQL 这里实现了对数据库的 增、删、改...

Flyer的后花园 796

mysql createdatabase_SQL 创建数据库 CREATE DATABASE

SQL 创建数据库 CREATE DATABASE在本教程中,您将学习如何使用SQL在关系数据库管理系统(如MySQL,SQL Server等)中创建数据库。创建数据库在对数据进行任何处理之前,我们必须首先创建一个数据库。我们假设您已经拥有一个MySQL或SQL Server可供使用,并且拥有所有必需的特权,如果没有,请查看入门指南。SQL CREATE DATABASE语句用于创建数据库。语法创...

weixin_39954487的博客 1903

MySQL学习总结(一)DB、DMBS、SQL的含义/MySQL语法规范

f12格式化 字符和字符串都是单引号 别名有特殊符号加双引号

ZaynFox的博客 2463
上一篇: redis缓存数据库详解(六):高可用方案
下一篇: mysql数据库详解(二):mybatis与springboot整合
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值