MySQL数据库(3)_MySQL数据库表记录操作语句
附: MYSQL5.7版本sql_mode=only_full_group_by问题 、查询当前sql_mode: select @@sql_mode 、查询出来的值为: 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';
、修改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'; 、上面是改变了全局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';
三、关于数据库表记录操作语句
增加表记录:
<>插入一条记录: insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);
示例:
insert into employee_new (id,name,birthday,salary) values
(,'yuan','1990-09-09',); insert into employee_new values (,'alex','1989-08-08',); insert into employee_new (name,salary) values ('xialv',); <>插入多条记录:
insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......),
(value1,value2,.......)
... ;
示例:
insert into employee_new values
(,'alvin1','1993-04-20',),
(,'alvin2','1995-05-12',); <>set插入:
insert [into] tab_name set 字段名=值
示例:insert into employee_new set id=,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=; --- 将yuan的薪水在原有基础上增加1000元。
update employee_new set salary=salary+4000 where name='yuan';
删除表记录
delete from tab_name [where ....]
/*
如果不跟where语句则删除整张表中的数据
delete只能用来删除一行记录
delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在
事务中恢复。*/ -- 删除表中名称为’alex’的记录。
delete from employee_new where name='alex';
-- 删除表中所有记录。
delete from employee_new; -- 注意auto_increment没有被重置:alter table employee auto_increment=;
-- 使用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_name
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数 /*
使用select 查询时,尽量少用*,影响查询速度
*/
准备工作:
---准备表 CREATE TABLE ExamResult( id INT PRIMARY KEY auto_increment,
name VARCHAR (),
JS DOUBLE ,
Django DOUBLE ,
OpenStack DOUBLE
); ---插入数据
INSERT INTO ExamResult VALUES (,"yuan",,,),
(,"xialv",,,),
(,"alex",,,),
(,"wusir",,,),
(,"alvin",,,),
(,"yuan",,,);
普通查询:
-- ()select [distinct] *|field1,field2,...... from tab_name
-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。
-- 查询表中所有学生的信息。
select * from ExamResult;
-- 查询表中所有学生的姓名和对应的英语成绩。
select name,JS from ExamResult;
-- 过滤表中重复数据。
select distinct JS ,name from ExamResult; -- ()select 也可以使用表达式,并且可以使用: 字段 as 别名或者:字段 别名
-- 在所有学生分数上加10分特长分显示。
select name,JS+,Django+,OpenStack+ 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>;
-- 查询总分大于200分的所有同学
select name,JS+Django+OpenStack as 总成绩 from
ExamResult where JS+Django+OpenStack> ; - where字句中可以使用:
-- 比较运算符:
> < >= <= <> !=
between and 值在10到20之间
in(,,) 值是10或20或30
like '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,)+ifnull(Django,)+ifnull(Database,))
总成绩 from ExamResult order by 总成绩 desc;
-- 对姓李的学生成绩排序输出
select name ,(ifnull(JS,)+ifnull(Django,)+ifnull(OpenStack,))
总成绩 from ExamResult where name like 'a%'
order by 总成绩 desc;
group by分组查询
准备表和记录
CREATE TABLE order_menu(
id INT PRIMARY KEY auto_increment,
product_name VARCHAR (),
price FLOAT(,),
born_date DATE,
class VARCHAR ()
); INSERT INTO order_menu (product_name,price,born_date,class) VALUES
("苹果",,,"水果"),
("香蕉",,,"水果"),
("水壶",,,"电器"),
("被罩",,,"床上用品"),
("音响",,,"电器"),
("床单",,,"床上用品"),
("草莓",,,"水果");
-- 注意,按分组条件分组后每一组只会显示第一条记录 -- group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。 -- 按位置字段筛选
select * from order_menu group by ; -- 练习:对购物表按类名分组后显示每一组商品的价格总和
select class,SUM(price)from order_menu group by class; -- 练习:对购物表按类名分组后显示每一组商品价格总和超过150的商品
select class,SUM(price)from order_menu group by class
HAVING SUM(price)>; /*
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;
聚合函数
--<> 统计表中所有记录 -- COUNT(列名):统计行的个数
-- 统计一个班级共有多少学生?先查出所有的学生,再用count包上
select count(*) from ExamResult;
-- 统计JS成绩大于70的学生有多少个?
select count(JS) from ExamResult where JS>;
-- 统计总分大于280的人数有多少?
select count(name) from ExamResult
where (ifnull(JS,)+ifnull(Django,)+ifnull(OpenStack,))>;
-- 注意: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,)+ifnull(Django,)+ifnull(Database,))
as 总成绩 from ExamResult;
-- 统计一个班级JS成绩平均分
select sum(JS)/count(*) from ExamResult ;
-- 注意:sum仅对数值起作用,否则会报错。 -- AVG(列名):
-- 求一个班级JS平均分?先查出所有的JS分,然后用avg包上。
select avg(ifnull(JS,)) from ExamResult;
-- 求一个班级总分平均分
select avg((ifnull(JS,)+ifnull(Django,)+ifnull(Database,)))
from ExamResult ;
-- Max、Min
-- 求班级最高分和最低分(数值范围在统计中特别有用)
select Max((ifnull(JS,)+ifnull(Django,)+ifnull(OpenStack,)))
最高分 from ExamResult;
select Min((ifnull(JS,)+ifnull(Django,)+ifnull(OpenStack,)))
最低分 from ExamResult;
-- 求购物表中单价最高的商品名称及价格
---SELECT id, MAX(price) FROM order_menu;--id和最高价商品是一个商品吗? SELECT MAX(price) FROM order_menu; -- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
-- -----ifnull(JS,)
limit记录条数限制
SELECT * from ExamResult limit ;
SELECT * from ExamResult limit ,; -- 跳过前两条显示接下来的五条纪录
SELECT * from ExamResult limit ,;
正则表达式
SELECT * FROM employee WHERE emp_name REGEXP '^yu'; SELECT * FROM employee WHERE emp_name REGEXP 'yun$'; SELECT * FROM employee WHERE emp_name REGEXP '
MySQL数据库(3)_MySQL数据库表记录操作语句的更多相关文章
- Mysql数据库(四)表记录的更新操作
一.插入表记录 1.使用INSERT...VALUES语句插入新纪录 (1)插入完整数据 mysql> desc tb_manager; +-------+------------------+ ...
- 巧用*_his表记录操作历史
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 许多OLTP应用的开发者都知道,一些重要的操作要记录操作历史,把操作前的数据备份到历史表,然后再执行相应的修改操作.这样可以获取某个 ...
- MySql 触发器同步备份数据表记录
添加记录到新记录表 DELIMITER $$ USE `DB_Test`$$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `InsertOPM_Al ...
- Mysql入门到精通数据表的操作
变更表 ALTER TABLE tb_name; 1.加入场 ALTER TABLE tb_name ADD 字段名字 字段类型 约束条件 [FIRST/AFTER 字段名称] 1>加入user ...
- Mysql数据库(五)表记录的检索
一.基本查询语句 二.单表查询 1.查询所有字段 mysql> SELECT * FROM tb_bookinfo; +----------+-----------+--------+----- ...
- mysql 12章_MySQL数据库的高级管理
一. 用户管理 Root用户是MySQL数据库管理系统中的系统管理员,但在实际开发过程中通常需要根据不同的开发者分配不同的用户,这样有利于用户的管理和维护. . 用户的创建: ) 方式1:使用MySQ ...
- EF操作数据库的步骤和一些简单操作语句
这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面 ...
- mysql 开发基础系列1 表查询操作
在安装完数据库后,不管是windows 还是linux平台, mysql的sql命令都大同小异,相关命令都是相同的,每个命令结束后 都以 ; 结尾, 注意在windows平台中表名是不区分大小写 ...
- MySQL 表的操作语句(2)
一:MySQL支持的数据类型 1:CHAR和TEXT :分别表示定长的和可变长的串. CHAR:1-255个字符的定长串,它的长度必须在创建时指定. TEXT:最大长度为64K的文本 VARCHAR: ...
随机推荐
- spark-streaming的checkpoint机制源码分析
转发请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/7994357.html spark-streaming定时对 DStreamGraph 和 JobS ...
- win10虚拟环境安装scrapy
说明:本人用的是python3.6版本,64位系统. 第一步:创建并激活虚拟环境 virtualenv scrapy scrapy\Scripts\activate 第二步:安装lxml pip in ...
- awk 截取字符串
1.把字符串的变量存入到其他变量中 1.1.编辑 shell 文件 [root@m910-120 test]# vi awkTest.sh ips=10.0.204.217:10.0.204.218 ...
- Havel--Hakimi定理推断可图化 python
介绍: 哈维尔[1955]--哈吉米[1962]算法能够用来判读一个度序列d是否是可图化的. 哈维尔[1955]--哈吉米[1962]定理: 对于N > 1,长度为N的度序列d可以可图化当且仅当 ...
- ijkplayer框架深入剖析
随着互联网技术的飞速发展,移动端播放视频的需求如日中天,由此也催生了一批开源/闭源的播放器,但是无论这个播放器功能是否强大.兼容性是否优秀,它的基本模块通常都是由以下部分组成:事务处理.数据的接收和解 ...
- Java基础04 封装与接口(转载)
数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对 ...
- In the shell, what does “ 2>&1 ” mean?
In a Unix shell, if I want to combine stderr and stdout into the stdout stream for further manipulat ...
- 涉及spring的相关概念
1.pojo 2.为了降低java开发的复杂性,spring采用了4中策略 (1).基于POJO的轻量级和最小侵入性编程 (2).通过依赖注入和接口编程实现松耦合 (3).基于切面和惯例进行声明式编程 ...
- hdu 1534(差分约束+spfa求最长路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...
- ios --也是在B页面的生命周期设置如下代码。方法一是直接关闭和激活侧滑手势,方法二则是B遵循协议UIGestureRecognizerDelegate,设置侧滑交互代理,重写手势方法。
@property (weak, nonatomic) id<UIGestureRecognizerDelegate> restoreInteractivePopGestureDelega ...