附: 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数据库表记录操作语句的更多相关文章

  1. Mysql数据库(四)表记录的更新操作

    一.插入表记录 1.使用INSERT...VALUES语句插入新纪录 (1)插入完整数据 mysql> desc tb_manager; +-------+------------------+ ...

  2. 巧用*_his表记录操作历史

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 许多OLTP应用的开发者都知道,一些重要的操作要记录操作历史,把操作前的数据备份到历史表,然后再执行相应的修改操作.这样可以获取某个 ...

  3. MySql 触发器同步备份数据表记录

    添加记录到新记录表 DELIMITER $$ USE `DB_Test`$$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `InsertOPM_Al ...

  4. Mysql入门到精通数据表的操作

    变更表 ALTER TABLE tb_name; 1.加入场 ALTER TABLE tb_name ADD 字段名字 字段类型 约束条件 [FIRST/AFTER 字段名称] 1>加入user ...

  5. Mysql数据库(五)表记录的检索

    一.基本查询语句 二.单表查询 1.查询所有字段 mysql> SELECT * FROM tb_bookinfo; +----------+-----------+--------+----- ...

  6. mysql 12章_MySQL数据库的高级管理

    一. 用户管理 Root用户是MySQL数据库管理系统中的系统管理员,但在实际开发过程中通常需要根据不同的开发者分配不同的用户,这样有利于用户的管理和维护. . 用户的创建: ) 方式1:使用MySQ ...

  7. EF操作数据库的步骤和一些简单操作语句

    这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面 ...

  8. mysql 开发基础系列1 表查询操作

    在安装完数据库后,不管是windows 还是linux平台,  mysql的sql命令都大同小异,相关命令都是相同的,每个命令结束后 都以  ;  结尾, 注意在windows平台中表名是不区分大小写 ...

  9. MySQL 表的操作语句(2)

    一:MySQL支持的数据类型 1:CHAR和TEXT :分别表示定长的和可变长的串. CHAR:1-255个字符的定长串,它的长度必须在创建时指定. TEXT:最大长度为64K的文本 VARCHAR: ...

随机推荐

  1. unity3d 导入google play services插件工程

    最近在给unity工程尝试接入google play services插件,遇到了些问题,记录一下. 之前在做android插件的时候,都是自己创建一个android工程,把生成的.class文件打包 ...

  2. LeetCode455. Assign Cookies

    Description Assume you are an awesome parent and want to give your children some cookies. But, you s ...

  3. Editing a Book UVA - 11212 IDA*

    You have n equal-length paragraphs numbered 1 to n . Now you want to arrange them in the order of 1 ...

  4. Who's in the Middle - poj 2388 (快速排序寻找中位数)

    题意; 寻找中位数 利用快速排序来寻找中位数. #include <iostream> using namespace std; int N; ]; int Median(int left ...

  5. CVS 相关内容

    CVS 基础 cvs 并不是 eclipse 独有, 而是 eclipse 支持 cvs. cvs 是用于几个程序员之间共享程序避免冲突的一个工具, 是 C/S 架构. cvs 是 java 的一个开 ...

  6. 集合Map映射(使用xml文件)

    Hibernate允许我们将Map元素与RDBMS进行映射. 我们知道,List和Map是基于索引的集合. 在map的情况下,索引列作为键,元素列用作值. 使用xml文件在集合映射中映射Map的示例 ...

  7. redis python交互和实际例子

    import redis try: r=redis.StrictRedis(host='localhost',port=6379) except Exception,e: print e.messag ...

  8. Linux & windows 应用服务器&Oracle数据库服务器备份

    Linux篇 tomcat启动加入开机启动项   vi /etc/rc.d/rc.local service iptables stop /usr/local/tomcat/bgyappserv01/ ...

  9. 多线程编程中的join函数

    # coding: utf-8 # 测试多线程中join的功能 import threading, time def doWaiting(): print 'start waiting1: ' + t ...

  10. java中訪问修饰符

    较之c++ 中 public,proctected, private 三种訪问控制, java多了默认訪问控制. java中四种訪问控制权限 简单描写叙述为一下四句: 1)private 仅本类可见 ...