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  // 等差数列

  • 相关阅读:
    ASP.NET WEB API构建基于REST风格
    .net平台下深拷贝和浅拷贝
    Visual Studio 必备神器
    sql注入
    proxy
    职场人生
    JSch
    何时用继承,何时用组合
    视频码率,帧率和分辨率的联系与差别
    超过响应缓冲区限制
  • 原文地址:https://www.cnblogs.com/Hansen32/p/6107975.html
Copyright © 2011-2022 走看看