前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL | 基础语法介绍

MySQL | 基础语法介绍

作者头像
Java小技巧
发布2022-05-23 13:11:17
8570
发布2022-05-23 13:11:17
举报
文章被收录于专栏:Java小技巧Java小技巧

一、SQL基础

数据定义语言(DDL):对数据库、表、字段的操作

数据操作语言(DML):对数据的操作

数据查询语言(DQL):数据查询

DDL

1、对数据库的操作

代码语言:javascript
复制
(1)show databases;显示所有数据库
(2)show database();查询当前数据库
(3)create database [if not exists] 数据库名 [default charset 字符集][collate 排序规则];创建数据库,utf8存储一个字符占3个字节,utf8mb4存储一个字符占4个字节
(4)drop database [if exists] 数据库名;删除数据库
(5)use 数据库名;进入数据库

2、对表和字段的操作

代码语言:javascript
复制
(1)show tables;查询当前数据库所有表
(2)desc 表名;查询表结构
(3)show create table 表名;查询指定表的建表语句
(4)CREATE TABLE table_name (
   字段1 字段1类型 [comment 字段1注释],
   字段2 字段2类型 [comment 字段2注释],
   ....
   字段n 字段n类型 [comment 字段n注释]
   )[comment 表注释];建表语句,最后一个字段后面没有逗号
(5)CREATE TABLE new_table_name AS
SELECT column1, column2,...
FROM existing_table_name
WHERE ....; 使用另一个表创建
(6)ALTER TABLE 表名 ADD 字段名 类型 [comment 注释] [约束]; 添加字段
(7)ALTER TABLE 表名 MODIFY 字段名 新数据类型; 修改字段类型
(8)ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型; 修改字段名和字段类型
(9)ALTER TABLE 表名 DROP COLUMN 字段名; 删除字段
(10)ALTER TABLE 表名 RENAME TO 新表名; 修改表名
(11)DROP table [if exists] 表名;删除表
(12)truncate table 表名;删除指定表并重新创建该表

3、数据库备份

代码语言:javascript
复制
(1)BACKUP DATABASE 数据库名 TO DISK = 'filepath';
(2)BACKUP DATABASE 数据库名 TO DISK = 'filepath' WITH DIFFERENTIAL; 差异备份仅备份自上次完全数据库备份以来已更改的数据库部分

DML

1、添加数据

代码语言:javascript
复制
(1)INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 指定列名和要插入的值
(2)INSERT INTO table_name VALUES (value1, value2, value3, ...); 所有列添加值
(3)INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...),(value1, value2, value3, ...),(value1, value2, value3, ...)...;批量添加
注:插入的时候,字符串和日期类型应该放在引号中

2、修改数据

代码语言:javascript
复制
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

3、删除数据

代码语言:javascript
复制
DELETE FROM table_name WHERE condition;

DQL

1、基本查询

代码语言:javascript
复制
(1)SELECT column1 [as 别名1], column2 [as 别名2], ... FROM table_name; as可省略
(2)SELECT DISTINCT column1, column2, ... FROM table_name; 去除重复记录

2、条件查询

代码语言:javascript
复制
(1)SELECT column1, column2, ... FROM table_name WHERE condition;
(2)SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND condition3 ...; 如果第一个条件与第二个条件都为TRUE,则AND运算符显示一条记录
(3)SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR condition3 ...; 如果第一个条件与第二个条件任何一个条件为TRUE,则OR运算符显示一条记录
(4)SELECT column1, column2, ... FROM table_name WHERE NOT condition; 如果条件前加NOT,则将不显示记录
(5)SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2; BETWEEN运算符是包含的:包括开始值和结束值
(6)SELECT column_name(s) FROM table_name WHERE column_name like value1;
下划线(_)代表单个字符,百分号(%)代表任意个字符

3、聚合函数:作用于某一列数据

代码语言:javascript
复制
count、max、min、avg、sum:null值不参与聚合函数的运算,count(*)代表表中有多少行

4、分组查询

代码语言:javascript
复制
(1)select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组过滤条件];
注:where和having的区别:where是分组之前的过滤,不满足where条件则不参与分组,having是分组之后对结果进行过滤,having可以使用聚合函数,where不可以

5、排序查询

代码语言:javascript
复制
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|DESC; 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

6、分页查询

代码语言:javascript
复制
(1)select 字段列表 from 表名 limit 起始索引,查询记录数; 第一页数据,起始索引可省略

二、函数

字符串函数、数值函数、日期函数、流程函数

1、字符串函数

代码语言:javascript
复制
(1)concat:字符串拼接
(2)lower:将字符串转换为小写
(3)upper:将字符串转换为大写
(4)lpad:左边用另一个字符串填充一个字符串到一定长度
(5)rpad:右边用另一个字符串填充一个字符串到一定长度
(6)trim:去除字符串首尾空格
(7)substring:从字符串中提取子字符串(从任何位置开始)

2、数值函数

代码语言:javascript
复制
(1)ceil:向上取整
(2)floor:向下取整
(3)mod:取余
(4)rand():返回0-1内的随机数,包括0,不包括1
(5)round(x,y):求x的四舍五入值,保留y位小数
(6)format:将数字格式化为“#,###,###。##”等格式,舍入到指定的小数位数

3、日期函数

代码语言:javascript
复制
(1)curdate();当前日期
(2)curtime();当前时间
(3)now();当前日期+时间
(4)year(date);指定date的年份
(5)month(date);指定date的月份
(6)day(date);指定date的日
(7)date_add(date,interval expr type);一个时间上加上指定的时间
(8)datediff(date1,date2);date1和date2相差多少天

4、流程函数

代码语言:javascript
复制
(1)if(value,t,f);如果value为true,则返回t,否则返回f
(2)ifNull(value1,value2);如果value1不为空,返回value1,否则返回value2
(3)case when [val1] then [res1] ... else [default] end;如果val1为true,返回res1,否则返回default默认值
(4)case [expr] when [val1] then [res1] ... else [default] end;如果expr的值等于val1,返回res1,否则返回default默认值

三、约束

SQL约束

代码语言:javascript
复制
(1)NOT NULL:约束强制列不接受NULL值(2)UNIQUE:约束确保列中的所有值都不同
(3)PRIMARY KEY:约束唯一标识表中的每条记录,主键必须包含UNIQUE值,并且不能包含NULL值,一个表只能有一个主键
(4)FOREIGN KEY 是用于将两个表链接在一起的键
(5)CHECK:约束用于限制列中的值范围
(6)DEFAULT:约束用于为列提供默认值
(7)CREATE INDEX index_name ON table_name (column1, column2, ...);用于创建索引
(8)ALTER TABLE table_name DROP INDEX index_name;删除表中的索引
(9)AUTO INCREMENT:在插入表新记录中时自动生成唯一编号

四、多表查询

多表查询

代码语言:javascript
复制
(1)INNER JOIN:选择两个表中具有匹配值的记录
(2)SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name; LEFT JOIN关键字返回左表(table1)中的所有记录,以及右表(table2)中的匹配记录。如果没有匹配,则结果从右侧为NULL
(3)RIGHT JOIN:同上相反
(4)SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2; UNION运算符用于组合两个或多个SELECT语句的结果集,每个SELECT语句必须具有相同的列数及顺序,列还必须具有类似的数据类型,union查询结果会去重,union all不会

五、存储过程

存储过程

代码语言:javascript
复制
(1)CREATE PROCEDURE procedure_name [@参数1 参数类型,@参数2 参数类型]
AS
 sql_statement
GO; 
执行存储过程
EXEC procedure_name [参数1值,参数2值];

六、存储引擎

存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,不是基于数据库,存储引擎可被称为表类型,默认InnoDB。

代码语言:javascript
复制
show engines;查看都有哪些存储引擎
存储引擎特点
1、InnoDB:支持事务;行级锁;支持外键foreign key约束,保证数据的完整性和正确性
2、MyISAM:不支持事务、不支持外键;支持表锁;不支持行锁;访问速度快(实际中被MongoDB取代)
3、Memory:存储在内存中,受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。默认Hash索引(实际中被Redis取代)

七、索引

帮助mysql高效获取数据的数据结构(有序)。无索引的时候需要进行全表扫描

索引结构:

Mysql的索引是在存储引擎层实现的,不同的存储引擎有不同的结构。常用的Btree索引、B+tree索引和Hash索引。详解:https://blog.csdn.net/weixin_46451496/article/details/105136122

索引分类:

聚集索引、二级索引。聚集索引一般为主键id,id直接对应一行数据;二级索引指向id,需要将id通过聚集索引才可以得到一行数据(此操作称之为回表操作)。

索引语法:

代码语言:javascript
复制
CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name;创建索引,UNIQUE要求该列没有重复数据
SHOW INDEX FROM table_name;查看索引
DROP INDEX index_name ON table_name;删除索引
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java小技巧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档