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: ...
随机推荐
- Java客户端Jedis
使用Jedis的Java客户端 maven依赖 <!-- jedis --> <dependency> <groupid>redis.clients</gro ...
- Pycharm上python unittest不执行"if __name__ == '__main__' "问题or选择非unittest run
转:http://www.cnblogs.com/csjd/p/6366535.html python unittest不执行"if __name__ == '__main__' " ...
- linux管理员工具
htop 任务管理器 bmon 网络监控 ### 详情 --------------------------------------------------- htop 任务管理器 bmon 网络监控
- Perl/C#连接Oracle/SQL Server和简单操作
连接数据库是一个很常见也很必须的操作.先将我用到的总结一下. 1. Perl 连接数据库 Perl 连接数据库的思路都是: 1)使用DBI模块: 2)创建数据库连接句柄dbh: 3)利用dbh创建语句 ...
- markdown编辑器的小建议
markdown编辑器使用建议 yaung by 2012.12.1-------- 这里主要说明一下我们在windows和linux下对md文件的编辑方法,为大家提供一点个人建议,如果有更好的选择 ...
- js或jquery实现页面打印(局部打印)
首先定义css样式: 复制代码代码如下: @media print { .noprint { display: none;color:green } } 对于不想打印的内容只用在标签中加上 cla ...
- 通过 append() 和 prepend() 方法添加若干新元素
在上面的例子中,我们只在被选元素的开头/结尾插入文本/HTML. 不过,append() 和 prepend() 方法能够通过参数接收无限数量的新元素.可以通过 jQuery 来生成文本/HTML(就 ...
- 探讨把一个元素从它所在的div 拖动到另一个div内的实现方法
故事背景: 接到一个新需求,要求用vue搞,主要是拖动实现布局,关键点有:单个组件拖动,一行多列里面的组件拖动, 单个组件可以拖入一行多列里, 单个组件的拖动好实现,关键是把一个组件拖动到另一个类似 ...
- java FTP 上传下载删除文件
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- js yield
meikidd 发布在meikidd2015年5月6日view:3397 在文章任何区域双击击即可给文章添加[评注]!浮到评注点上可以查看详情. 隐藏标注 首先请原谅我的标题党(●—●),tj 大神的 ...