-
?
Java开发工程师如何在Mysql数据库中创建表
凯琳
展开
首先我们需要在数据库中创建两张表用来学习MyBatis对数据库增删改查的使用方法。如果是新安装的数据库可以直接复制我下面的sql进行表创建,如果是已使用中的数据库可能表明会与我的表名冲突,需要创建一个新的database再执行sql,也可以直接删除原来的表,如果表有外键关联需要先解除外键约束再删除。在这里我使用的连接数据库工具为Navicat,相对oracle的有SqlDevloper等。
DROP TABLE IF EXISTS TableName;
这个语句是删除表的,如果表名存在就执行删除。
SET FOREIGN_KEY_CHECKS=0;
这句sql意思是将mysql中外键检查终止,就是说FOREIGN_KEY_CHECKS=0时,外键约束失效,FOREIGN_KEY_CHECKS=1,外键约束启用。所以为了不影响以后的操作,建议在删除表之后将FOREIGN_KEY_CHECKS=1重新启用外键约束。
orders表接下来我们创建表
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '下单用户id',
`number` varchar(32) NOT NULL COMMENT '订单号',
`createtime` datetime NOT NULL COMMENT '创建订单时间',
`note` varchar(100) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `FK_orders_1` (`user_id`),
CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
这是一段数据库脚本,大家将这段复制到sqlPlus或者navicat中执行即可。在正式开发环境中,sql建表语句都不是我们手动写出来的,有很多免费的数据库建模工具如powerdesigner,帮助我们构建数据库模型来自动生成sql语句。非常的方便,Mybatis也有一个非常好用的插件叫做逆向工程,它可以帮我们通过sql脚本而生成对应的java 实体类,是持久层开发人员的神器啊,以后都会讲到。
create 创建 和 TABLE 表 这两个都是关键字,`orders` 是想要创建的表名,需要用单引号或双引导包起来,后面跟一个括号,括号内包含表内字段和字段的属性,括号内可以为空,那就会单独创建一张空的表。
`id` int(11) 是一种int类型的名字叫做id的字段,长度为位。比如1111这是四位,如果超过11位就不会显示。int类型可指定字段长度最大为255,非常庞大的数字。 当然也可以不指定它的长度,那么写法就是'id ' int ,唯一区别就是如果指定长度的话,前面有未被使用的位则自动填充0进去,如`id` int(11) ,它的值为11时显示就会是000000000011的形式。
varchar是一种字符数据类型,相当于java里的String,它的最大长度也是255,它的特点就是如果在括号内指定长度则为指定它的最大长度,如果有多余长度没有被占用的话他会自动根据实际情况来缩短自己长度而节省硬盘空间,虽然几位字符不会有多大,但是生产场景中的数据库中的数据量是非常大的,这是一个非常有价值的特性。另外它的实际长度是字段值得长度+1,在数据库设计时会留出一位专门用来保存它的长度,这也就是为什么能够自动缩短长度的原理。
datetime 是一种时间格式,与此相关的还有date和timestamp时间戳。那么他们有什么区别呢?
date:2018-4-22 不带时分秒的
datetime:相反,则是带时分秒的
timestamp:时间戳 (1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。)
COMMENT 关键字是我们为字段解释其含义的内容,后面通常在括号内写入字段的中文意思
NotNULL表示非空,即该字段永不为空,如果ID这种字段就不可以为空,则为数据类型的默认值也叫作缺省值。
KEY就是键,多用作的外键,它其实也是一种索引,能够帮助我们快速找到相应字段。
PRIMARY KEY为主键,主键与Key的区别就是主键通常是唯一的,在mysql中ID多为自增序列,后面在复杂项目也会用到联合主键。而Oracle的主键则是通过另一种方法叫做序列sequence,Oracle没有自增这一说而是每一次增加都是从sequence取出值来放入字段内。这一点很像是Java里面的数据结构队列。
CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
CONSTRAINT 约束,FOREIGN KEY外键,REFERENCES 关联,是为表添加外键约束关联至user表的,字段id下。
接下来我们为表插入字段的值。
INSERT INTO `orders` VALUES ('3', '1', '1000010', '2015-02-04 13:22:35', null);
INSERT INTO `orders` VALUES ('4', '1', '1000011', '2015-02-03 13:22:41', null);
INSERT INTO `orders` VALUES ('5', '10', '1000012', '2015-02-12 16:13:23', null);
insert 语句非常简单就不细说了,接下来我们创建另一张表,user表。
user表CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` date DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
创建user表INSERT INTO `user` VALUES ('1', '王五', null, '2', null);
INSERT INTO `user` VALUES ('10', '张三', '2014-07-10', '1', '北京市');
INSERT INTO `user` VALUES ('16', '张小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('22', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('24', '张三丰', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('25', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('26', '王五', null, null, null);
插入字段信息大家最好能够按照图片上的自己敲一遍,如果执行失败的话可以复制我的文本进行创建即可。这就是两个关联的表,我们可以使用Mybatis框架对数据库进行增删改查,单表查询或多表查询练习使用。大家有不明白的地方可以下房留言回复,数据库是开发人员的一种硬实力,其中存储过程,视图触发器等对熟悉面向对象的Java程序员都是难啃的骨头,一定要掌握扎实的数据库基础才行。
-
?
一篇文章搞懂MySQL分表
由藏鸟
展开
背景
企业开发中经常会遇见某个业务使用频繁,导致数据量特别大,而MySQL的单表承载的数据量有限,一般在1000万以内,字段多一些还会更少,我们解决这种业务就需要对数据进行拆分,也叫sharding ,将一个表拆分多个表,或者多个数据库,本次就介绍一下分表,知道分表逻辑分库也就不再是个难事。
几个概念
拆分因子:拆分因子也就是我们要按照什么维度拆分,比如,按照用户维度拆分,还是按照商户维度,还是其他,这里的用户和商户就是拆分因子,拆分因子的选取和业务强绑定,需要重点考虑。
哈希:也叫散列,百度百科中叫做将任意长度的输入,通过散列算法变换成固定长度的输入。
拆分因子选择
因子选择,要看这个表所支撑的业务
举例1、京东的京豆
京豆是属于用户维度的,我们的操作都是查询某个人的京豆,所以这个京豆库存流水信息就可以按照用户维度进行拆分,保证同一个人的京豆都存储在同一张表里面。
举例2、电商的商品信息
商品信息属于商家维度,我们一般都是进到一个店铺,查看这个店铺有哪些商品,商家查看自己的商品,所以这个商品信息就可以按照商家维度拆分,保证同一个商家的信息在同一表里面。
极端例子:订单表
订单表即属于商家,又属于用户,此时我们的选择是优先用户,可以按照用户维度进行拆分,其次通过冗余索引或冗余数据来为商户提供服务,比如创建一套商户维度的数据,然后商户维度数据采用异步非实时的机制进行同步数据,
拆分方法
如果你的业务是按照时间进行分表,每隔一段时间创建一个新表的话,就没有具体的拆分方式了,一定时间创建一个新表就可以了,但如果是有拆分因子,可以按照如下步骤考虑:
1、预估容量
预估该系统要支撑几年,大概的一个数据量,按照每个表1000w左右进行评估,如果未来5年可以达到1亿数据,那么拆分10张表即可,加上一定的上浮空间,一般用2的倍数,拆分成16张就够了。
2、考虑扩展性
如果我们16张表不够用的时候,该怎么办,那32张是否足够,如果提前做好扩展性。
实践
比如每个订单,都给用户发放一定的奖励金,我们要记录每次发放的奖励金信息,我们按照用户维度进行分表;
1、每天100w订单,也就100w条记录
2、系统支撑5年,5*365*100w 约等于 18.25亿
3、每张表最多存1000w数据,大约182张表
考虑到扩展性 我们准备最多分256张表(2的倍数)可以先拆分出16张表,随着业务扩展最多分256张
表的命名,bounty_001,bounty_016,bounty_032 ... bounty_240 累计16张表,选择等步长为了每个表之间可以做扩展(稍后讲到)
定位数据应该存储的表
一致性HASH的方式,大家可以自行百度一致性Hash算法
hash(userId)%256 = shardIndex ;对用户标识进行hash,然后除以256,取余数;
hash是哈希算法,推荐guava工具包有几个hash算法实现,
256是因为我们最多要拆分256张表,取余数就是为了定位数据需要存到那个后缀的表中。
可以维护一套余数与表之间的映射
1->bounty_001
2->bounty_001
.....
15->bounty_001
16->bounty_016
17->bounty_017
这样当计算出余数,就能从这个映射中知道应该存储到哪张表里面,通过动态组装SQL,变更表名,直接插入到对应的数据库即可。
扩容
当然我们可以直接一次性拆分256张表或者更多直接满足业务需求,但那样也会给我们的系统的维护带来一定的复杂度,毕竟每张表我们都要处理,所以常规都是按照上面的做法,先少分几张,保证业务应用,随着业务的增长再继续扩容。
上例中,如果我们需要扩容,我们可以在后缀为001和016之间,新建bounty_008,然后修改映射关系,将余数8-15的数据存储到bounty_008表中,同时将bounty_001表中的数据,复合余数8-15之间的数据,转移到bounty_008中,这就完成了数据表的扩容;
以上就是简单的数据库分表实践,是不是很简单,实际业务可能会遇到更复杂的,就像举例3中的场景。那就需要附加索引或者异步冗余,或者借助其他方式如ES等来解决。写的不好大家多多指正
分库分表
-
?
如何创建ACCESS数据库表格?
素颜
展开
access是微软的关系数据库管理系统,界面简洁易操作,是最好上手的数据库,易学易操作,是最适合非计算机专业人员学习的数据库。access拥有强大的数据处理和统计分析能力,处理速度快,操作方便。用access开发的各类企业软件,大幅了提高企业管理人员的工作效率。首先,我们来看一下access数据库最基本的建立数据库表格操作。
首先,从网络上下载安装access数据库。双击打开access数据库之后,就会看到如图所示的操作界面。双击界面中的“空数据库”,便可快速建立一个空白的数据库。
打开空白数据库之后,里面有一张数据表格,在操作界面左侧选中表格,右击可以给数据表进行命名。
数据表中的字段可右击自定义字段类型,例如”文本“”数字“”时间“等。
数据表中字段的名称可以双击修改,当有一条记录存贮在数据表格中时,ID属性会自动生成。
当数据表格中字段类型为”日期与时间“,系统会自动生成日历表供你选择,非常方便。
设置完成数据表格中的字段,并不断往表格中添加记录。至此,一张完整的数据表就生成了。
-
?
SQL增加、修改、删除是对DML语法的查询、更新
宣诗槐
展开
一、复制原有表
CREATE TABLE 新表名 如:mytable AS SELECT * FROM 复制源Oltable ;
二、对数据表加入新数据,
INSERT INFO 表名称 [(字段名称,字段名称2,....)] VALUES (数据,数据2,.....)
字条串:使用单引号' '声明,如'你好' ;
数据:直接编写,如:100
日期:有三种方式 可以选择
1、可以设置为当前日期SYSDATE
2、根据日期的保存结构编写字条串:'天-月-年';
3、可以利用TO_DATE()函数将字符串转换为DATE型数据
如完整语法: INSERT INTO myemp(empno,job,ename,sal,hiredate,deptno,mgr,comm) VALUES
(3927,'MANAGER','王三,3600,TO_DATE('1980-05-25','yyyy-mm-dd'),7820,1230,30);
简写(如果不写字段名称,所写数据顺序要与原表中数据类型顺序相同):
INSERT INTO myemp VALUES (3927,'李小二','打杂',3600,TO_DATE('1980-05-25','yyyy-mm-dd'),7820,1230,30);
通过对比,工作中使用建议使用完整格式,
三、修改表(更新表)数据
可以针对数据表中已有数据进行更新操作
UPDATE 表名称 SET 字段=内容,字段=内容.... [WHERRE 更新条件(S)] ;
UPDATE myemp SET sal=6430,comm=null where empno=3927 ;
更新LiLei的empno=9994,并将工资按平均工资计算,update myemp set empno=9994,sal=(SELECT round(avg(sal),2) FROM myemp) where ename='LILEI' ;
注意:如果没有设置条件将会更新所有的数据
UPDATE myemp set comm=null;
四、数据的删除操作
DELETE FROM 表名称 WHERE 条件 ;
单行删除操作
DELETE FROM myemp WHERE ename='李小二';
多行删除操作
DELETE FROM myemp where empno IN (7934,9994,9988) ;
可以按子句操作
如 DELETE FROM myemp WHERE sal< (SELECT avg(sal) FROM myemp ) ;
全表删除,慎重使用
DELETE FROM myemp ;
-
?
Mysql 数据库中表的排序字段类型要怎么选择?
Vivian
展开
我们在工作中设计表的时间经常会遇到排序字段的类型选择,是选择字符串类型,还是选择类型呢?还是有更好的选择呢?
下面我们要选择用字符串做为排序字段类型
创建表跟插入数据
创建表
插入数据
查询所以记录并排序
SELECT * from test_server ORDER BY sort ASC
执行查询并排序
从上图我们可以看出上面的排序是有问题,正确的排序应该是 1,2,4,12 而现在是1,12,2,4被当成字符串来比较了。
要怎么解决上面的问题呢?就是要把字符串转换为数值类型1,sort+0后再排序
执行查询并排序
2,使用MySQL函数CAST/CONVERT
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]CHAR[(N)]DATEDATETIMEDECIMALSIGNED [INTEGER]TIMEUNSIGNED [INTEGER]
执行查询并排序
执行查询并排序
以方法虽然都可以解决这个问题,但是还我喜欢直接把sort字段设计为数值类型。一步到位,节省一些执行的时间。
修改表字段类型
修改表字段类型
执行查询并排序
执行查询语句
如果你还有什么好的方法可以在评论中留言交流谢谢大家。欢迎关注老猫码坊,与老猫一起了解更多互联网科技和编程知识。
-
?
ER图和关系模型到MySQL数据库表
任莹莹
展开
本篇主要介绍了MySQL数据库表从ER图到关系模型,再到数据库表的创建过程及其表结构的修改。通过本篇的学习,可以掌握以下内容:
● 应用ER图和关系模型创建数据库表
● 数据库表结构的修改
1、mooc数据库表的ER图和关系模型
在创建数据库表之前,首先需要设计数据库表。设计数据库表的主要工具是ER图,使用ER图设计数据库表详见《数据库实体联系模型与关系模型》一文。mooc数据库表的ER图如下。
图 1 mooc数据库ER图ER图给出了mooc数据库表的图形化描述,但还缺乏建立数据库表必要的字段名称、字段类型等信息。还需要把ER图归纳为满足一定约束条件二维表的形式,才可以开始创建数据库表。mooc数据库二维表见下表。
2、MySQL数据库常用字段数据类型
表结构是由多个字段构成的,定义字段时需要定义字段的名称、数据类型、数据大小及其数据格式等内容。MySQL提供了一组预定义的数据规则,用于描述数据类型、数据大小及格式。当我们定义字段数据类型时,需要遵循这些规则。MySQL预定义的数据规则大体分为日期和时间、数值和字符串,下面分别给予说明。
(1)日期和时间
(2)整型数值
(3)浮点数值
浮点数值类型带有附加参数,m表示数值总的位数,d表示小数占的位数。例如,float(7,3) 表示数值总位数不会超过 7 位数字,小数点后面带有 3 位数字。对于小数点后面的位数超过允许范围的值,MySQL 会自动将它四舍五入为最接近它的值,因此使用浮点类型的时候,数值的精度会影响到查询操作。
(4)字符串
其中,char类型占用固定的存储空间,与char类型的字段值大小无关。varchar类型的存储空间是动态变化的,占用存储空间的大小与存储的内容相关。这里需要注意的是,char和varchar的长度是指可存储字符的个数,并不代表字节个数。
3、新建mooc数据库表
有了mooc数据库二维表,就可以开始创建数据库表了。使用MySQL命令或Navicat等数据库管理工具都可以创建数据库表。这里重点介绍使用MySQL命令创建数据库表,Navicat等数据库管理工具基本都是图形用户界面程序,操作相对容易掌握,这里就不再介绍了。
创建数据库表的MySQL命令语句如下:
create table table_name (column_name column_type [约束条件] [, column_name column_type [约束条件]…]);
其中,create table为命令串,table_name为创建表的名称,column_name为字段名称,column_type为字段数据类型,约束条件是字段约束项,可以允许有多个字段约束项,每个字段约束项之间用英文空格分隔。可以允许有多个字段,每个字段之间用英文逗号分隔。
下面的语句分别创建course表、teacher表、student表、student_course表。
其中,命令中not null是字段约束项,表示该字段不能为空。primary key用于定义哪个字段作为主键,可以定义多个主键,每个主键之间用英文逗号分隔。
3 、修改mooc数据库表结构
表创建完成后,由于各种原因可能需要修改表的结构。例如,在原有的表中增加字段或者删除字段,修改字段的数据类型等。
添加字段
MySQL添加字段的命令语句如下:
alter table 表名 add 字段1[, 字段2…]
例如,需要在course表增加时间字段和类型字段,可以使用下面的命令:
alter table course
add create_time date not null,
add type varchar(10);
修改字段
MySQL修改字段的命令语句如下:
alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];
例如,需要修改course表type字段的名称和类型,字段名称修改为course_type,数据类型修改为int。可以使用下面的命令:
alter table course
change type course_type int;
删除字段
MySQL修改字段的命令语句如下:
alter table 表名称 drop column 字段名称[, drop column 字段名称…]
例如,要删除course表的create_time字段和course_type字段,可以使用下面的命令:
alter table course
drop column create_time,
drop column course_type;
■ 课程小结
(1)在创建数据库表之前,首先要进行表的设计,设计表的主要工具就是ER图,ER图给出了数据库表的图形化描述,但还缺乏建立数据库表必要的字段名称、字段类型等信息。因此还需要把ER图归纳为满足一定约束条件的二维表的形式,才可以开始创建表。
(2)MySQL提供了一组用于创建和管理数据库表的命令,通过这些命令可以建立新表、修改表原有的结构。当然也可以使用Navicat等工具可视化地管理数据库表。
-
?
MySQL-表结构由你定义!
祁幻姬
展开
前言
数据库的DDL(data define language)操作,主要是用在定义或者改变表结构、数据类型、表之间的链接关系和约束等初始化工作。一般在的时候会先自动提交之前没有提交的事务,然后在操作。
MySQL中操作表的DDL语句
1、创建表
CREATE TABLE table_name (col1 type [,col2 type ,....])) ENGINE=存储引擎 DEFAULT CHARACTER=字符集 COLLATE=校对规则;
例如:
CREATE TABLE t1 ( id int , name varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
注意:一般 ENGINE=存储引擎 DEFAULT CHARACTER=字符集 COLLATE=校对规则这些都会有默认的参数,如果没有指定就会按照默认参数进行创建。
2、删除表
DROP TABLE table_name ;
例如:
DROP TABLE test.t1;
删除test数据库里面的t1表。
3、清空表数据
TRACATE TABLE test.t1;
清空test数据库t1表的数据。
4、复制表
CREATE TABLE new_table_name SELECT * FROM table_name ;
例如:
CREATE TABLE t1_20180728 SELECT * FROM t1;
这个经常在修改某张表的时候,进行快速的备份,如果修改不成功可以马上还原回去。
5、增加列
ALTER TABLE table_name ADD COLUMN col_name type;
例如:
ALTER TABLE t1 ADD COLUMN age int default 0;
一般随着业务的需求,会有增加字段的需求。
6、删除列
ALTER TABLE table_name DROP col_name;
例如:
ALTER TABLE t1 DROP age;
一般是不需要删除,不想用就放着不用就好了。
7、、修改列名
ALTER TABLE tablename CHAGE old new newtype;
例如:
ALTER TABLE t1 CHANGE age learn_class varchar(32);
不仅可以修改成名也可以修改类型,如果遇到可以转换的数值或者字符串就直接转换,如果不能转换就设置成类型默认值。数据量大操作会很慢哦。
8、修改列的类型
ALTER TABLE table_name MODIFY columne1 newtype;
例如:
ALTER TABLE t1 MODIFY learn_class int;
总结
在生产环境中,很少对表字段进行修改或者删除了,会引起锁表的,慎操作,建议在临时表操作,然后再rename。
-
?
在Navicat中如何新建数据库和表并做查询
Rhyl
展开
上一篇文章,小编给大家分享了在Navicat中如何远程连接数据库,没有来得及上车的小伙伴可以戳这篇文章:在Ubuntu14.04中配置mysql远程连接教程。今天小编给大家分享一下如何在Navicat中新建数据库和表。
用过远程连接数据库工具的小伙伴都知道,在Navicat中新建数据库和表并不太难,具体的教程如下所示。在这里依然以IP地址为192.168.255.131的主机数据库为例。
1、首先登陆Navicat,然后顺利连接数据库,如下图所示。
2、在IP地址为192.168.255.131数据库上右键,然后点击“新建数据库”,如下图所示。
3、之后弹出“新建数据库”对话框,在“常规”选项卡中需要设置数据库名、字符集和排序规则。
4、正常情况下,建议数据库名字以英文命名,字符集选择utf8, 排序规则选择utf8_general_ci。在这里将数据库名命名为scrapyspider,字符集选择utf8,排序规则选择utf8_general_ci,如下图所示。设置完成之后点击“确定”。
5、之后可以看到scrapyspider数据库创建成功,点击scrapyspider数据库,可以看到此时尚未创建任何的表。
6、在左侧选项卡点击“表”,然后右键点击选择“创建新表”,之后将弹出下图的新建表界面
7、在“名”这一栏添加字段,之后选择类型和长度,设置小数点和是否允许空值,如下图所示。如果想增加字段,则点击“添加栏位”即可。
8、下图中,作为演示。添加了time、name和id三个字段,并将id设置为主键,如下图所示。
9、设置完成之后,按下快捷键Ctrl+s,保存设置的内容,弹出表名菜单,如下图所示。在表名窗口中需要输入表名,在这里将表命名为article,之后点击确定即可。
10、保存之后,可以看到表名由之前的“无标题”变成了现在的article,并且可以看到所设置的字段。
11、接下来在字段中输入内容。在time字段下输入时间,在nam字段下输入dcpeng,将id字段设置为1.设置完成之后按下快捷键Ctrl+s,保存设置,如下图所示。
12、在Navicat的选项卡中点击“查询”,然后点击“新建查询”,之后弹出查询窗口,如下图所示。当前并未输入任何的SQL语句。
13、在查询窗口中输入SQL语句进行搜索,如下图所示,试图查询article表中的数据。SQL语句写完之后,点击“运行”选项卡,之后查询到的结果将会在同一个窗口下进行显示,如下图所示。
14、当然了,右键点击article,可以看到关于表格的操作还有许多,在此就不赘述了。
关于Navicat中的建库、建表和简单查询的教程已经完成,希望对大家的学习有帮助。
-
?
SQL数据库用存储过程批量更改某一个字段的值(单表也可以)
秋风
展开
USE [aa] --其中aa是数据库库名
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--批量替换数据库所有相同字段的值,
--如果@Table值不为空,则只更新传入表该字段的值
--用法1:在查询分析器写入如示语句执行批量更改:BatchModify '字段名', '旧值', '新值', ''
--用法2:在查询分析器写入如示语句执行批量单表更改:BatchModify '字段名', '旧值', '新值', '表名'
Create Procedure [dbo].[BatchModify](
@Field nvarchar(40),--要替换值的字段
@OldValue nvarchar(50),--旧值
@NewValue nvarchar(50),--新值
@Table nvarchar(40)--待替换的表名
) as
begin
--字段、旧值、新值不能为空
if (@Field <> '') and (@OldValue <> '') and (@NewValue <> '')
begin
--传入表名不为空,则更新该表的该字段值
if @Table <> ''
begin
Exec('Update ' + @Table + ' Set ' + @Field + ' = ''' + @NewValue +
''' Where ' + @Field + ' = ''' + @OldValue + '''')
Print '更改单个表的字段值成功!'
end
else
begin
--使用游标进行批量更新
Declare @TableTemp nvarchar(40)
--Declare @ID Int
Declare BatchMod Cursor For
--找出字段所在表的ID
Select T.[Name] From SysColumns C Inner Join SysObjects T
On C.ID = T.ID Where (C.[Name] = @Field) and (T.XType = 'U')
Open BatchMod
Fetch Next From BatchMod Into @TableTemp
While @@FETCH_STATUS = 0
begin
--根据表ID找出表名
--Select @TableTemp = [Name] From SysObjects Where (ID = @ID)
--执行批量修改
Exec('Update ' + @TableTemp + ' Set ' + @Field + ' = ''' + @NewValue +
''' Where ' + @Field + ' = ''' + @OldValue + '''')
--循环,抓出下一条
Fetch Next From BatchMod Into @TableTemp
end
--关闭、释放游标
Close BatchMod
Deallocate BatchMod
Print '批量更改数据库中所有表的字段值成功!'
end
end
else
begin
Print '字段、旧值或者新值没有输入!请检查!'
end
end
-
?
数据透视表|关于字段,你不知道的秘密
华盼晴
展开
视频讲解
文字详解
我们看一下我们的原始表,现在要求根据利润计算各个部门各个地区的提成总额,我们首先按照要求进行数据透视;
按照“部门-地区-利润”进行表格数据添加;
假设我们的提成比率是20%,那么按照我们习惯的EXCEL操作方法,我们会直接添加公式计算;
然后进行公式的填充下拉,这时候我们发现数据全部是错误的,只有第一行进行了计算,这里我们要进行批量计算需要用到计算字段的功能;
我们依次点击“数据透视表工具-分析-字段、项目和集-计算字段”;
我们将要添加的字段设定为“提成”,在“公式框”内删除0,点击双击“字段”框内的利润添加;
然后,在公式框内输入提成公式“利润*20%”;
点击添加,“提成”字段被添加进“字段框”内方便用以后我们随时调用,然后点击确定;
可以看到,所有按照部门-地区级次计算的提成数据全部被计算出来了;
数据透视表本节课主要分享的知识点如上,你学会了嘛?有不清楚的地方欢迎给我们留言,我们将及时的给你答复。
数据库表添加字段
-
1、只需3秒快速实现求和
-
2、如何快速填充序号
-
3、如何自动填充序号(公式法)
-
4、数据条的神奇应用
-
5、多文本快速合并
-
6、查找与替换的不同玩法
-
7、快速定位到指定区域
-
8、数据排序、工资条制作
-
9、快速筛选(模糊、精确筛选)
-
10、快速插入空行
-
11、快速删除空行
-
12.快速跳转到天涯海角
-
13、.同时查看两个Excel文件
-
14、用条件格式扮靓报表
-
15、一键插入Excel图表
-
16、批量处理行高、列宽
-
17、利用拆分功能查看数据
-
18、批量录入相同内容
-
19、工作表快速跳转
-
20、批量录入表格模板(精品课程)
-
21、Excel函数与公式的应用、公式循环引用的查找
-
22、IF函数单条件判断同比增长
-
23、用sum函数 格式相同,连续多表数据汇总
-
24、excel快捷键
-
25、VLOOKUP函数——根据销售员匹配销售额
-
26、统计各部门销售总额
-
27、统计指定条件个数
-
28、怎样输入当前日期和时间、星期数
-
29、销售业绩排名
-
30、Sumproduct函数-万能函数(销售额汇总求和)
-
31、根据销售员,地区,商品名称汇总
-
32、批量替换PPT字体
-
33、给销售额数据批量添加万元单位
-
34、一秒快速核对两列数据
-
35、快速定位到指定单元格或区域
-
36、快速制作双行标题工资条
-
37、给你的表格做个瘦身
-
38、快速打开常用的Excel文件
-
39、快速打开多个Excel文件
-
40、利用创建组—快速隐藏/展开多列数据
-
41、快速制作下拉菜单
-
42、复制粘贴表格,如何保留数据源列宽格式一致?
-
43、两列数据位置互换
-
44、1秒钟扮靓报表——如何实现表格隔行换色
-
45、快速删除重复记录——保留唯一值
-
46、快速向下填充、向右填充,文本或公式
-
47、给Excel文件添加密码
-
48、插入带图片的批注
-
49、输入公式后不计算?
-
50、如何设置单元格缩进
-
51、快速解决Excel表格总显示货币格式
-
52、批量添加万元单位
-
53、你会四舍五入么?
-
54、用RAND函数机选彩票
-
55、冻结首行你会么?
-
56、超链接的高级应用
-
57、IFERROR函数-屏蔽错误值
-
58、批量填充颜色
-
59、录入数据
-
60、快速输入工号
-
61、快速行列转置
-
62、自定义缩放界面
-
63、多个单元格同时输入
-
64、如何计算立方米?
-
65、快速制作双行标题工资条
-
66、输入带方框的√和×
-
67、快速将姓名对齐
-
68、快速输入性别
-
69、按单位职务排序
-
70、自动计算合同到期日期
-
71、计算时间间隔
-
72、日期和时间的拆分
-
73、快速处理不规范的日期格式
-
74、快速填充合并单元格
-
75、效率加倍的快捷键
-
76、快速复制表格和对象
-
77、快速创建工作表副本
-
78、快速复制序列号
-
79、快速显示公式
-
80、多个单元格同时输入
-
81、快速调整显示比例
-
82、快速自动填充
-
83、快速填充(Ctrl+E)
-
84、Ctrl与数字键结合
-
85、快速将多列数据整理为1列
-
86、快速将1列数据拆分为多列
-
87、快速定位公式
-
88、快速录入数据
-
89、快速累计求和
-
90、身份证号码显示为0怎么办?
-
91、快速制作斜线表头
-
92、文本竖向显示
-
93、神奇的监视窗口
-
94、不一样的格式刷
-
95、快速美化图表
-
96、快速生成当前日期
-
97、快速找出循环引用
-
98、快速提取信息
-
99、二维表快速转换为一维表
-
100、快速多表合并