zoukankan      html  css  js  c++  java
  • mysql操作

    数据的操作也叫作crud:

      C:create

      R:read

      U:update

      D:delete

    一、蠕虫复制

      就是在已有的数据的基础之上,将原来的数据进行复制,插入到相对应的表中

    语法规则:

      insert into 表名 select *|字段列表from 表名

     当一个表中的数据复制到另一个表中的时候,需要注意数据的来源要与被插入的表的字段数量类型要保持一致!

     总结蠕虫复制的优点:

      1,  可以以最快的速度复制另外一张表的数据

      2,  在短期内产生大量的数据,以测试服务器的压力

    二、主键重复

      如果在进行数据更新的时候,某条记录的主键已经存在,但是又需要将最新的数据更新到该记录中:

    策略一:

      insert into 表名[字段列表] values(值列表) on duplicate key update 字段1=值1,字段2=值2……

    策略二:如果主键重复,直接删除原纪录再插入

      replace into 表名[字段列表] values(值列表);

     在插入之前进行一次判断,判断有没有主键重复,如果没有,跟普通的插入语句没有区别,如果有主键冲突,先删除以前的记录,再插入新记录!

    三、修改数据

      update 表名 set 字段1=值1,字段2=值2……[where 条件] [order by 字段名 asc | desc] [limit 数据量]

    四、删除数据

      delete  from 表名 [where 条件] [order by 字段名 asc|desc] [limit 数据量]

     还有一个类似删除功能的语法

      truncate table 表名        或者:truncate 表名

    相当于做了两件事:

      1、  先把原表drop掉

      2、  再按以前的原表的结构重新创建一次

    五、查询数据

      完整语法如下:

    select 【select 选项】 *|字段列表 【as 字段别名】 from 数据源 【where 子句】 【group by 子句】 【having 子句】 【order by 子句】 【limit 子句】

     以上的语法一般只是单表查询,另外还有多表查询,多表查询又有联合查询、子查询、连接查询(左连接,右连接,内连接,外连接,自然连接)

    注意:

        1)  from后面的子句往往称之为:五子句,也叫五子查询

        2)  五子查询都可以没有,但是,如果要有,就必须按顺序写

      1、select 选项

        select选项:all(默认值,保留所有查询结果)| distinct(去掉重复的)

      2、别名

        字段|表达式|表|子查询  [as]  别名

     为什么要给字段起别名?

      如果多表查询的时候,不同的表内可能出现相同的字段名,如果使用同名字段,PHP在提取的时候就会造成数据的丢失

     为什么给表起别名?

      在真实的项目中,表名往往都比较长,懒得写

    为什么要给子查询起别名?

      当数据源是一个子查询的时候,必须给该子查询语句起一个别名,如:select * from (select * from score)as s1;

    虚拟表:

      理论上认为一条sql语句必须从一个数据源中去获取数据。所以,为了保证sql语句语法的结构完整性,在Mysql中执行select语句的时候在适当的时候会自动创建一个虚拟表。这个虚拟表就是当数据源来使用。  虚拟表的名称:dual

    五子查询:

    1、where 子句

        语法:where 表达式

        功能:通过限定的表达式的条件对数据进行过滤,得到我们想要的结果

        流程:逐一取出每一条记录,先通过当前记录来计算where后面表达式的值,如果计算的结果为真(非0即可),就返回来记录,如果计算的结构为假(0),则不返回记

          录!相当于对所有的记录做了一次遍历!

       where id = 2;

      between A and B 相当于[A,B]

      not between and

      in | not in (集合):查找集合里面的值与字段的值匹配的记录

         空值查询:

          select *|字段列表 from 表名 where 字段名 is [not]  null

         模糊查询:

          select *|字段列表from 表名 where 字段名 [not] like ‘通配符字符串’;

           1、含有“全”的字符:%%

          2、查找student表中stu_name含有_或含有%的学生信息:%\%%

        由于%和_都具有特殊的含义,所以如果确实想查询某个字段中含有%或_的记录,需要对它们进行转义!也就是查找  \_   和   \%

    2、group by 子句

      也叫作分组统计查询语句

       group by 字段1[,字段2]……

        从形式上看,就是通过表内的某个或某些字段进行分组:

          单纯的分组查询毫无意义,因为只会从每一组内提取第一条记录,而分组统计查询的主要作用不是分组,而是统计,针对每一个分组进行相关的统计。

        select gender , max(score) as max_score from php_student group by gender;

       统计函数:

      sum()

      max()

      min()

      avg()

      count(*)

      如果没有group by 子句,则默认的就是整个表中的数据当成一组。

      多字段分组统计

        group by 字段1[,字段2]……

        作用是:先根据字段1进行分组,然后再根据字段2进行分组

       回溯统计:

        回溯统计就是向上统计,分组统计的结果再做一次统计!在group by语句的后面再加上with rollup即可

    3、having 子句

      where子句是把磁盘上的数据筛选到内存中,而having是把内存中的数据再次进行筛选

      因此,where子句的后面不能使用统计函数,而having子句可以。因为只有在内存中的数据才能进行统计运算

    4、order by 子句

      order by 字段1 [asc | desc]

        默认的是asc,升序,从小到大;desc从大到小,降序。

       多字段排序:

        order by score asc , age desc

    5、limit 子句

      limit子句的作用就是限制查询记录的条数

        limit offset , length  // offset是偏移量,默认为0,length是记录的数量

          limit 3 , 5表示显示记录的第4条到第8条,类似于下标

      分页原理:

        假如在项目中,需要使用分页的效果,就应该使用limit子句

        如果用$pageNum代表第多少页,用$rowsPerPage代表每页显示的长度

        limit ($pageNum - 1)*$rowsPerPage, $rowsPerPage  // 等差数列

  • 相关阅读:
    tyvj 1031 热浪 最短路
    【bzoj2005】 [Noi2010]能量采集 数学结论(gcd)
    hdu 1394 Minimum Inversion Number 逆序数/树状数组
    HDU 1698 just a hook 线段树,区间定值,求和
    ZeptoLab Code Rush 2015 C. Om Nom and Candies 暴力
    ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS
    ZeptoLab Code Rush 2015 A. King of Thieves 暴力
    hdoj 5199 Gunner map
    hdoj 5198 Strange Class 水题
    vijos 1659 河蟹王国 线段树区间加、区间查询最大值
  • 原文地址:https://www.cnblogs.com/Hansen32/p/6107975.html
Copyright © 2011-2022 走看看