本文介绍了DDL(数据定义语言)和DML(数据操纵语言)的基本概念及其在SQL脚本制作中的应用。DDL包括alter、create、drop、truncate等命令,用于定义或修改表结构;DML包括select、update、delete、insert等命令,用于操作数据库中的数据。文中详细说明了如何从数据库导出SQL脚本(DDL和DML),如何修改这些脚本以符合星辰系统执行要求,并介绍了如何保存和管理这些脚本文件,包括文件命名规则、脚本放置位置以及如何通过XML文件配置脚本的发布顺序和注意事项。此外,还简述了SQL脚本发布的原理和流程。
名称 | 描述 |
DDL | DDL是英文data definition language的缩写,意思是:数据定义语言,主要的命令有alter、create、drop、truncate,ddl主要用在定义或者改变表的结构。 |
DML | DML是英文data manipulation language的缩写,意思是:数据操纵语言,主要的命令有select、update、delete、insert,dml主要用来操作数据库中的数据。 |
1、制作SQL脚本
1.1、从数据库导出SQL脚本
DDL一般包含:增加单据使用到的表、索引新增语句,扩展单据增加的字段添加语句
DML包括菜单、编码规则、系统参数
菜单表:t_bas_homepage_menu
编码规则: t_cr_coderule t_cr_coderule_l t_cr_coderuleentry
系统参数:t_bas_sysparaconsole t_bas_sysparameter
可根据开发使用的情况选择性导出自己的数据制作sql脚本。
例如:
有扩展单据并增加字段,那需要导出增加字段的DDL;
有增加新单据的,需要导出新单据相关的表DDL;
有在首页新增自己的应用菜单的,则需要从菜单表中导出该应用对应的insert SQL;
有新建了编码规则的,则需要导出自己新建的编码规则insert sql;
有使用到系统参数,则需要导出自己新增的那条系统参数insert sql;
1.1.1、导出DDL
1.1.2、导出DML
1.2、修改SQL脚本为星辰可执行脚本
sql语句必须可重复执行,每句sql结束必须加【;】
1.2.1、修改DML SQL
将导出的sql做成可重复执行sql,插入前先删除。
例如:
导出来的Insert类sql:
INSERT INTO kd_1620359504142044323.t_bas_homepage_menu (fid, fseq, fnumber, fvisible, fpermission, fvectorvalue, fappid, fisv, fname, fappname, fsourceappid, fforkref) VALUES(1221608250227602432, 85, 'wfyx_001', '1', ' ', 'kdfont kdfont-tongyongzijin', '1LAJXX6CV9TV', ' ', '工资管理', '工资管理', ' ', '0'); |
改造后:
DELETE FROM t_bas_homepage_menu where fid=1221608250227602432;INSERT INTO t_bas_homepage_menu (fid, fseq, fnumber, fvisible, fpermission, fvectorvalue, fappid, fisv, fname, fappname, fsourceappid, fforkref) VALUES(1221608250227602432, 85, 'wfyx_001', '1', ' ', 'kdfont kdfont-tongyongzijin', '1LAJXX6CV9TV', ' ', '工资管理', '工资管理', ' ', '0'); |
1.2.2、修改DDL SQL
在导出的sql中, Sql语句添加固定头:/#dialect-simple#/ ,表名前添加固定#SCHEMANAME#.表名,字段名必须小写
例如:
导出来的建表sql:
CREATE TABLE wfyx_shangpingongxu (fid int8 NOT NULL,fentryid int8 NOT NULL,fseq int4 NOT NULL DEFAULT 0,fbasedatafield int8 NOT NULL DEFAULT 0,fpricefield numeric(23,10) NOT NULL DEFAULT 0,CONSTRAINT pk_yx_shangpingongxu PRIMARY KEY (fentryid)); |
改造后:
/#dialect-simple#/CREATE TABLE IF NOT EXISTS #SCHEMANAME#.wfyx_shangpingongxu (fid int8 NOT NULL,fentryid int8 NOT NULL,fseq int4 NOT NULL DEFAULT 0,fbasedatafield int8 NOT NULL DEFAULT 0,fpricefield numeric(23,10) NOT NULL DEFAULT 0,CONSTRAINT pk_yx_shangpingongxu PRIMARY KEY (fentryid)); |
导出来的建索引sql:
CREATE INDEX idx_yx_shangpingongxu_fk ON kd_wfyx_shangpingongxu USING btree (fid); |
改造后:
/#dialect-simple#/CREATE INDEX IF NOT EXISTS idx_yx_shangpingongxu_fk ON #SCHEMANAME#.wfyx_shangpingongxu USING btree (fid); |
导出来的增加字段sql:
ALTER TABLE kd_1618065434286742045.t_sal_invbillentry ADD wfyx_fileda citext NOT NULL DEFAULT ' '::citext; |
改造后
/#dialect-simple#/ALTER TABLE IF EXISTS ONLY #SCHEMANAME#.t_sal_invbillentry ADD COLUMN IF NOT EXISTS wfyx_fileda citext NOT NULL DEFAULT ' '::citext; |
2、保存SQL脚本
脚本文件编码为UTF-8
文件命名格式为:#{伙伴isv标识}_${版本号}_${应用编码}_${脚本说明关键字}_${SQLTYPE后缀}.sql
例如:isvnumber _1.0 _sal_createorder_table.sql
伙伴isv标识:扩展或者新建应用时,应用编码自动生成的前缀字符串,例如 销售管理 sal 扩展后编码为 xxxx_sal_fork_0001,则xxxx就是isv标识
脚本说明关键字:描述脚本的作用,例如是销售订单的脚本 则可描述为 salbill
DDL脚本(包括表创建、字段修改、索引增删等脚本)的后缀: _table.sql
例如:isvnumber _1.0 _sal_outbound_table.sql
DML脚本(包括与插入的菜单、编码规则等脚本)的后缀: _data.sql
例如:isvnumber _1.0 _sal_outbound_data.sql
2.1、拉下git xcmaster分支
查看git仓库地址:
将xcmaster分支拉到本地、文件结构大概如下:
若是需增加要dbschema sql或者 preinsdata sql则增加dbschema、preinsdata这两个文件夹,凡是增加了文件则必须增加 {应用编码}.xml 文件,如上图中的 bgp_sal_fork.xml,xml文件名称必须问应用编码,否则发布无效。
2.2、DML脚本放到${应用}/preinsdata文件夹下
2.3、DDL脚本放到${应用}/dbschema文件夹下
2.4、把脚本添加到配置文件中
2.5、新增sql
注意:若是sql发布成功,则不语允许修改已经发布成功的sql文件。
新增的sql应该新增加一个sql文件,将新的sql放入文件中并将文件路径和名称配置到xml文件中。
Sql发布原理:
1、发布时解析xml中配置的文件,按xml配置顺序执行,所以创建表的文件需要保证放在修改该表sql文件的前面。
2、每个sql文件发布成功后,系统记录sql文件名,发布失败则不记录。
下次发布更新,系统检查该sql文件名是否在系统中,存在则跳过不执行,不存在则执行文件中的sql。
3、提交SQL脚本
将修改完成的脚本提交到git 仓库xcmaster分支
推荐阅读