mysql操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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  // 等差数列

以上是关于mysql操作的主要内容,如果未能解决你的问题,请参考以下文章

python编写mysql类实现mysql的操作

Mysql:数据库操作数据表操作字段操作整理

1029 MySQL操作表 MySQL操作表数据行

python简单操作mysql

Mac终端操作Mysql,以及Mysql的操作

python操作MySQL;MySQL补充知识