多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

MySQL之CRUD(上)

MySQL之CRUD(上) 1. CURD 简介CURD是对数据库中的记录进行基本的增删改查操作Creat (创建)Retrieve读取Update更新Deleate删除2. Creat新增2.1 语法INSERT[INTO]table_name[(column[,column]...)]VALUES(value_list)[,(value_list)]...value_list:value,[,value]...2.2 示例创建一个用于演示的表createtableusers(idbigint,namevarchar(20)comment用户名);2.2.1 单行数据全列插入注意value_list 中的值的数量和顺序必须和定义表中的数量及顺序一致insertintousersvalue(1,张三);2.2.2 单行数据指定列插入注意value_list 中的值的数量和顺序必须和指定列中的数量及顺序一致insertintousers(id,name)value(2,李四);2.2.3 多行数据指定列插入注意在一条insert语句中也可以指定多个value_list,实现一次插入多行数据insertintousers(id,name)value(3,王五),(4,钱六);一次播入一条数据的效率高还是一次插入多条数据的效率高1.执行所有的SQL都要有网络开销2.MYSQL数据库在保存数据的时候都有磁盘开销3.每执行一条SQL语句都需要开启一个事务事务的开启到关闭也需要消耗系统资源补充当需要执行别人发来的SQL文件时可以使用本机 的SQL脚本3. Retrieve检索3.1 语法select[DISTINCT]select_expr[,select_expr]...[fromtable_references][wherewhere_condition][groupby{col_name}|expr,...][havingwhere_condition][orderby{col_name|expr}][ASC|DESC,...][limit{[offset,]row_count|row_countoffsetoffset}]3.2 示例:3.2.1 构造数据//构建一个表createtableexam(idbigint,namevarchar(20)comment姓名,chinesefloatcomment语文成绩,mathfloatcomment数学成绩,englishfloatcomment英语成绩);//插入测试数据insertintoexam(id,name,chinese,math,english)values(1,吕布,76,68,89),(2,貂蝉,97,87,89),(3,曹昂,69,76,88),(4,董卓,77,87,46),(5,刘备,79,88,81),(6,曹植,99,67,90),(7,曹阿瞒,93,87,69);3.3 select3.3.1 全列查询查询所有记录,使用*可以查询表中所有列的值select*fromexam;3.3.2 指定列查询在select 后面的查询列表中指定希望查询的列可以是一个也可以是多个中间用逗号隔开指定列的顺序和表结构中的列顺序无关查询所有人的编号、姓名、语文成绩selectid,name,chinesefromexam;3.3.3 查询列为表达式1.常量表达式selectid,name,10fromexam;2.把所有学生的语文成绩加10分selectid,name,chinese10fromexam;3.计算所有学生语文、数学、英语成绩的总分selectid,name,chinesemathenglishfromexam;3.3.4 为查询结果指定别名语法selectcolumn[AS]alias_name[,...]fromtable_name;注意AS可以省略不写别名如果包含空格必须用单引号包裹3.3.5 结果去重查询1.查询当前所有的数学成绩selectmathfromexam;2. 在结果集中去除重复记录可以使用DISTINCTselectdistinctmathfromexam;注意使用DISTINCT 去重时只有查询列表中所有的值都相同才会判定为重复建议查询时不加限制条件会返回表中所有的结果如果表中的数据量过大会把服务器资源消耗殆尽所有建议在生产环境中尽量使用带限制条件的查询何为条件查询我们下文叙述。3.4 Where 条件查询3.4.1 语法selectselect_expr[,select_expr]...[fromtable_references]wherewhere_condition;3.4.2 比较运算符运算符说明,,,大于大于等于小于小于等于等于对NULL的比较不安全比如NULLNULL 结果还是NULL等于对NULL的安全比如NULLNULL 结果还是TRUE(1)!,不等于两者对NULL的判定一样的二者任选其一皆可value BETWEEN a0 AND a1范围匹配[a0,a1],如果a0valusa1返回TRUE 或1NOT BETWEEN 则取反value IN (option,…)如果value在option列表中返回TRUE (1)NOT IN 则取反IS NULL是NULLIS NOT NULL不是NULLLIKE模糊匹配%表示任意多个包括0个字符_表示任意一个字符NOT LIKE 则取反3.4.3 逻辑运算符运算符说明AND多个条件必须都为TRUE(1),结果才是TRUE(1)OR任意一个条件为TRUE(1),结果为TRUE(1)NOT条件为TRUE(1),结果为FALSE(0)3.4.4 示例3.4.4.1 基本查询查询英语不及格的同学及英语成绩60selectname,englishfromexamwhereenglish60;查询语文成绩高于英语成绩的同学selectname,chinese,englishfromexamwherechineseenglish;查询总分在200分以下的同学selectname,chinese,math,englishfromexamwherechinesemathenglish200;3.4.4.2 AND 和 OR查询语文成绩大于80分且英语成绩大于80分的同学selectname,chinese,englishfromexamwherechinese80andenglish80;查询语文成绩大于80分或者英语成绩大于80分的同学selectname,chinese,englishfromexamwherechinese80orenglish80;观察AND 和 OR的优先级我们发现AND 的优先级大于 OR3.4.4.3 范围查询查询语文成绩在80分到90分的同学及语文成绩selectname,chinesefromexamwherechinesebetween80and90;查询数学成绩是67或者68或者76selectname,mathfromexamwheremathin(67,68,76);3.4.4.4 模糊查询%- 查询所有姓曹的同学selectnamefromexamwherelike曹%;_- 查询所有姓曹且名字只有两个字的同学selectnamefromexamwherelike孙_;3.4.4.5 NULL 的查询查询英语成绩为NULL的记录select*fromexamwhereenglishisNULL;查询英语成绩不为NULL的记录select*fromexamwhereenglishisnotNULL;NULL 与其他值进行运算结果为NULL3.4.5 where语句注意事项1. WHERE条件中可以使⽤表达式但不能使⽤别名2. AND的优先级⾼于OR在同时使⽤时建议使⽤⼩括号()包裹优先执⾏的部分3. 过滤NULL时不要使⽤等于号()与不等于号(!,)4. NULL与任何值运算结果都为NULL3.5 Order by 排序3.5.1 语法select...fromtable_name[where...]orderby{col_name}[ASC|DESC],...;3.5.2 示例按数学成绩从低到高排序升序按语文成绩从高到低排序降序查询同学各门成绩依次按语文升序数学降序英语升序的方法显示可以使用列的别名进行排序3.6 分页查询3.6.1 语法分页查询中有三种语法如下默认数据从第0行开始筛选 num 条结果SELECT...FROMtable_name[WHERE...][ORDERBY...]LIMITnum;从start 开始筛选 num 条结果推荐SELECT...FROMtable_name[WHERE...][ORDERBY...]LIMITstart,num;从start 开始筛选 num 条结果SELECT...FROMtable_name[WHERE...][ORDERBY...]LIMITnum,offsetstart,;3.6.2 示例:分别使用三种语法方式分页查询
返回列表