数据库MySQL表的增删改查(基础命令详解)
Posted 爱吃大白菜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库MySQL表的增删改查(基础命令详解)相关的知识,希望对你有一定的参考价值。
写在前面 :
- 语法中大写字母是关键字,用[]括这的是可以省略的内容。
- 文中截图是相对应命令执行完得到的结果截图。
1.CRUD
注释:在SQL中可以使用“--空格+描述”来表示注释说明.
CRUD:即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写.
2.新增(CREATE)
语法格式:
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
使用这个这个命令之前,我们需要先创建好一个数据库,选中数据库后再在这个数据库中创建一个表,之后我们才可以用上述命令将数据填入到表中了。
--创建的的表结构
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| math | int(11) | YES | | NULL | |
| english | int(11) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
2.1 单行数据 + 全列插入
insert into student values(1,'张三',90,87);
insert into student values(1,'李四',89,87);
单行输入时,关键字values可以不加s,这里大家应该都可以理解。在实际应用中,很少使用到添加单行数据,就像我们网购,在一家网店买的东西,都是通过一个快递邮递到站,不然太费资源,单行输入也是如此。因此下方开始展示多行输入。
2.2 多行数据 + 指定列插入
-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
insert into student (id,name,math,english) values
(3,'钟馗',12,45),
(4,'卢布',null,null);
通过上方代码我们可以看出在数据中,我们可以将数据赋值为空,什么时候置为空能,就拿现在这个例子,卢布同学因为出去约会了,没参加考试,那么我们就把他所有的成绩全都置为null,相当于卢布同学缺考了。
3.查询(SELECT)
语法格式:
SELECT
[DISTINCT] * | column [, column] ...
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
查询语法才是有趣中的有趣,因为他可以套用很多不同的查询方式,让我给你一一道来。
3.1全列查询
-- 通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;
-- 2. 可能会影响到索引的使用。(索引待后面课程讲解)
SELECT * FROM exam_result;
3.2指定列查询
-- 指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;
3.3 查询字段为表达式
-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, math + english FROM exam_result;
注:在我们执行english+10,english+math 这些语句时,对于我们的存入数据是不会有影响的,我们在客户端看到的所有表都是一个“临时表”。
3.4别名
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
语法格式:
-- 结果集中,表头的列名=别名
SELECT column [AS] alias_name [...] FROM table_name;
3.5去重
使用DISTINCT关键字对某列数据进行去重
去重前:
去重后:
通过上方对比可以看出,去重是将出现大于等于两次的数据仅仅保留一项的操作。
3.6 排序:ORDER BY
语法格式:
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
示例:
--查询姓名和数学成绩,根据数学成绩降序排序
select name,math from student order by math desc;
我们还可以将两行相加再进行排序:
select name,math+english from student order by math+english desc;
上方有刚学完as用于改别名,我们还可以将math+english改一个别名,这时上方的截图标题math+english就会被改为score中代码如下:
select name,math+english as score from student order by math+english desc;
除了上述的方式,我们还可以进行更复杂的排序方式,例如可以对多个字段进行排序,排序优先级随书写顺序。
-- 查询同学各门成绩,依次按 数学降序,英语升序方式显示
select name,math,english from student order by math desc, english ;
注意:
- 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。
- NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面。
3.7条件查询
比较运算符:
运算符 | 说明 |
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
IN (option, ...) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字 符 |
逻辑运算符:
运算符 | 说明 |
AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
注意:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
3.7.1基本查询
--查找姓名和英语成绩,查询出英语成绩不足60的同学 select name,english from student where english<60;
--查找姓名、英语和数学成绩成绩,查询出数学成绩高于英语成绩的同学 select name,english,math from student where english<math;
3.7.2 AND和OR
--英语、数学成绩都在60分以上的学生 select name,english,math from student where english>60 and math>60;
--英语或者数学大于60分的同学 select name,english,math from student where english>60 or math>60;
3.7.3范围查询
- BETWEEN ... AND ...
--查询英语成绩在60-100分的同学
select name,english,math from student where english between 60 and 100;
- IN
--查询英语等于87、45分的同学
select name,english,math from student where english in (87,45);
- 模糊查询
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM student WHERE name LIKE '张%';
-- _ 匹配严格的一个任意字符
SELECT name FROM student WHERE name LIKE '张_';
- NULL查询:IS [NOT] NULL
-- 查询 id 已知的同学姓名
SELECT name, id FROM student WHERE id IS NOT NULL;
-- 查询 id 未知的同学姓名
SELECT name, id FROM student WHERE id IS NULL;
3.8分页查询
语法格式:
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
分页查询就是将数据按照页的形式进行显示,就像我们购物时,商品会有页码数,这就是分页查询的实际应用。
示例:
第 1 页
SELECT id, name, math, english FROM student ORDER BY id LIMIT 3
OFFSET 0;
-- 第 2 页
SELECT id, name, math, english FROM student ORDER BY id LIMIT 3
OFFSET 3;
-- 第 3 页,如果结果不足 3 个,不会有影响
SELECT id, name, math, english FROM student ORDER BY id LIMIT 3
OFFSET 6;
4.修改(UPDATAE)
语法格式:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
-- 将大鹏同学的数学成绩变更为 80 分
UPDATE student SET math = 80 WHERE name = '大鹏';
-- 将张三同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE student SET math = 60, english = 70 WHERE name = '张三';
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE student SET math = math + 30 ORDER BY math + english LIMIT 3;
-- 将所有同学的语文成绩更新为原来的 2 倍
UPDATE studentt SET math = math * 2;
注意:
修改可以联合上方提到的语句(ORDER BY;WHERE等)进行修改,这样在使用方面对数据的操作就全面了许多。
5.删除(DELETE)
语法格式:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
--删除张三的成绩
DELETE FROM student WHERE name = '张三';
--创建一个测试表
create table test_table(
id int,
name varchar(20)
);
--删除测试表
delete from test_table;
注意:在开发当中,删除操作是非常危险的,我们一定要再三再三考虑,如果操作失误,很有可能把自己的“饭碗”给弄丢,严重的话可能老板的饭碗也给弄没了。
MySQL常用命令详解
1.用ssh连接MySQL服务器
mysql -uroot -p‘name‘ #数据库用户名root密码为name
2.库的增删改查(注:MySQL命令的结束符为;)
show databases; #查看MySQL已创建所有数据库 use 数据库名; #使用此数据库 create database 数据库名; #创建数据库 drop database 数据库名; #删除数据库
3.表的增删改查
create table 表名(列名1 类型(长度) [约束],列名2 类型(长度) [约束]...); #创建表 1.非空约束 NOT NULL 2.默认值约束 DEFAULT ‘男‘ 3.唯一约束 UNIQUE 4.主键约束 PRIMARY KEY drop table 表名; #删除表 ----查询语句后面可以加G更容易区别 语句的执行顺序:from—>select---- desc 表名; #查看表结构 select * from 表名; #查询表中全部信息 select 列1,列2 from 表名; #查询指定列的信息 select distinct 列2 from 表名; #查询除列2的表信息 select concat(列1,列2) from 表名; #拼接查询 select 列1[+-*/]列2 from 表名; #运算符优先级:1.乘法和除法的优先级高于加法和减法2.同级运算的顺序是从左到右3.表达式中使用"括号"可强行改变优先级的运算顺序 select 列 as 别名 from 表名; #设置别名(as可以省略) ----带条件查询 语句的执行顺序:from—>where—>select 注意:字符串、日期需使用单引号括起来---- select 列 from 表名 where 条件; #条件查询 where 列 比较运算符 值; #条件中比较运算符:( 等于:= 大于:> 大于等于:>= 小于:< 小于等于:<= 不等于:!= 或 <> ) where 条件1 逻辑运算符 条件2; where not 条件; 逻辑运算符(并且:and 或 && 或:or 非:not 或!) ----范围查询---- where 列 between 条件1 and 条件2; #列在这个区间的值 where 列 not between 条件1 and 条件2; #不在这个区间 where !(列 between 条件1 and 条件2); #表示不在这个区间 ----集合查询---- where 列 in(值1,值2); #列中的数据是in后的值里面的 where 列 not in (值1,值2); #不是in中指定值的数据 ----空值查询---- where 列 is null; #查询列中为null的数据 ----模糊查询 %:表示0到多个字符 _:表示一个字符,可多次使用--- where 列 like ‘%0‘; #表示以0结尾 where 列 like ‘0%‘; #表示以0开头 where 列 like ‘%0%‘; #表示数据中包含0 where 列 like ‘%0_‘; #数据结尾第二位是0 ----结果排序( 对查询出的结果按照一列或多列进行升序还是降序排列 升序:asc 降序:desc 注意:不能使用中文的别名排序)---- where 条件 order by 列 [asc/desc]; #语句的执行顺序:from—>where—>select—>order by ----分页查询( beginIndex:表示从第多少条数据开始 pageSize:表示每页显示的数据条数 )---- where [条件] limit beginIndex,pageSize;
以上是关于数据库MySQL表的增删改查(基础命令详解)的主要内容,如果未能解决你的问题,请参考以下文章