【MySQL】SQL 基础
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《【MySQL】SQL 基础》,聊聊MySQL、数据库,我们一起来看看吧!
SQL 简介
SQL 是 Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言。
SQL 入门
这里主要介绍标准 SQL 的基本语法和 MySQL 的部分拓展语法
SQL 分类
SQL语言主要可以划分为以下 3 个类别:
- DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括 create、drop、alter 等。
- DML(Data manipulation Languages)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字主要包括 insert、delete、update、select 等。
- DCL(Data Control Languages)语句:数据控制语言,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。
DDL 语句
DDL 是数据定义语言的缩写,简单来说,就是对数据库内部的对象进行创建、删除、修改等操作的语言。它和 DML 语句的最大区别是 DML 只是对表内部数据操作,而不涉及表的定义、结构的修改,更不会涉及其它对象。DDL 语句更多地由数据库管理员使用,开发人员一般很少使用。
查看当前数据库
select database();
创建数据库
create database test1;
如果想要查看系统中有哪些数据库,可以用如下命令:
show databases;
可以用如下命令选择要操作的数据库:
use test1;
删除数据库
drop database test1;
创建表
create table tablename (
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
...
column_name_n column_type_n constraints
)因为 MySQL 的表名是以目录的形式存在于磁盘上,所以表名的字符可以用任何目录名允许的字符。
column_name 是列的名字;column_type 是列的数据类型;constraints 是这个列的约束条件。
查看表的定义
desc tablename;
查看创建表的 SQL 语句
show create table tablename;
删除表
drop table tablename;
修改表
修改表类型
alter table tablename modify column_col datatype [first|after col_name];
增加表字段
alter table tablename add [column] column_col datatype [first|after col_name];
删除表字段
alter table tablename drop [column] col_name;
字段改名
alter table tablename change [column] old_col_name column_definition datatype [first|after column_name];
修改字段排列顺序
字段增加和修改语法(add/change/modify)中,都有一个可选项
alter table tablename rename [to] new_tablename;
DML 语句
DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作。
插入
insert into tablename(field1,field2,...,fieldn) values(value1,value2,...,valuen);
也可以不指定字段名称,但是 values 后面的顺序应该和字段的排列顺序一致。
也可以一次性插入多条记录:
insert into tablename(field1,field2,...,fieldn) values (record1_value1,record1_value2,...,record1_valuen), (record2_value1,record2_value2,...,record2_valuen), ... (recordn_value1,recordn_value2,...,recordn_valuen);
更新
update tablename set field1=value1,field2=value2,...,fieldn=valuen [where condition];
在 MySQL 中,update 命令可以同时更新多个表中数据:
update t1,t2,...tn set t1.field=expr1,tn.fieldn=exprn [where condition];
删除
delete from tablename [where condition];
在 MySQL 中可以一次删除多个表的数据:
delete t1,t2,...tn from t1,t2,...,tn [where condition];
如果 from 后面的表名用别名,则 delete 后面也要用相应的表明。
查询记录
select * from tablename [where condition];
查询不重复的记录
select distinct col_name from tablename;
排序
select * from tablename [where condition] [order by field1 [desc\asc], field2 [desc\asc],...,fieldn [desc\asc]];
其中,desc 和 asc 是排序顺序关键字,desc 表示按照字段进行降序排序,asc 则表示升序排序,如果不写此关键字默认是升序排序。
如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,依次类推。如果只有一个排序字段,则这些字段相同的记录将会无序排列。
限制行数
select * from tablename [limit offset_start,row_count];
其中,offset_start 表示记录的起始偏移量,row_count 表示显示的行数。
在默认情况下,起始偏移量为0,只需要写记录行数就可以,这是,实际显示的就是前 n 条记录。
limit 属于 MySQL 拓展 SQL92 后的语法,在其他数据库上并不能适应。
聚合
select [field1,field2,fieldn] fun_name from tablename [where where_condition] [group by field1,field2,...fieldn] [with rollup] [having where_condition];
其中:
fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。
group by 关键字表示要进行分类聚合的字段,比如要按照班级统计学生平均分,班级就应该写在 group by 后面。
with rollup 是可选语法,表明是否对分类聚合后的结果进行再汇总。
having 关键字表示对分类后的结果再进行条件的过滤。
having 和 where 的区别在于,having 是对聚合后的结果就行条件的过滤,而 where 是在聚合前就对记录进行过滤,如果逻辑允许,尽可能用 where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤
表连接
当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。
从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选出其它不匹配的记录。
外连接又分为左连接和右连接,具体定义如下:
- 左连接(left join):包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
- 右连接(right join):包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
内连接有两种方式:
select t1.*,t2.* from tablename1 t1,tablename2 t2 where t1.field1 = t2.field2; select t1.*,t2.* from tablename1 t1 join tablename2 t2 where t1.field1 = t2.field2;
子查询
某些情况下,当进行查询的时候,需要的条件是另外一个 select 语句的结果,这个时候,就要用到子查询。用于子查询的关键字主要包括
select * from t1 union\union all select * from t2 ... union\union all select * from tn;
需要注意的是,union\union all 之间的查询结果列数量需要相同。
union 和 union all 的主要区别是 union all 是把结果集直接合并在一起,而 union 是将 union all 后的结果进行一次 distinct,去除重复记录后的结果。
DCL 语句
DCL 语句主要是用来管理系统中的对象权限时使用。
创建用户
create user 'username'@'hostIP' identified by 'password';
hostIP 用于指定该用户只能在哪个 ip 登录,如果要想在任意 ip 登录的话,将 hostIP 改为
grant privileges on database.tablename to username@hostIP;
privileges 指操作权限,常用有以下几种:
- select:查询
- insert:插入
- update:更新
- delete:删除
- create:创建表
- alter:修改表结构
- drop:删除表
- index:操作索引
- create view:创建视图
- show view:查看视图
- create routine:创建存储过程、函数
- alter routine:修改存储过程、函数
- execute routine:执行存储过程、函数
如果要赋予多个权限,可以用逗号
,隔开,如果要赋予所有权限,可以用
all privileges代替,其中 privileges 可以省略。
MySQL 其他内容可以参考MySQL目录
以上就是《【MySQL】SQL 基础》的详细内容,更多关于mysql的资料请关注golang学习网公众号!
-
- 数据库 · MySQL | 1天前 |
- MySQL数值函数大全及使用技巧
- 117浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- 三种登录MySQL方法详解
- 411浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL数据备份方法与工具推荐
- 420浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL数据备份方法与工具推荐
- 264浏览 收藏
-
- 数据库 · MySQL | 5天前 |
- MySQL索引的作用是什么?
- 266浏览 收藏
-
- 数据库 · MySQL | 6天前 |
- MySQL排序原理与实战应用
- 392浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQLwhere条件查询技巧
- 333浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用数据类型有哪些?怎么选更合适?
- 234浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用命令大全管理员必学30条
- 448浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL高效批量插入数据方法大全
- 416浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL性能优化技巧大全
- 225浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL数据备份4种方法保障安全
- 145浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3179次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3390次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3419次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4525次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3799次使用
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览

Mysql-其他篇
