1、创建库、表、权限等
DROP DATABASE IF EXISTS `KMS_DB`;
CREATE DATABASE IF NOT EXISTS `KMS_DB` CHARACTER SET `utf8` COLLATE `utf8_general_ci`;
/*character set,数据库的字符集设置,collate此处是建表时utf8_genera_ci不区分大小写*/
USE `KMS_DB`;
SET FOREIGN_KEY_CHECKS=0;
/*取消外键约束,即在表之间有外键的情况下不影响删除表、更改表结构*/
-- Table structure for A_Device_Auth
-- ----------------------------
DROP TABLE IF EXISTS `A_Device_Auth`;
CREATE TABLE `A_Device_Auth` (
`DeviceID` bigint(20) NOT NULL,
`DeviceType` int(1) NOT NULL DEFAULT '1' COMMENT '0:未知;1:密钥管理终端;',
/*int not null default 1 comment 0,是指不可以插入null,不设置就是默认1,comment 是指用户显示创建表的信息的时候,可以看见注释信息,此处是字段的注释 */
`UserName` varchar(20) DEFAULT NULL,
/*default null是指不给值时就默认空 */
`Password` varchar(64) DEFAULT NULL,
`AuthStatus` tinyint(4) DEFAULT '1' COMMENT '0:无效;1:有效',
`UpdateTime` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`DeviceID`),
CONSTRAINT `FK_Auth_Terminal_Id` FOREIGN KEYFOREIGN KEY (`DeviceID`) REFERENCES `D_Quantum_Devices` (`DeviceID`)
/*constraint约束的目的是为了确保表中数据记录的完整性,有主键约束,外键约束,唯一性约束等等,这里用的是外键约束,涉及到两个表
即主表和从表,外键约束一般是从表声明。此处声明本表的DeviceID要被主表的DeviceID约束
*/
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='密钥管理终端的认证信息';
/*这里是表的注释*/
GRANT usage ON `KMS_DB`.* TO 'kms'@'localhost' IDENTIFIED BY 'Qkms@2016';
DROP USER 'kms'@'localhost';
/*先将可能存在的其他用户的权限清空,再删除*/
-- --------------------------------
-- 创建kms账户 默认密码kms
-- --------------------------------
CREATE USER 'kms'@'localhost' IDENTIFIED BY 'Qkms@2016';
/*重新创建kms用户,只用于本机连接,下面是赋予了具体的操作权限,在具体的表*/
-- --------------------------------
-- 为表赋予权限 表级别
-- --------------------------------
GRANT DELETE, INSERT, SELECT, UPDATE ON `KMS_DB`.`D_Quantum_Devices` TO 'kms'@'localhost';
GRANT DELETE, INSERT, SELECT, UPDATE ON KMS_DB
.A_Device_Auth
TO 'kms'@'localhost'; FLUSH PRIVILEGES;
2、创建索引
DROP TABLE IF EXISTS `t_bs_relay_path`;
CREATE TABLE `t_bs_relay_path` (
`I_RELAY_PATH_ID` varchar(32) NOT NULL COMMENT '中继路径标识。由S_RELAY_PATH_MOI_NAME的MD5生成。',
`S_RELAY_PATH_MOI_NAME` varchar(255) NOT NULL COMMENT '中继路径MOI名称。由起止端网元名称中间加双竖线生成,如:235739',
`S_RELAY_PATH_FRIEND_NAME` varchar(255) NOT NULL,
`S_BEGIN_NE_ID` varchar(32) NOT NULL COMMENT '起始端网元标识。是MOI标识。',
`S_END_NE_ID` varchar(32) NOT NULL COMMENT '终止端网元标识。是MOI标识。',
`I_DATA_SOURCE` decimal(4,0) NOT NULL COMMENT '数据来源。枚举来自字典表。',
UNIQUE KEY `UK_T_BS_RELAY_PATH` (`I_RELAY_PATH_ID`),
KEY `IDX_T_BS_RELAY_PATH` (`I_RELAY_PATH_ID`)
/*unique key 和 primary Key都是唯一性约束,前者是可以为NULL的,且前者是可以有多个的,但后者只能有一个
key即为索引,是unique索引,加速查询。写法可以是只声明单独的Key,也可以结合unique key或者primary key
所以,primarykey和unique key都是即可以作为约束,也可以是索引的基础
普通的索引就是index,而非Key*/
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、sql脚本中创建函数
drop function if exists SF_CLEAN_NE_SOFT_DATA /*drop function 和create function ,自定义或者叫创建函数*/ ;
create function SF_CLEAN_NE_SOFT_DATA
(
IN_NE_ID varchar(32), /*网元ID*/
IN_TYPE int /*类型,1,KS设备,2:其它设备*/
)
returns int /*返回结果:0,成功,-1,参数为空,-2,清除失败*/
/*函数创建的语法是
create function name 参数列表 returns 返回值的类型
begin
函数体
end
调用函数是 select 函数名 参数列表*/
begin
declare iRet int default 0; /*定义变量iRet*/
/*异常处理*/
declare continue handler for sqlexception set iRet = -2; /*declare exit或者continue,也就是异常退出或继续
if IN_NE_ID is not null and IN_TYPE is not null then
/*如果是KS设备,则删除进程信息*/
if 1 = IN_TYPE then
delete from T_DM_PROCESS where S_SOFT_ID in(select S_SOFT_ID from T_DM_SOFT where S_NE_MOI_ID = IN_NE_ID);
end if;
/*删除软件及模块信息*/
delete from T_DM_SOFT where S_NE_MOI_ID = IN_NE_ID;
else
set iRet = -1;
end if;
/*返回结果*/
return iRet;
end
;