2.4: 操作mysql中的数据(一)

上一节课我们讲解了数据库的基本命令,建库建表, 修改表结构,查看表结构等等一些操作,但是没有真正开始存储数据,这一节课,我们就要
开始真正的对表里面的数据进行操作了.


首先我们需要把数据插入到表里面去,我们先来看一下插入数据的基本语法
INSERT 
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    {VALUES | VALUE} (value_list) [, (value_list)] ...
1:我们新建几个测试表dm_user_info , dim_calendar , dim_location , dim_store;

create table dm_user_info(
day_id int,
user_id varchar(20),
city_id varchar(20),
store_id int,
os varchar(20),
pv int
);
create table dim_calendar(
day_id int not null,
year_name varchar(20),
month_name varchar(20),
month_name_cn varchar(20)
);
create table dim_location(
city_id varchar(20),
country_name varchar(20),
provice_name varchar(20),
city_name varchar(20)
);
create table dim_store(
store_id int,
store_name varchar(20)
);
往表里面插入测试数据:
事实表:
insert into dm_user_info values(20170831,'00ef3f33f221260fdfsd','SY',1351,'android4.2',3);
insert into dm_user_info values(20170831,'04ere770fdfsdsdvjk78','SY',1351,'android4.5',1);
insert into dm_user_info values(20170831,'00efffdgjf3s26th6831','SY',1356,'android4.x',4);
insert into dm_user_info values(20170831,'00ef3f33f1ssefth6831','ZZ',1340,'iphone7',6);
insert into dm_user_info values(20170831,'00ef3f33f1ss26thfe31','WH',1354,'mac os x',7);
insert into dm_user_info values(20170831,'234cdfrrwed3654dfg44','GZ',1478,'iphone6',9);
insert into dm_user_info values(20170904,'sddf454564fbgh9552dg','JJ',1479,'android4.x',6);
insert into dm_user_info values(20170904,'ft44hyhu2129grgg653v','QD',1356,'iphone6',2);
insert into dm_user_info values(20170904,'ft44hyhu2129grgg6534','ZZ',1340,'mac os x',3);
insert into dm_user_info values(20170904,'234cdfrrwed3654dfg45','WH',1354,'iphone7',5);
insert into dm_user_info values(20170904,'234cdfrrwed3554dfg45','WH',1356,'iphone7',5);
insert into dm_user_info values(20170905,'00efffdgjf3s26th6836','GZ',1478,'android4.4',5);
insert into dm_user_info values(20170905,'04ere770fdfsdsdvjk75','CD',1983,'iphone6',8);
insert into dm_user_info values(20170905,'00ef3f63f211260fdfsd','QD',1356,'mac os x',1);
insert into dm_user_info values(20170905,'00ef3f63f267260fdfsd','QD',1983,'mac os x',7);
或者
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170831,'00ef3f33f221260fdfsd','SY',1351,'android4.2',3);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170831,'04ere770fdfsdsdvjk78','SY',1351,'android4.5',1);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170831,'00efffdgjf3s26th6831','SY',1356,'android4.x',4);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170831,'00ef3f33f1ssefth6831','ZZ',1340,'iphone7',6);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170831,'00ef3f33f1ss26thfe31','WH',1354,'mac os x',7);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170831,'234cdfrrwed3654dfg44','GZ',1478,'iphone6',9);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170904,'sddf454564fbgh9552dg','JJ',1479,'android4.x',6);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170904,'ft44hyhu2129grgg653v','QD',1356,'iphone6',2);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170904,'ft44hyhu2129grgg6534','ZZ',1340,'mac os x',3);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170904,'234cdfrrwed3654dfg45','WH',1354,'iphone7',5);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170904,'234cdfrrwed3554dfg45','WH',1356,'iphone7',5);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170905,'00efffdgjf3s26th6836','GZ',1478,'android4.4',5);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170905,'04ere770fdfsdsdvjk75','CD',1983,'iphone6',8);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170905,'00ef3f63f211260fdfsd','QD',1356,'mac os x',1);
insert into dm_user_info(day_id,user_id,city_id,store_id,os,pv) values(20170905,'00ef3f63f267260fdfsd','QD',1983,'mac os x',7);
地域维度表
insert into dim_location values('SY','中国','辽宁','沈阳');
insert into dim_location values('ZZ','中国','河南','郑州');
insert into dim_location values('WH','中国','湖北','武汉');
insert into dim_location values('NC','中国','江西','南昌');
insert into dim_location values('GZ','中国','江西','赣州');
insert into dim_location values('CS','中国','湖南','长沙');
insert into dim_location values('JJ','中国','江西','九江');
insert into dim_location values('LY','中国','河南','洛阳');
insert into dim_location values('JN','中国','山东','济南');
insert into dim_location values('QD','中国','山东','青岛');
insert into dim_location values('CD','中国','四川','成都');
时间维度表
insert into dim_calendar values(20170831,'2017','201708','2017年8月');
insert into dim_calendar values(20170901,'2017','201709','2017年9月');
insert into dim_calendar values(20170902,'2017','201709','2017年9月');
insert into dim_calendar values(20170903,'2017','201709','2017年9月');
insert into dim_calendar values(20170904,'2017','201709','2017年9月');
insert into dim_calendar values(20170905,'2017','201709','2017年9月');
insert into dim_calendar values(20170906,'2017','201709','2017年9月');
insert into dim_calendar values(20170907,'2017','201709','2017年9月');
店铺维度表
insert into dim_store values(1351,'家乐福');
insert into dim_store values(1356,'沃尔玛');
insert into dim_store values(1340,'全家');
insert into dim_store values(1354,'喜士多');
insert into dim_store values(1478,'望湘园');
insert into dim_store values(1479,'江边城外烤鱼');
insert into dim_store values(1983,'麻省理工');
此时我们插入的数据,我们在同一个seesion查询的时候,确实是能够正确的查询出来数据的。
那么此时我通过一个客户端工具去查询一下同一个表的数据试试,你们猜一下,此时能够查询到数据吗?
答案是否定的,此时我们查询不到我们刚刚插入进去的数据,为什么呢? 我在linux客户端这边的seesion查询明明没有问题啊,我数据也刚刚
插入进去了呀? 为什么我在另外一个客户端就查询不到了呢?
此时我就要和大家说一个新的概念了,也就是事务
什么是事务呢?简单来说,就是做一件事情的时候,该操作要么完全的执行,要么完全的不执行。
这句话怎么来理解呢?  刚刚我们仅仅只是插入数据,没有做其他操作,此时其实就已经触发了事务,那么事务什么时候结束呢?
这个结束的时候,肯定是需要人来告诉程序的,不然程序肯定不知道什么时候结束呀,对吧。
那么我们应该怎么来告诉我数据插入完成了,你帮我结束程序吧。
正常情况下,有两种操作,第一种就是commit 提交, 另一种就是rollback回滚。
如果你确认你的操作是正确的,那么就要执行一次commit.
如果你发现你的数据错误了,这一次插入的数据不需要了,那么就执行rollback
那么执行rollback之后,你们想一下,此时会回到什么状态呢? 正确的情况是回到上一次提交的状态,也就是说系统上次执行commit的时候
我们来看几个例子吧
就刚刚的表dm_user_info
我们插入了数据,但是在另外一个客户端查不到数据,那么我们此时执行一下
commit;
此时我们在windows的客户端查询一下数据看看
select * from dm_user_info;
此时能够查询到数据了,说明数据已经真正的保存到了数据库的表中.

我现在再插入一条新的数据,但是这条数据我其实是错误的,我不需要这一条数据的.
insert into dm_user_info values(20171005,'00ef3f63f267260fdfsd','QD',1983,'mac os x',7);
我不需要这一条数据,或者说我这个操作是错误的,我本来应该是执行其他操作的,这属于误操作.
那么此时我该怎么办呢?
此时执行rollback就行了。
rollback;

我们再来看一下,发现刚刚插入的那一条数据不见。也就是说数据回滚到了我上一次提交commit的时候。

最后再补充一个知识点,什么时候才会发生事务呢?

正常情况下,数据在插入,更新,删除的时候,才会发生事务,查询是不会发生事务的。

这些大家应该没有什么疑问吧? 有疑问的及时在微信上和我沟通。我会及时的给大家解答疑问。
好,这一节课就先讲到这里。

猜你喜欢

转载自blog.csdn.net/zhoushuilin/article/details/79361170