wordpress推荐文章优化网站佛山厂商

当前位置: 首页 > news >正文

wordpress推荐文章,优化网站佛山厂商,wordpress linux版本,云南企业建站MySQL#xff1a;基础增删查改 插入插入冲突 查询distinctwhereorder bylimit 删除deletetruncate 更新 插入 基本插入语法#xff1a; insert [into] 表名 (列1, 列2 …) values (值1, 值2 …);into可以省略(列1, 列2 …)与后面的(值1, 值2)一一对应如果插入时数据完全… MySQL基础增删查改 插入插入冲突 查询distinctwhereorder bylimit 删除deletetruncate 更新 插入 基本插入语法 insert [into] 表名 (列1, 列2 …) values (值1, 值2 …);into可以省略(列1, 列2 …)与后面的(值1, 值2)一一对应如果插入时数据完全按照表从左往右的顺序(列1, 列2 …)可省略 示例 create table students( id int unsigned primary key auto_increment, sn int not null unique comment 学号, name varchar(20) not null, tel varchar(20) );一次性指定所有值那么省略(列1, 列2 …)部分 insert into students values (100, 20240001, 张三, NULL);插入时只指定部分值那么就需要通过(列1, 列2 …)来指定 insert into students (id, sn, name) values (101, 20240006, 小明);也可以一次性插入多行每一行的数据用(值1, 值2 …)表示不同行数据之间用逗号隔开 insert into students (id, sn, name) values (105, 20240052, 小张), (109, 20240096, 小李);此处换行只是为了方便展示换行对SQL语句的效果不会造成影响。 之前的插入结果如下 插入冲突 在插入数据时有可能因为主键和唯一键的存在导致冲突而插入失败。此时可以利用插入替换或者直接替换。 插入替换 插入替换语法 insert … on duplicate key update 列1值1, 列2值2 …;其中insert …表示一个完整的插入语句该语句的作用是insert语句如果冲突则执行后面的列1值1, 列2值2 …进行值替换。 示例 insert into students (id, sn, name) values (101, 20240066, 昊天) on duplicate key update sn20240066;之前插入时已经插入了(101, 20240006, 小明)所以这个插入会发生主键冲突导致插入失败。而on duplicate key update sn20240066的作用就是如果插入失败说明主键已经存在那么修改其学号为20240066。 最后该学生的sn从20240006变成了20240066 插入替换的作用是插入失败时只替换部分指定的值保留部分原先的值。 直接替换 插入时也可以直接替换只需把insert改为replace即可 replace [into] 表名 (列1, 列2 …) values (值1, 值2 …);这种直接替换如果插入时发生冲突会直接删除原先的行重新插入当前行。 replace into students (id,sn,name) values (109, 20240100, 小杨);执行以上语句时由于已经有id109的数据存在会发生主键冲突此时会直接删除原先的行插入这一行 整个id109的数据都变成刚刚的内容了就好像执行了一个insert语句。 查询 示例表格 create table exam_result ( id ind unsigned primary akey auto_increment, name varchar(20) not null comment 同学姓名, chinese float default 0.0 comment 语文成绩, math float default 0.0 comment 数学成绩, english float default 0.0 comment 英语成绩 );示例数据 insert into exam_result (name, chinese, math, english) values (小明, 67, 98, 56), (小红, 87, 78, 77), (小翠, 88, 98, 90), (小朱, 82, 84, 67), (小雨, 55, 85, 45), (小鑫, 70, 73, 78), (小彤, 75, 65, 30), (小朵, NULL, NULL, NULL);基本查询语法 select 表达式1, 表达式2 … from 表名;此处的表达式含义非常广它可以是列名通配符*或者基本字面量计算式等。 通配符*做表达式输出所有的列 测试表中有id, name, chinses, math, english列通过*全部都查询出来了 列名做表达式输出指定的列 此处的表达式为name, chinese所以只输出这两列。 基本字面量与计算式做表达式输出计算结果 此处的name与刚刚的name不同此处的name是一个字符串而不是列名所以输出的是name字符串本身。而第三列用1024 2048做表达式输出的就是计算结果。 在计算表达式时如果指定了表那么这个表有几行表达式就计算多少次。如果表达式中没有依赖表中的列而是单纯的计算那么可以不指定表名 这次的查询中没有指定表名也没有使用表的列那么表达式默认只计算一次输出一行。 计算的意义在于列与列之间同样可以计算 第二列中通过chinese english math计算出了总分。 但是这样看表的话chinese english math这个整体作为列名有点长了此时可以使用as来对列重命名。 使用as对列重命名 select 表达式1 as 新名1, 表达式2 as 新名2 … from 表名;as也可以省略 select 表达式1 新名1, 表达式2 新名2 … from 表名;此处使用chinese english math as total将总分的整体重命名了最后输出结果更加直观当然也可以省略as写为chinese english math total。 distinct 直接查询math列 此处出现了两个98能否对查询结果去重 此时就需要用到distinct关键字。 使用distinct对查询结果去重 select distinct 表达式1, 表达式2 … from 表名;这次查询就只有一个98了。 where 观察一下之前的查询会发现我们一直在对列做限制而每次查询出来的行数目是一样的。如果说我们想对数据的值做限制比如“数学成绩大于等于60分”那么就需要where子句。 通过where子句来查询符合要求的数据 select 表达式1, 表达式2 … from 表名 where 表达式;表达式中常用的运算符如下 运算符说明,,,大于大于等于小于小于等于等于任何值与NULL比较结果为NULL等于其他值与NULL比较为falseNULL与NULL比较为true!,不等于between x and y范围匹配[x, y]闭区间如果x value y返回truein (option1, option2 …)如果是其中一个option返回trueis null如果是NULL返回trueis not null如果不是NULL返回truelike模糊匹配%表示多个字符_表示一个字符not like反向模糊匹配%表示多个字符_表示一个字符and逻辑与or逻辑或not逻辑取反 如果你学过任意编程语言上表格很好理解。另外的以上所有操作都可以通过小括号()调整优先级。 查询英语小于60分的同学 select name, english from exam_result where english 60;查询数学成绩为临界值(58, 59, 98, 99)的学生 select name, math from exam_result where math in (58, 59, 98, 99);查询数学成绩大于成绩的同学 select name, math, english from exam_result where math english;查询总分200以上的同学 select name, math english chinese as total from exam_result where math english chinese 200;前面已经将math english chinese重命名为了total那么后面的where能不能写为where total 200 查询时报错了找不到total这个列这是为什么明明已经重命名了。这和SQL语句的执行顺序有关回顾以下语句 select name, math english chinese as total from exam_result where total 200;其执行顺序为 确定要操作的表执行from exam_result确定要查询什么条件的数据执行where total 200最后确定查询哪些列执行select name, math english chinese as total 你会发现在还没有重命名的时候where就先使用了total所以会发生报错。 order by 如果想要对查询的结果进行排序就需要order by子句。 通过order by子句对查询结果排序 select … from 表名 where … order by 列1 asc|desc, 列2 asc|desc … ;asc表示升序desc表示降序如果不指定那么默认为asc升序。 以数学成绩升序展示所有成绩 select name, math, chinese, english from exam_result order by math asc;此处NULL被放在了第一列在SQL中认为NULL比所有值都小。 此处小明和小翠的数学都是98分为什么小翠的顺序更靠后呢在查询时我们只指定了根据math排序如果math相同那么顺序是不确定的。 比如根据数学降序 select name, math, chinese, english from exam_result order by math asc;你会发现降序的结果不是升序结果的逆置小明依然比小翠更靠前。如果想要更加确切的排序那么就需要指定多个列的排序比如”如果数学成绩相同语文成绩高的更前“此时可以通过order by指定多个列 order by math desc, chinese desc;以上order by的执行效果为先根据math进行逆序排序如果math相同再根据chinese逆序排序。如果chinese相同那么结果就是不确定的了此时你可以继续往后加排序条件比如english desc。 select name, math, chinese, english from exam_result order by math desc, chinese desc;此时结果就是确定的了小翠和小明数学成绩相同此时触发语文成绩判断小翠的成绩比小明高所以小翠靠前。 以总分降序查询 select name, chinese math english as total from exam_result order by chinese math english desc;问题来了排序时能不能直接用别名order by total呢 这次居然可以用别名total了和之前where的查询情况不一样这依然和SQL语句的执行顺序有关。 order by是在整个表查询结束后也就是select name, chinese math english as total这个整体执行完毕得到了所有符合条件的结果order by才能进行排序。所以执行到order by时as total的重命名语句已经生效了order by可以使用这个别名。 总结一下目前的语句执行顺序 确定要操作的表执行from …确定要查询什么条件的数据执行where …确定查询哪些列执行select …对查询结果进行排序执行order by … limit 假设已经查询好数据排序完成了如果只需要取用前三条数据这要如何完成此时就需要limit其用于展示查询到的数据的指定部分。 输出前x条数据 select … from 表名 where … order by … limit x;输出下标为[x, y]的数据下标从0开始 select … from 表名 where … order by … limit x, y;select … from 表名 where … order by … limit x offset y;直接查询 查询前三行 select * from exam_result limit 3;查询第2到5行 select * from exam_result limit 1, 4;[2, 5]的下标是[1, 4]注意不要搞错了。 limit的执行顺序非常靠后在整个数据查询排序完毕后才执行limit。 删除 MySQL中有两种删除数据的方法分别是delete和truncate两者功能略有差别。 delete 通过delete删除数据 delete from 表名 where … order by … limit …;删除整张表的数据 delete from exam_result;执行select时查询不到任何数据说明确实删除成功了。在show create table时字段auto_increment9说明delete是不会清空自增长的。 在执行改代码将数据插入回去 insert into exam_result (name, chinese, math, english) values (小明, 67, 98, 56), (小红, 87, 78, 77), (小翠, 88, 98, 90), (小朱, 82, 84, 67), (小雨, 55, 85, 45), (小鑫, 70, 73, 78), (小彤, 75, 65, 30), (小朵, NULL, NULL, NULL);此时id从9开始自增长了 2. 删除小朵所在行 delete from exam_result where name 小朵;truncate 相比于deletetruncate有以下特点 truncate只能用于删除整个表truncate不经过事务速度更快会重置auto_increment 使用truncate清空表的所有数据 truncate table 表名;此处的table可以省略直接truncate 表名。 truncate后auto_increment字段的值就被重置了。 更新 更新表中数据 update 表名 set 列1 值1, 列2 值2 where … order by … limit …将小红的英语成绩改为100 update exam_result set english 100 where name 小红;此处如果不加where子句那么所有学生的英语成绩都会变成100。 将数学成绩倒数的三名同学数学成绩加上10分 update exam_result set math math 10 order by math asc limit 3;