MySQL数据库(3)_MySQL数据库表记录操作语句
附: MYSQL5.7版本sql_mode=only_full_group_by问题1、查询当前sql_mode: select @@sql_mode2、查询出来的值为:set @@sql_mode ='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; 3、修改sql_mode,重启即可set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';4、上面是改变了全局sql_mode,对于新建的数据库有效。如不重启,对于已存在的数据库,则需set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
三、关于数据库表记录操作语句
增加表记录:
<1>插入一条记录:insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);示例:insert into employee_new (id,name,birthday,salary) values(1,'yuan','1990-09-09',9000);insert into employee_new values (2,'alex','1989-08-08',3000);insert into employee_new (name,salary) values ('xialv',1000);<2>插入多条记录:insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......),(value1,value2,.......) ... ;示例:insert into employee_new values(4,'alvin1','1993-04-20',3000),(5,'alvin2','1995-05-12',5000);<3>set插入:insert [into] tab_name set 字段名=值 示例:insert into employee_new set id=12,name="alvin3";
修改表记录
update tab_name set field1=value1,field2=value2,......[where 语句]/* UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。*/update employee_new set birthday="1989-10-24" WHERE id=1;--- 将yuan的薪水在原有基础上增加1000元。update employee_new set salary=salary+4000 where name='yuan';
删除表记录
delete from tab_name [where ....]/* 如果不跟where语句则删除整张表中的数据delete只能用来删除一行记录delete语句只能删除表中的内容,不能删除表本身,想要删除表,用dropTRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在事务中恢复。*/-- 删除表中名称为’alex’的记录。delete from employee_new where name='alex';-- 删除表中所有记录。delete from employee_new; -- 注意auto_increment没有被重置:alter table employee auto_increment=1;-- 使用truncate删除表中记录。truncate table emp_new;
删除记录delete、truncate、drop的区别:
<语法>delete from table_name;truncate table_name;drop table_name;<执行过程>delete:DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作truncate:TRUNCATE一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。 <删除范围>delete 删除表数据,即表记录,保留表结构truncate语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态drop 删除表结构和表数据,执行后表不存在 <表和索引所占空间>delete 执行后,表或索引所占空间还在,自增字段从原纪录开始truncate 执行后表和索引所占用的空间会恢复到初始大小,自增字段从新开始drop语句将表所占用的空间全释放掉 <删除威力>drop > truncate > delete <删除速度>drop > truncate > delete总结:小心使用drop 和truncate,尤其没有备份的时候.否则《从删库到跑路》课程你修满学分了! 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
查询表记录(**重点**)
-- 查询语法:SELECT *|field1,filed2 ... FROM tab_nameWHERE 条件GROUP BY fieldHAVING 筛选ORDER BY fieldLIMIT 限制条数/* 使用select 查询时,尽量少用*,影响查询速度 */
准备工作:
---准备表CREATE TABLE ExamResult(id INT PRIMARY KEY auto_increment,name VARCHAR (20),JS DOUBLE ,Django DOUBLE ,OpenStack DOUBLE );---插入数据 INSERT INTO ExamResult VALUES (1,"yuan",98,98,98),(2,"xialv",35,98,67),(3,"alex",59,59,62),(4,"wusir",88,89,82),(5,"alvin",88,98,67),(6,"yuan",86,100,55);
普通查询:
-- (1)select [distinct] *|field1,field2,...... from tab_name-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列-- 表明确指定要查找的列,distinct用来剔除重复行。-- 查询表中所有学生的信息。select * from ExamResult;-- 查询表中所有学生的姓名和对应的英语成绩。select name,JS from ExamResult;-- 过滤表中重复数据。select distinct JS ,name from ExamResult;-- (2)select 也可以使用表达式,并且可以使用: 字段 as 别名或者:字段 别名-- 在所有学生分数上加10分特长分显示。select name,JS+10,Django+10,OpenStack+10 from ExamResult;-- 统计每个学生的总分。select name,JS+Django+OpenStack from ExamResult;-- 使用别名表示学生总分。select name as 姓名,JS+Django+OpenStack as 总成绩 from ExamResult;select name,JS+Django+OpenStack 总成绩 from ExamResult;
使用where子句,进行过滤查询
-- 查询姓名为XXX的学生成绩select * from ExamResult where name='yuan'; -- 查询英语成绩大于90分的同学select id,name,JS from ExamResult where JS>90; -- 查询总分大于200分的所有同学select name,JS+Django+OpenStack as 总成绩 fromExamResult where JS+Django+OpenStack>200 ;- where字句中可以使用:-- 比较运算符:> < >= <= <> !=between 80 and 100 值在10到20之间in(80,90,100) 值是10或20或30like 'yuan%'/* pattern可以是%或者_, 如果是%则表示任意多字符,此例如唐僧,唐国强 如果是_则表示一个字符唐_,只有唐僧符合。两个_则表示两个字符:__ */-- 逻辑运算符在多个条件直接可以使用逻辑运算符 and or not
order by排序
指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。-- select *|field1,field2... from tab_name order by field [Asc|Desc]-- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。-- 对JS成绩排序后输出。select * from ExamResult order by JS;-- 对总分排序按从高到低的顺序输出select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))总成绩 from ExamResult order by 总成绩 desc;-- 对姓李的学生成绩排序输出select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0))总成绩 from ExamResult where name like 'a%'order by 总成绩 desc;
group by分组查询
准备表和记录
CREATE TABLE order_menu(id INT PRIMARY KEY auto_increment,product_name VARCHAR (20),price FLOAT(6,2),born_date DATE,class VARCHAR (20));INSERT INTO order_menu (product_name,price,born_date,class) VALUES("苹果",20,20170612,"水果"),("香蕉",80,20170602,"水果"),("水壶",120,20170612,"电器"),("被罩",70,20170612,"床上用品"),("音响",420,20170612,"电器"),("床单",55,20170612,"床上用品"),("草莓",34,20170612,"水果");
-- 注意,按分组条件分组后每一组只会显示第一条记录-- group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。-- 按位置字段筛选select * from order_menu group by 5;-- 练习:对购物表按类名分组后显示每一组商品的价格总和select class,SUM(price)from order_menu group by class;-- 练习:对购物表按类名分组后显示每一组商品价格总和超过150的商品select class,SUM(price)from order_menu group by classHAVING SUM(price)>150;/*having 和 where两者都可以对查询结果进行进一步的过滤,差别有:<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;<2>使用where语句的地方都可以用having进行替换<3>having中可以用聚合函数,where中就不行。*/-- GROUP_CONCAT() 函数SELECT id,GROUP_CONCAT(name),GROUP_CONCAT(JS) from ExamResult GROUP BY id;
聚合函数
--<1> 统计表中所有记录-- COUNT(列名):统计行的个数-- 统计一个班级共有多少学生?先查出所有的学生,再用count包上select count(*) from ExamResult;-- 统计JS成绩大于70的学生有多少个?select count(JS) from ExamResult where JS>70;-- 统计总分大于280的人数有多少?select count(name) from ExamResultwhere (ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0))>280;-- 注意:count(*)统计所有行; count(字段)不统计null值.-- SUM(列名):统计满足条件的行的内容和-- 统计一个班级JS总成绩?先查出所有的JS成绩,再用sum包上select JS as JS总成绩 from ExamResult;select sum(JS) as JS总成绩 from ExamResult;-- 统计一个班级各科分别的总成绩select sum(JS) as JS总成绩,sum(Django) as Django总成绩,sum(OpenStack) as OpenStack from ExamResult;-- 统计一个班级各科的成绩总和select sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))as 总成绩 from ExamResult;-- 统计一个班级JS成绩平均分select sum(JS)/count(*) from ExamResult ;-- 注意:sum仅对数值起作用,否则会报错。-- AVG(列名):-- 求一个班级JS平均分?先查出所有的JS分,然后用avg包上。select avg(ifnull(JS,0)) from ExamResult;-- 求一个班级总分平均分select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))from ExamResult ;-- Max、Min-- 求班级最高分和最低分(数值范围在统计中特别有用)select Max((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))最高分 from ExamResult;select Min((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))最低分 from ExamResult;-- 求购物表中单价最高的商品名称及价格---SELECT id, MAX(price) FROM order_menu;--id和最高价商品是一个商品吗?SELECT MAX(price) FROM order_menu; -- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!-- -----ifnull(JS,0)
limit记录条数限制
SELECT * from ExamResult limit 1;SELECT * from ExamResult limit 2,5; -- 跳过前两条显示接下来的五条纪录SELECT * from ExamResult limit 2,2;
正则表达式
SELECT * FROM employee WHERE emp_name REGEXP '^yu';SELECT * FROM employee WHERE emp_name REGEXP 'yun$';SELECT * FROM employee WHERE emp_name REGEXP '
转载于:https://www.cnblogs.com/hedeyong/p/7236014.html
MySQL数据库(3)_MySQL数据库表记录操作语句相关推荐
- mysql查看表描述_MySQL表记录操作介绍(重点介绍查询操作)
MySQL表记录操作指的是对数据库表中数据进行CRUD增删改查操作,一下将一一给大家介绍,重点介绍查询操作. 一.插入数据(INSERT) 二.删除数据(DELETE) 三.修改数据(UPDATE) ...
- mysql数据库技术_MySQL数据库操作技术大全
MySQL的基本操作可以包括两个方面: (1)MySQL常用语句如高频率使用的增删改查(CRUD)语句 (2)MySQL高级功能,如存储过程,触发器,事务处理等. 而这两个方面又可以细分如下: Con ...
- Java案例:连接SQL Server数据库,显示学生表记录
Java案例:连接SQL Server数据库,显示学生表记录 演示利用JDBC连接SQL Server数据库,在Java GUI窗口里显示表记录. 一.运行效果 二.实现步骤 1.项目结构图
- mysql数据库更新表_Mysql数据库(四)表记录的更新操作
一.插入表记录 1.使用INSERT...VALUES语句插入新纪录 (1)插入完整数据 mysql> desc tb_manager; +-------+------------------+ ...
- mysql查看当前库所有表记录数_mysql中查看数据库中所有表的记录数
我们继续我们的博客创建. 在一个项目日常的运行中,常常会为服务过慢而导致用户体验不好,在这一点上,常常需要进行性能优化,而如果没有针对性的对某一个 模块进行优化,那么效果往往是不理 ...
- mysql密码高级_MySQL数据库高级操作(图文详解)
数据表高级操作 准备工作:安装MySQL数据库 create database CLASS; use CLASS; create table TEST (id int not null,name ch ...
- mysql记录当前表数据的数据条数据类型_mysql的表的操作 数据类型
一 数据类型 1 数字: 整型:tinyint int bigint 小数:float:在位数较短的情况下不精准 double:在位数比较长的情况下不精准 1 数字 整型:tinyi ...
- mysql统计记录数据库设计_MYSQL数据库设计,查询规范
MySQL数据库 (一)建表规约 1.[强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否) .说明:任何字段如果为非负数,必须是 ...
- Mysql数据库教程(第一章 表的操作)
Mysql数据库教程 前言 库的基本操作 一.数据类型 1.1 数值型 1.2 日期和时间类型 1.3 字符串类型 二.表的操作 2.1 创建表 2.2 删除表 2.3 修改表 2.4 显示表 三.创 ...
最新文章
- docker 查看容器磁盘大小_软件安全 : Docker逃逸详解
- 你以为的周末 vs 实际上的周末
- mysql 表资源,MySQL 复制表的方法
- 使用wlan接收器经常重新登录怎么办
- 浅谈多重背包及其优化
- BCGControlBar教程:可视化管理器
- python入门经典代码-【python】编程语言入门经典100例--12
- uniapp 如何给搜索框设值_uni-app 顶部配置搜索框和左右图标
- 高考340分理科学计算机,2021年高考340分可以上什么大学 340分左右的院校
- android 壁纸改变回调,android_launcher的源码详细分析和壁纸修改
- 2022年来啦!丨新年回馈粉丝丨免费抽奖!
- 深度学习tracking学习笔记(2):图像/视觉显著性检测技术发展情况梳理(Saliency Detection、Visual Attention)
- nevada用计算机弹,Nevada吉他谱(gtp谱,指弹,独奏,演奏视频)_Vicetone
- HBase master,slaver web端口配置
- linux bin sh命令,linux shell中#!bin/sh的理解
- PCB图纸太小元件放不下怎么办
- 知识管理软件之二 卡拉OK读小说 藏书库系列
- 体重指数计算器(中文版)
- 群联PS3111主控+3D TLC实现全盘不掉速!群联的另类玩法
- ISIS协议和代码分析
热门文章
- JAVA编写的一个简单的Socket实现的HTTP响应服务器
- 原生php使用foreach,php – 使用foreach和session循环 - 程序园
- java多线程按行读取文件_“java”中多线程按行读取txt且每个线程读的内容不能重复,这么求“demo”?...
- This scheduler instance is still active but was recovered by another instance in the cluster
- Firefox的缓存问题
- 2020 年百度之星·程序设计大赛 - 初赛一 Civilization BFS广搜
- java 管道流_Java IO7:管道流、对象流
- vwap算法下单_时间加权平均价格算法(TWAP)和成交量平均算法(VWAP)在量化回测的应用...
- linux 汇编 读取软盘,读取软盘逻辑扇区的汇编实现代码
- 电容的q值计算公式_(生活小贴士)一分钟了解“三星贴片电容的结构与材料特性”...