码迷,mamicode.com
首页 > 其他好文 > 详细

高级数据操作(上)

时间:2017-09-02 23:29:39      阅读:388      评论:0      收藏:0      [点我收藏+]

标签:english   php   自己的   信息   where   标识   常见   必须   手机   

数据的操作也叫做CRUD

C:Create

R:Read

U:Update

D:Delete

一.插入数据

标准语法:

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

思考:

1,如何以最快的速度向数据表中插入100万条数据?

(1)蠕虫复制

含义:在已有的数据的基础之上,将原来的数据进行复制,插入到对应的表中(也可以插入到自己的表中);

 

 1  -- 蠕虫复制
 2  insert into 表名 select *|字段列表 from 表名;
 3 
 4  create table ruchong1(
 5     a int ,
 6     b int 
 7  );
 8 
 9 
10 insert into ruchong1 values(12,23),(9,18),(34,56),(13,35);
11 
12 create table ruchong2(
13     a int ,
14     b int 
15  );
16 
17 insert into ruchong2  select * from ruchong1; --重复插入10多次就行了

 

 

作用:

1,  以最快的速度将一张表的数据复制到另一张表中,前提是后面查询结果的结构与前面插入数据表的结构是一样的!

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

(2)主键重复

常见的一个场景:

在进行数据插入的时候,主键已经存在,但是又需要将最新的数据更新到记录中,怎么办?

比如,更新手机号码的机主信息:

1  create table tel_info(
2     tel_no char(11) primary key,
3     tel_name varchar(20),
4     tel_id char(18)
5  );
6 
7  insert into tel_info values(13612345678,张三,440921199411080845);
8  insert into tel_info values(13612345678,李四,440921199411080883);-- 出错了

此时,有两种解决方案:

 1 -- 方案一:
 2     --  如果主键冲突,直接更新:
 3         insert into 表名(字段列表) values(值列表) on duplicate key update 字段1=值1,字段2=值2...;
 4 
 5     -- 执行流程:先执行插入语句,如果遇到主键重复,就变成执行一条更新语句。
 6 
 7          insert into tel_info values(13612345678,李四,440921199411080883) on duplicate key update tel_name = 李四,tel_id=440921199411080883;
 8 -- 方案二:
 9     --  如果主键冲突,就直接删除原记录,再插入
10         replace into 表名(字段列表) values(值列表);
11 
12         replace into tel_info  values(13612345678,张三,440921199411080845);
13         
14     --执行流程:先判断主键有没有重复,如果没有,就执行正常的插入语句,如果有就先执行删除之前的再插入新的!
15  

 

二.修改数据

 1 -- 修改数据:
 2 -- 标准语法:
 3 
 4  update 表名 set 字段1 = 值1, 字段2 = 值2..where 条件;
 5 
 6 
 7  -- 其他语法:
 8  update 表名 set 段1 = 值1, 字段2 = 值2..where 条件 order by 字段名[asc|desc] limit 数据量; 
 9  -- asc是升序 默认值
10  -- desc 是降序
11  create table user_info(
12     user_id int unsigned primary key auto_increment,
13     user_name varchar(20),
14     user_tel char(11),
15     is_vip enum(Y,N),
16     last_buy_time int unsigned,
17     user_score int unsigned
18  );
19 
20  -- 应用场景:商家做活动,给前最先到的100名的vip用户的积分增加500分!
21 
22  update user_info set user_score = user_score + 500 where is_vip=Y order by  last_buy_time asc limit 100
23 
24 /*    也就是说,修改数据的时候可以使用order by关键字进行排序然后再限制修改的数量!
25       注意:where修改条件、order by子句以及limit子句的顺序不能发生改变!
26 
27     同样的,删除数据的时候也可以加上order by子句和limit子句:
28 */

三.删除数据

1 -- 标准语法:
2 delete from 表名 where 删除条件
3 
4 -- 其他语法:
5 delete from 表名 where 删除条件 order by 字段名[asc|desc] limit 数量;

四.查询数据

 1 -- 查询数据是业务逻辑中使用的最多的也是最复杂的!
 2 -- 以前的语法:
 3 select *|字段列表 from 表名 where 查询条件;
 4 -- 比较完整的语法:
 5 
 6 
 7 select [select选项] *|字段列表 [as 别名] from 数据源 [where子句] [group by子句][having子句][order by子句][limit子句];
 8 
 9 /*
10 注意:
11 1,    from后面的子句往往叫做五子查询,也叫做五子句
12 2,    五子查询的选项都可以没有,但是如果有,必须按顺序写!
13 */

 

 

 五.select选项与别名

  (1)select选项 

     

 1 /*
 2 就是查询到数据之后,该如何保留查询结果!
 3 一共有两个值:
 4 all:也是默认值,保留所有的查询结果!
 5 distinct:去重,去掉重复的记录,这里的重复是指所有的字段的值完全一样!
 6 
 7 一般来说,如果查询的是所有的字段,用缺省值(省略即可)就行,
 8 如果查询的是部分字段,可以进行去重操作!
 9 */
10 
11 insert into ruchong2 values(23,24),(35,36),(10,35);
1 select b from ruchong2;

技术分享

1 select distinct b from ruchong2; -- 去重

技术分享

(2)别名

1 -- 所谓的别名就是给字段或者其他表达式等标识符起一个别名.基本语法:
2 -- 别名
3   字段名|表达式||子查询语句[as] 别名
4 --  其中as可以省略,但是建议写上

1,  为什么给字段起别名呢?

因为在进行联表查询的时候,两张表可能会出现相同的字段名:

 技术分享

比如上面的学生表中的学生字段和成绩表中的学生字段!这样将来PHP在提取记录的时候,后面的数组元素会覆盖前面的(下标值是一样的),所以,有必须给她们两个中至少一个起一个别名!

2,为什么要给表达式起别名?

 

 1  create table score(
 2          chinese float,
 3          Math float,
 4          English float,
 5          PHP float
 6        );
 7 
 8        insert into score values
 9         (78.5,89,76,93),
10         (77,69,70,98),
11         (76.5,79,96,90),
12         (75.5,99,96,93);
13 
14         select Chinese+Math+English+PHP from score;

技术分享

1 select Chinese+Math+English+PHP as sum from score;

 

高级数据操作(上)

标签:english   php   自己的   信息   where   标识   常见   必须   手机   

原文地址:http://www.cnblogs.com/mrszhou/p/7468190.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!