背景介绍

数据库脚本 是包含不属于数据库架构定义的Transact-SQL(T-SQL)语句或实用工具(如 SQLCMD)的附加文件。可以将数据库脚本用作部署步骤的一部分(预先部署和后期部署脚本),数据库脚本也可以是存储在数据库项目中的常规管理脚本。。

在家办公的情况下,每位项目成员都在自己本地数据库操作,如何保持数据一致性,让小伙伴能正常使用你的功能,可重复执行的脚本就重要了。这里使用的是存储过程,记录下来,方便备查。

1、创建表

在创建脚本方面,oracle与mysql语法上有所区别。以新建人员表为例,下面是两种数据库的建库脚本。 oracle 建数据表脚本

//**建表之前进行判断**
DECLARE num NUMBER ;
BEGIN
 	SELECT COUNT (1) INTO num FROM user_tables WHERE TABLE_NAME = 'user' ;
 IF num = 1 THEN
 	//判断是否存在
 	 EXECUTE IMMEDIATE 'drop table user cascade constraints' ;
 END IF;
END;
/
create table user 
(
   id      VARCHAR2(36)  not null,
   sex     VARCHAR2(2),
   name    VARCHAR2(100),
   age     NUMBER,
   constraint PK_user primary key (id)
);
comment on table user is '人员表';
COMMENT ON COLUMN user.id IS '人员id';
COMMENT ON COLUMN user.sex IS '性别';
COMMENT ON COLUMN user.name IS '姓名';
COMMENT ON COLUMN user.age IS '年龄';
commit;

注意:在两个DECLARE之间需要用到 / 来进行分割,否则可能会报错如下: ORA-06550: 第 14 行, 第 1 列: PLS-00103: 出现符号 “DECLARE” ORA-06550: 第 22 行, 第 0 列: PLS-00103: 出现符号 “end-of-file"在需要下列之一时: ( begin case declare end exception exit for goto if loop mod null pragma raise return select update while with <a bind va

mysql建表脚本

//数据表创建前,进行查询,存在则需要删除
DROP TABLE IF EXISTS `user`;
//建表语句
CREATE TABLE `user` (
  `user_PKID` int(11)  UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `id` varchar(36) NOT NULL COMMENT '人员id',
  `sex` varchar(2) DEFAULT NULL COMMENT '性别',
  `name` varchar(100) DEFAULT NULL COMMENT '姓名',
  `age` int(10) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`user_PKID`),
  UNIQUE KEY `uniq_key_user` (`id`) COMMENT 'id:人员id索引'
) COMMENT ='人员表' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2、增加列

增加列,可以使用 alert tabel 表名 add (列名 类型) 如 对user表增加姓名列。

//声明columnCount,用于存放查询的结果
DECLARE columnCount number;   
begin 
	//从user_tab_columns 中查询是否存在该列
   	select count(1) into columnCount from user_tab_columns  where table_name = upper('user')  and column_name = upper('name');     
	if columnCount = 0 then 
	   EXECUTE IMMEDIATE
	   //执行表的新增列语句
	   'ALTER TABLE user ADD name varchar2(20)'; 
	end if;
end;
/

3、修改列

修改列的类型、长度等信息 可以使用 alert tabel 表名 modify (列名 类型) , 如 对user表增加姓名列的长度。

DECLARE columnCount number;   
begin 
   select count(1) into columnCount from user_tab_columns  where table_name = upper('user')  and column_name = upper('name ');     
	if columnCount = 0 then 
	   EXECUTE IMMEDIATE
	   'ALTER TABLE user MODIFY (name nvarchar2(50))'; 
	end if;
end;
/

4、更新表中数据

更新数据前,需要查询表中是否有该数据,不存在进行插入操作,存在进行更新操作。

DECLARE 
	num  NUMBER; 
BEGIN
		SELECT COUNT(1) INTO num FROM user WHERE id= '10235'; 
	IF num < 1 THEN   
		 insert into user(id,name,age,sex) values('10235' , 'jerry','18', '男' );  
	else    
		 update user set  name = "Tom" where id= '10235';    
	END IF; 
	COMMIT; 
END; 
/

博客参考

【1】https://blog.csdn.net/u010590016/article/details/40433695