当前位置:首页 > 文章列表 > 数据库 > MySQL > 【MySQL】SQL 基础

【MySQL】SQL 基础

来源:SegmentFault 2023-01-11 16:59:07 0浏览 收藏

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学习网公众号!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
第35问:InnoDB 刷脏页慢,会影响我的业务么?
下一篇
第35问:InnoDB 刷脏页慢,会影响我的业务么?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    12次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    38次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码