0
点赞
收藏
分享

微信扫一扫

mysql学习---简单的数据库初始化脚本和sql分析

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

;


举报

相关推荐

0 条评论