Mysql——SQL语句

SQL语句在功能上主要分为四类:

  • DDL(Data Definition Languages,数据定义语言)主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。
  • DML(Data Manipulation Language,数据操纵语言)主要是对数据进行增加、删除、修改操作。
  • DQL(Data Query Language,数据查询语言)主要是对数据进行查询操作。
  • DCL(Data Control Language,数据控制语言)主要是用来设置/更改数据库用户权限。

一、DDL

1.1数据库基本操作

查询所有数据库

sql 复制代码
show databases;

查询当前正在操作的数据库

sql 复制代码
select database();

创建数据库(方括号内为可选参数)

sql 复制代码
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];

删除

sql 复制代码
drop database [if exists] 数据库名;

使用

sql 复制代码
use 数据库名;

注:

  • [ ]中的内容都是可选的
  • [if not exists ]:如果库不存在,则进行创建,否则,不进行操作

1.2实例

登录并查询所有数据库

创建并查询数据库

删除数据库

使用数据库

1.3表查询操作

表创建

sql 复制代码
create table 表名(
    字段1 字段1类型 [comment 字段1注释],
    字段2 字段2类型 [comment 字段2注释],
    字段3 字段3类型 [comment 字段3注释],
    ...
    字段n 字段n类型 [comment 字段n注释]
)[comment 表注释];

查询当前所有数据库所有表

sql 复制代码
show tables;

查询表结构

sql 复制代码
desc 表名

查询指定表的建表语句

sql 复制代码
show create table 表名;

1.4实例

1.5表修改操作

添加字段

sql 复制代码
alter table 表名 add 字段名 类型(长度) [comment 注释];

修改字段

修改数据类型

sql 复制代码
alter table 表名 modify 字段名 新数据类型(长度);

修改字段名和字段类型

sql 复制代码
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释];

修改表名

sql 复制代码
alter table 表名 rename to 新表名;

删除字段

sql 复制代码
alter table 表名 drop 字段名;

删除表

sql 复制代码
drop table [if exists] 表名;

删除指定表并重新创建该表

sql 复制代码
truncate table 表名;

1.6数值类型

数值类型

|-------------|--------|------------|
| 类型 | 大小 | 描述 |
| TINYINT | 1byte | 小整数值 |
| SMALLINT | 2bytes | 大整数值 |
| MEDIUMINT | 3bytes | 大整数值 |
| INT或INTEGER | 4bytes | 大整数值 |
| BIGINT | 8bytes | 极大整数值 |
| FLOAT | 4bytes | 单精度浮点数值 |
| DOUBLE | 8bytes | 双精度浮点数值 |
| DECIMAL | 依赖给定数值 | 小数值(精确定点数) |

字符串类型

|------------|-------------------|-----------------|
| 类型 | 大小 | 描述 |
| CHAR | 0-255bytes | 定长字符串 |
| VARCHAR | 0-65535bytes | 变长字符串 |
| TINYBLOB | 0-255bytes | 不超过255个字节的二进制数据 |
| TINYTEXT | 0-255bytes | 短文本字符串 |
| BLOB | 0-65535bytes | 二进制形式的长文本字符串 |
| TEXT | 0-65535bytes | 长文本数据 |
| MEDIUMBLOB | 0-16777215bytes | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16777215bytes | 中等长度文本数据 |
| LONGBLOB | 0-4294967295bytes | 二进制形式的极大长度文本数据 |
| LONGTEXT | 0-4294967295bytes | 极大文本数据 |

日期事件类型

|-----------|----|-----------------------------------------|---------------------|
| 类型 | 大小 | 范围 | 格式 |
| DATE | 3 | 1000-01-01至9999-12-31 | YYYY-MM-DD |
| TIME | 3 | -838:59:59至838:59:59 | HH::MM::SS |
| YEAR | 1 | 1901至2155 | YYYY |
| DATETIME | 8 | 1000-01-01 00:00:00至9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS |
| TIMESTAMP | 4 | 1970-01-01 00:00:01至2038-1-19 03:14:07 | YYYY-MM-DD HH:MM:SS |

二、DML

2.1添加数据

给指定字段添加数据

sql 复制代码
insert into 表名(字段名1,字段名2,...) values(值1,值2,...);

给全部字段添加数据

sql 复制代码
insert into 表名 values(值1,值2,...);

批量添加数据

sql 复制代码
insert into 表名(字段名1,字段名2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...);
insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...);

注:

  • 插入数据时,指定字段的顺序需要与值的顺序是一一对应的。
  • 字符串和日期类型数据应该包含在引号内。
  • 插入数据的大小应该在字段的规定范围之内。

2.2修改数据

sql 复制代码
update 表名 set 字段名1 = 值1,字段名2 = 值2,...[where 条件];

注:

  • 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据

2.3删除数据

sql 复制代码
delete from 表名 [where 条件];

注:

  • DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
  • DELETE语句不能删除某一个字段的值(可以使用UPDATE)

三、DQL

3.1基本查询

查询多个字段

sql 复制代码
select 字段1,字段2,字段3... from 表名;
select * from 表名;

设置别名

sql 复制代码
select 字段1[as 别名1],字段2[as 别名2],字段3[as 别名3]... from 表名;

去除重复记录

sql 复制代码
select distinct 字段列表 from 表名;

3.2条件查询

sql 复制代码
select 字段列表 from 表名 where 条件列表;

3.3聚合函数

聚合函数将一列数据作为整体进行计算。

sql 复制代码
select 聚合函数(字段) from 表名;

注:

  • null值不参与任何聚合函数运算。

3.4分组查询

sql 复制代码
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];

注:

  • where在分组之前进行过滤,不满足条件不参与分组,having是对分组后的结果进行过滤。
  • where不能对聚合函数进行过滤,having可以。

3.5排序查询

sql 复制代码
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;

排序关键字:ASC(升序),DESC(降序),默认为升序。

注:

  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

3.6分页查询

sql 复制代码
select 字段列表 from 表名 limit 起始索引,查询记录数;

注:

  • 起始索引从0开始,起始索引=(查询列表-1)*每页显示记录数。
  • 如果查询的是第一页数据,起始索引可以省略。

3.7执行顺序

四、DCL

4.1用户管理

查询用户:

sql 复制代码
use mysql;
selecr * from user;

创建用户

sql 复制代码
create user '用户名'@'主机名' identified by '密码';

修改用户密码

sql 复制代码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';

删除用户:

sql 复制代码
drop user '用户名'@'主机名';

注:

  • 在Mysql中,用户所具有的信息以及用户所具有的权限信息都是存放在mysql中的user表中,同时知道主机地址和用户名才能完整的定位一个用户。

4.2权限控制

常见权限:

查询权限

sql 复制代码
show grants for '用户名'@'主机名';

授予权限

sql 复制代码
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

撤销权限

sql 复制代码
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

注:

  • 多个权限之间,使用逗号分隔。
  • 授权时,数据库名和表名可以使用*进行通配,代表所有。

五、函数

5.1字符串函数

常用的字符串函数:

sql 复制代码
 -- concat
 select concat('hello','mysql');  #hellomysql
 
 -- lower
 select  lower('Hello');    #hello
 
 -- upper
 select  upper('hello');    #HELLO
 
 -- lpad
 select lpad('01',5 ,'-');   #---01
 
 -- rpad
 select rpad('01',5 ,'-');   #01---
 
 -- trim
 select trim(' hello mysql ');  #hello mysql
 
 -- substring
 select substring('hello world',1,5);  # hello (从 1 开始数的)

5.2数值函数

sql 复制代码
 -- 数值函数
 -- ceil 向上取整
select ceil(1.2);              # 2
 
 -- floor 向下取整
select ceil(1.9);              # 1
 
 -- mod  (x / y)的模
select mod(6, 4);              # 2
 
 -- rand
select rand();
 
 -- round
 select round(2.345, 2);       # 2.35

5.3日期函数

sql 复制代码
 -- ------------------------------------------------------ 日期函数
 -- curdate()
select curdate();  # 2025-2-5
 
 -- curtime()
select curtime();  # 20:50:12
 
-- now()
 select now();  # 2025-2-5 20:50:12
 
 -- YEAR, MONTH, DAY
select YEAR(now());
select MONTH(now());
select DAY(now());
 
 -- DATA_ADD(data, INTERVAL expr type)
select date_add(now(), INTERVAL 70 DAY); # 2024-01-03 13:27:39
 
 -- DATEDIFF(date1, date2)
select datediff('2024.1.13', '2023.10.25');  # 80 
select datediff('2001.7.1', '2023.10.25');  # 8151
 

5.4流程函数

sql 复制代码
 -- -------------------------------------流程函数
 -- IF(value,t,f)
select if(true, 'ok', 'error');  #ok
 
-- IFNULL(value1,value2)
select ifnull('ok', 'default');  #ok
select ifnull('', 'default');  #''
select ifnull(null, 'default');  #default
 
-- CASE WHEN [val1] THEN [res1]....ELSE[default] END
 
-- CASE [expr] WHEN [val1] THEN [res1]....ELSE[default] END
 
-- 需求:查询emp表员工姓名和城市(北京,上海---->一线城市,其他----->二线城市)
select
    name,
    (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else'二线城市' end) as '工作地址'
from emp;
相关推荐
勇敢一点♂1 小时前
canal-python的安装与入门
数据库·python
何似在人间5752 小时前
MySQL锁类型(详解)
数据库·sql·mysql
我码玄黄2 小时前
高效 MyBatis SQL 写法一
后端·sql·tomcat·mybatis
逆天小北鼻3 小时前
oracle 基础语法复习记录
数据库·学习·oracle
想做富婆3 小时前
oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区
数据库·oracle·表分区
小梁不秃捏3 小时前
数据库技术基础
数据库·后端
石榴花上3 小时前
oracle ORA-27054报错处理
数据库·oracle
tan77º3 小时前
【MySQL】库的操作
数据库·笔记·mysql
焱焱枫3 小时前
Oracle 19c多租户 : PDB重定位
数据库·oracle·pdb·多租户管理·pdb重定位·12c 19c 21c