【MYSQL】表操作

目录


在对数据库中的表进行操作前都需要先使用该数据库:

sql 复制代码
use 数据库名;

查看当前数据库含有表

sql 复制代码
show tables;

该语句可以将当前数据库含有的所有表的表名显示出来。

查看表结构

sql 复制代码
desc 表名;

可以查看该表中的字段以及其类型。

创建表

语法:

sql 复制代码
create table 表名(
字段1名 数据类型1,
字段2名 数据类型2,
字段3名 数据类型3,

);

创建商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商provider):

插入(新增create)

sql 复制代码
insert into 表名 (列名) values (对应数据); 
  1. 全列插入:
    数量必须和定义表的列的数量及顺序一致,
    前面可以省略列名,
    插入多行数据时每行数据都要用括号括起来,括号之间使用逗号隔开。
sql 复制代码
insert into goods values (1,'面包',15.5,'食物','大润发');#插入单行数据

insert into goods values (2,'黄瓜',5.5,'蔬菜','大润发'),
(3,'白菜',1.5,'蔬菜','大润发');#插入多行数据
  1. 指定列插入
    数量必须和指定列数量及顺序一致。
    未指定的列默认插入null。
sql 复制代码
insert into goods (goods_id, goods_name,unitprice) values (3,'衣服',155);

insert into goods (goods_id, goods_name,unitprice) values (4,'裤子',105),(5,'鞋子',200);

查询(retrieve)

全列查询

危险操作

sql 复制代码
select * from 表名;

将表中所有数据都查询出来。

指定列查询

sql 复制代码
select 列名1,列名2 from 表名;

将表中的被查询的列数据显示出来。

查询列是表达式

sql 复制代码
select 表达式1,表达式2 from 表名;

表达式可以是对列的操作,也可以是随便的表达式,都是一个表达式在结果集中拿出一列,列头表达式,列中表达式的结果。

对列的操作不会影响表中的真实数据,只会让该操作显示的结果集是表达式的结果。

别名查询(as)

sql 复制代码
select 字段1/表达式1 as 别名1,表达式2/字段2 as 别名2 from 表名;
  • 别名要紧跟着被取别名的列,
  • as可以省略,但是建议一般不省略,
  • 别名中包含空格就一定要使用单引号引起来,建议都拿单引号引起来。

去重查询(distinct)

sql 复制代码
select distinct 字段1/表达式1 from 表名;
  • 使用distinct去重时,
  • distinct必须放在字段前面,
  • 并且distinct后面的所有字段全部都有相同才可以去重。

排序查询(order by)

sql 复制代码
select 字段1/表达式1,字段2/表达式2 as 别名 from 表名 order by 字段1/表达式1/别名1 desc/asc, 字段1/表达式1/别名1 desc/asc;
  • desc 表示降序排列,
  • asc 表示升序排列,
  • 可以使用别名进行排序,
  • order by 字段后没有写排序规则默认是asc
  • 在比较时NULL是最小值,
  • 多个排序规则时,优先级按照书写顺序。

条件查询(where)

sql 复制代码
select 字段1/表达式1,字段2/表达式2 as 别名 from 表名 where 列名/表达式 比较/逻辑运算符 条件;

比较/逻辑运算符

比较运算符:

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
between a0 and a1 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
in(option1,option2,option3 ...) 如果是 option 中的任意一个,返回 TRUE(1)
is null 是 NULL结果是 TRUE(1)
is not null 不是 NULL结果是 TRUE(1)
like 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

注意事项:

  • between and是左闭右闭区间,不是Java中的左闭右开。
  • like 中的%是通配符可以匹配0个及以上个字符,而一个_只能代表一个字符。

逻辑运算符:

运算符 说明
and 多个条件必须都为 TRUE(1),结果才是 TRUE(1),与Java中&&一样
or 任意一个条件为 TRUE(1), 结果为 TRUE(1),与Java中逻辑或一样
not 条件为 TRUE(1),结果为 FALSE(0),与Java中! 一样

使用

where中不能使用别名 ,因为一个SQL查询语句的执行顺序是from->where->select->order by

分页查询(limit)

sql 复制代码
select 字段1/表达式1,字段2/表达式2 from 表名 limit n;#从结果集第0行数据,拿n行数据
select 字段1/表达式1,字段2/表达式2 from 表名 limit m, n;#从结果集第m行数据,拿n行数据
select 字段1/表达式1,字段2/表达式2 from 表名 limit m offset n;#从结果集第n行数据,拿m行数据

注意事项:

使用offset时offset前是要取的行数,后是偏移量也就是开始的地方。

一条语句各查询间的使用顺序

条件查询-> 排序 -> 分页查询。

sql 复制代码
select ... from 表名 where ... ORDER BY ... LIMIT n OFFSET s;

修改(update)

sql 复制代码
update 表名 set 字段1 = 修改值,字段2 = 修改值 where ... ORDER BY ... LIMIT n OFFSET s;

直接使用会导致该表中该列的值全部修改,是个危险操作,所以在使用时常常在后面加上条件查询等加以限制。

删除(delect)

sql 复制代码
delete from  表名 where ... ORDER BY ... LIMIT n OFFSET s;

直接删除会将该表所有行全部删除,是危险操作,所以我们在后面常常加上条件查询等加以限制。

相关推荐
云和数据.ChenGuang4 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys5 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi5 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据6 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi7 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀7 小时前
Redis梳理
数据库·redis·缓存
独行soc7 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天7 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺7 小时前
分布式系统架构:服务容错
数据库·架构
独行soc8 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘