结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
数据库介绍
1.数据库的五个基本单位:
数据库服务器
数据库
数据表
数据字段
数据行
2.SQL语句按照其功能范围不同可分为3个类别:
数据定义语言(DDL
,Data Defintion Language)语句:数据定义语句,用于定义不同的数据段、数据库、表、列、索引等。常用的语句关键字包括create、drop、alter等。
数据操作语言(DML
, Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据的完整性。常用的语句关键字主要包括insert、delete、update和select等。
数据控制语言(DCL
, Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant、revoke等。
一、MySQL常用命令
1.数据库操作
在命令行下,通过以下命可以连接到数据库服务器:
mysql -h localhost -u root -p
//参数 说明
//-h 表示数据库连接地址,连接本机可不填
//-u 表示要登录的用户
//-p 表示使用密码登录
创建数据库
create database 数据库名;
查看数据库
show databases;
选中数据库
use 库名;
查看数据库中的表
show tables;
删除数据库
drop database 库名;
【注】数据库删除后,下面的所有数据都会全部删除,所以删除前一定要慎重并做好相应的备份。
2.数据表操作
创建表
create table 表名(字段名1 字段类型,….字段名n 字段类型n);
create table user(username varchar(20),password varchar(32));
//int,代表整型。float,代表浮点。char和varchar代表字符串。
查看表字段结构信息
desc 表名;
查看表的创建语句
show create table 表名 \G;
//还可以看到表的 engine(存储引擎) 和 charset(字符集)等信息。
//“\G”选项的含义是使得记录能够按照字段竖着排列,对于内 容比较长的记录更易于显示。
删除表
drop table 表名;
指定表引擎和字符集
ENGINE=InnoDB
//指定引擎
DEFAULT CHARSET=utf8
//指定表默认字符集
3.数据字段操作
修改表字段类型 modify
alter table 表名 modify 字段名 varchar(20);
alter table user modify username varchar(20);
//将user表的username的类型改为varchar(20)
增加表字段
alter table 表名 add column 字段名 类型;
增加字段时控制字段顺序
ALTER TABLE 表名 ADD 字段名 字段类型 AFTER 字段名;
//在第一个增加或者在指字字段之后增加
ALTER TABLE 表名 ADD 字段名 字段类型;
删除表字段
alter table 表名 drop column 字段名;
表字段改名
alter table 表名 change 字段原名 字段新名 字段类型;
修改表字段排列顺序、使用modify调整顺序
alter table user modify em varchar(60) first
修改表名
alter table 旧表名 rename 新的表名;
4.补充
在mysql命令中使用以下命令可以查看到当前服务器支持的所有引擎。
show engines;
普通索引
alter table 表 add index(字段)
ALTER TABLE money ADD INDEX(username);
//为money表的username字段增加索引
唯一索引
alter table 表 add UNIQUE(字段)
ALTER TABLE money ADD UNIQUE(email);
//为money表的email字段增加唯一索引
全文索引
alter table 表 add FULLTEXT(字段)
ALTER TABLE money ADD FULLTEXT(content);
//为money表的content字段增加全文索引
主键索引
alter table 表 add PRIMARY KEY(字段)
ALTER TABLE money ADD PRIMARY KEY(id);
//为money表的id字段增加主键索引
二、增删改查
1.插入记录
插入基本语法一
insert into 表 values(值1,值2,值n);
//表中有多少个字段就必须要插入多少个值。一个不能多,一个也不能少。若有默认值,不想传,可以写上null。
插入基本语法二
insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
//除非有必填字段必须要写入值外。如果有默认值的不想写可以忽略不写。mysql会自动补主默认值。
2.查询记录
基础查询
select * from 表;
//查询money表中所有字段中的所有结果
指定字段查询
select 字段 from 表;
查询单个字段不重复记录 distinct
select distinct 字段 from 表;
select distinct age deptno from money;
//查询money表中年龄唯一的所有结果
条件查询 where
select 字段 from 表 where 条件;
结果集排序
select 字段 from 表 order by 字段 排序关键词
//排序用到的关键词:
//关键词 说明
//asc 升序排列,从小到大(默认)
//desc 降序排列,从大到小
多字段排序
select 字段 from 表 order by 字段1 排序关键词,… …字段n desc
//order by 后面可以跟多个不同的字段排序,并且排序字段的不同结果集的顺序也不同,如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序。
结果集限制
select 字段 from 表 limit 数量;
限制结果集并排序
select 字段 from 表 order by 字段 排序关键词 limit 数量
结果集区间选择
select 字段 from 表 limit 偏移量,数量
select id,username, balance from money limit 0,3;
//从第一条开始取三条记录
统计类函数使用
select 函数(字段) from 表
//统计类函数最常用的我们有四个:
//函数 说明
//sum 求和
//count 统计总数
//max 最大值
//min 最小值
//avg 平均值
分组 group by
select * from 表 group by 字段
在分组基础上进行统计
select * from 表 group by 字段 with rollup
//对于分组的数据进行统计后,再进行一次总数统计。
结果再过滤having
select * from 表 group by 字段 having 条件
//having 是筛选组 而where是筛选记录
表连接
当需要查询多个表中的字段时,就可以使用表连接来实现。表联接分为内连接和外连接。
内连接:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。
外连接:会选出其他不匹配的记录,分为外左联结和外右联结。
内连接
select 表1.字段 [as 别名],表n.字段 from 表1 [别名],表n where 条件;
select 表1.字段 [as 别名],表n.字段 from 表1 INNER JOIN 表n on 条件;
外连接
select 表1.字段 [as 别名],表n.字段 from 表1 LEFT JOIN 表n on 条件;
子查询
用于子查询的关键字包括in、not in、=、!=、exists、not exists等。
select 字段 from 表 where 字段 in(条件)
记录联合
使用 union 和 union all 关键字,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示。两者主要的区别是把结果直接合并在一起,而 union 是将 union all 后的结果进行一次distinct,去除重复记录后的结果。
select语句1 union[all] select语句2
3.更新记录
更新记录
update 表名 set 字段1=值1,字段2=值2,字段n=值n where 条件
同时对两个表进行更新
update 表1,表2 set 字段1=值1,字段2=值2,字段n=值n where 条件
4.删除记录
使用 delete 删除记录
delete from 表 [where 条件];
清空表记录
TRUNCATE TABLE 表名;
delete
和truncate
是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。
【注】删除时一定要记住加上where条件,不然会清空掉整个表的记录。
【注】删除重要数据前一定要备份!
DCL语句
创建库用户
grant 权限 on 库.表 to '用户'@'主机' identified by '密码';
//在grant后接all说明给予所有权限
//权限 on . 所明给予所有库所有表的操作权限
//主机里面若为%。任意来源的主机均可以使用这个用户来访问
删除权限
revoke 权限 on 库.表 from '用户'@'主机';
// 在revoke后接all说明删除所有权限
//权限 on . 所明给予所有库所有表的操作权限
//主机里面若为%。任意来源的主机均可以使用这个用户来访问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!