【MySQL】SQL 基础
来源:SegmentFault
时间:2023-01-11 16:59:07 195浏览 收藏
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学习网公众号!
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
-
481 收藏
-
284 收藏
-
316 收藏
-
437 收藏
-
412 收藏
-
364 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 标致的冬日
- 真优秀,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢楼主分享技术文章!
- 2023-04-08 14:27:50
-
- 雪白的水蜜桃
- 这篇技术贴太及时了,好细啊,感谢大佬分享,收藏了,关注大佬了!希望大佬能多写数据库相关的文章。
- 2023-03-17 23:00:46
-
- 害怕的老虎
- 很好,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢up主分享文章内容!
- 2023-03-03 10:16:25
-
- 虚幻的丝袜
- 好细啊,已收藏,感谢博主的这篇文章,我会继续支持!
- 2023-01-23 16:11:42
-
- 开朗的镜子
- 这篇文章真是及时雨啊,好细啊,感谢大佬分享,已加入收藏夹了,关注师傅了!希望师傅能多写数据库相关的文章。
- 2023-01-22 13:22:21
-
- 虚幻的樱桃
- 感谢大佬分享,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢老哥分享技术文章!
- 2023-01-17 00:54:46
-
- 落寞的白猫
- 这篇博文太及时了,细节满满,太给力了,已加入收藏夹了,关注楼主了!希望楼主能多写数据库相关的文章。
- 2023-01-16 20:55:29