一、KingbaseES数据库增删改查操作详解

1. 新增数据(INSERT)

KingbaseES中使用INSERT语句向表中添加新数据,基本语法为:

INSERT INTO 表名(字段1, 字段2, ...) VALUES(1,2, ...);

示例:向用户表(user_info)插入一条新记录

INSERT INTO user_info(id, username, age) VALUES(1, '张三', 25);

可同时插入多条记录,只需在VALUES后添加多组值,用逗号分隔。

2. 查询数据(SELECT)

SELECT语句用于从表中查询数据,基本语法为:

SELECT 字段1, 字段2, ... FROM 表名 WHERE 条件;

示例1:查询用户表中所有记录

SELECT * FROM user_info;

示例2:查询年龄大于20的用户姓名

SELECT username FROM user_info WHERE age > 20;

可通过ORDER BY进行排序,使用LIMIT限制返回条数。

3. 更新数据(UPDATE)

UPDATE语句用于修改表中已有数据,基本语法为:

UPDATE 表名 SET 字段1=新值1, 字段2=新值2 WHERE 条件;

示例:将id为1的用户年龄更新为26

UPDATE user_info SET age=26 WHERE id=1;

注意必须添加WHERE条件,否则会更新表中所有记录。

4. 删除数据(DELETE)

DELETE语句用于删除表中的记录,基本语法为:

DELETE FROM 表名 WHERE 条件;

示例:删除id为1的用户记录

DELETE FROM user_info WHERE id=1;

同样需要注意WHERE条件,若省略将删除表中所有数据。

以上四个操作构成了KingbaseES数据库的基本数据操作,通过合理组合使用这些语句,可以实现对数据库的完整管理。在实际应用中,需注意SQL语句的规范性和安全性,尤其是涉及删除和更新操作时要谨慎处理条件判断。

信创产业发展是国家经济数字化转型、提升产业链发展的关键,是科技自立自强的核心基座,其本质是实现中国信息化产业的自主可控。医疗信创作为关系到民生保障的核心领域,也正同步经历着从技术依赖到自主可控的深刻变革。

2025年4月30日,常德市第二人民医院(下称常德二院)全栈国产化信创项目正式上线,支撑医院30余个核心系统平稳运行,患者候诊时间缩短了20%,医疗新质生产力正在加速生成。该项目是全国首个地方三级医院全栈国产化医疗信创项目,打破了医疗信息化领域对国外技术的依赖,成为全国医疗行业自主可控转型的可复制样板。

在这里插入图片描述

二、头雁领航 - 激发医疗新质生产力

作为湖南省三级医院、国家疼痛综合管理试点医院、区域公共卫生救治中心,常德二院承担着常德及湘西北地区数百万群众的医疗保障重任。常德二院的医疗信创转型,既是国家信创战略向医疗领域深度渗透下的必然选择,也是常德二院通过技术创新提升医疗服务能力的主动实践。

湖南省提出了“医疗信创看湖南”的发展目标,而常德二院的信创实践被定位为湖南省医疗全面信创的试验田,赋予了“头雁”的使命:探索一条可复制、可推广的“新路子”,为湖南省医疗领域推进信创工作提供常德经验。

医院信创是建设是一项系统性工程,需要全院全员协同参与。在常德二院,这场变革被确立为“一把手工程”,组成了信创信息化领导小组,统筹协调全院资源。湖南省卫健委、省委机要局,常德市市委办、财政局、卫健委、数据局和电信常德分公司等单位也对项目给予了大力支持。

在这里插入图片描述

常德二院党委书记马明祥

常德二院党委书记马明祥表示,全院信创宜早不宜迟,常德二院已经迎来了全院国产化信创的“天时地利人和”:医院信创方案获得了湖南省、常德市的高度认可;医院业务体量适中,没有大型医院的包袱,也能有效验证国产信创系统;全院对于全栈国产化信创决心坚定,获得了各方面的大力支持。

2025年4月30日,全国首个地方三级医院全栈国产化医疗信息系统在常德二院成功上线,实现包含HIS、EMR、PACS、LIS等核心业务系统在内的全栈国产化覆盖。系统整体上线后,医护人员可通过“患者360视图”调阅患者此前来院的检验、影像、电子病历等历史诊疗数据。

系统性能改善方面,最明显的莫过于影像调阅速度,以往医生需要在不同系统间反复切换,现在只需要点击医学影像模块,就可以快速阅片。依托智能报表平台,日常统计、医保对账等工作的处理效率较传统模式提升,重要报表数据实时生成,大大提高了查询效率,管理效能获得跃升。

在这里插入图片描述

张兴林主任介绍信创成果应用

 

全栈国产化带来的安全优势也已经开始显现,张兴林主任介绍,在最近一次的漏扫检测当中,没有发现任何系统漏洞,“这在以往用国外软硬件的时候是不可想象的,之前即使是发现漏洞也没法得到厂家的支持,现在心里有了底气”。

三、核心支撑 - 电科金仓奠定数据底座

在医疗信息化系统中,数据库不仅承载着海量患者诊疗数据、电子病历、影像资料等核心信息,还需支撑高并发实时业务场景及复杂的数据分析需求,其自主可控性直接关系到医疗数据安全、业务连续性和行业数字化转型进程。

在这里插入图片描述

常德二院信息科主任张兴林

 

常德二院信息科主任张兴林介绍,在数据库的选型上,医院首先确认的是厂商对于医疗信创的热情。“医疗行业的业务并发可能不会太大,但是业务逻辑异常复杂”,作为第一个吃螃蟹的人,需要数据库厂商的大力配合。张兴林表示:“电科金仓真正做到了不计得失,随时响应,全力配合。

在数据库选型过程中,医院抽取了此前的门诊和住院数据,输入金仓数据库做压力测试,实测表明,金仓数据库的性能和国外主流数据库没有明显差别,在某些方面还做了有针对性的优化。金仓数据库的优异表现也给医院吃下了一颗定心丸,“我们认定数据库不是信创的瓶颈,可以放心使用国产数据库”。

系统上线前的压力测试模拟了医院规模并发每小时1000多条业务建卡、就诊记录,每小时产生医嘱记录8000余条,金仓数据库均能够轻松应对。系统上线100余天以来,金仓数据库有效支撑了常德二院诊疗、医院管理等场景,挂号、医嘱下达、医疗影像调阅等业务响应速度相较替换前有了大幅度提升,有效提升了患者就医体验。

在这里插入图片描述

常德二院门诊采用信创系统下达医嘱

四、生态共建 - 携手护航医疗信创发展

常德二院全栈国产化信创成功的背后是一张紧密协作的国产生态图谱,电科金仓、东华医为、海光、银河麒麟等国产信创厂家,共同打通了从硬件到软件,从基础设施层-系统层-应用层的全链路100%国产化路径

医疗信创的难点,在于核心业务系统与国产化技术栈的深度耦合,需要针对医疗场景进行全链路的联合攻坚。为了实现数据库与业务系统的共生,常德二院、电科金仓和东华医为组建了精英团队进行联合办公。谈起项目攻坚期的情况,张兴林主任依然历历在目:“当时医院进驻了200多名各个单位的工程师,医院腾出了三个住院院区给工程师提供食宿。”有前来参观考察的厂商表示,“(常德二院)信息科就像是一家科技公司”。

在这里插入图片描述

信创厂商在常德二院讨论系统切换方案
 

七个多月的联合攻坚解决了9000多个问题点,常德二院全栈国产化信创项目终于从概念实现了落地。电科金仓和东华医为等合作伙伴基于KES进行了全院系统开发,针对医疗业务特点优化数据库参数配置,采用读写分离架构提升并发处理能力,合理设计索引和分区策略,保障数据库性能;针对医疗业务特点重写关键SQL,提升查询效率;采用微服务架构降低数据库压力,提高系统可扩展性。

这种协同开发模式,让数据库不再是孤立的技术组件,而是深度融入医疗业务流程的中枢神经。电科金仓和东华医为的联合实践,也更加丰富了医疗信创领域的生态,国产软硬件能力获得了提升,形成了可复制的方案,为行业推广复制奠定了基础。

在以科技创新驱动医疗变革的时代浪潮中,医疗产业如何向“新”而行,向“质”而造?常德二院全栈国产化信创项目已经迈出了关键一步,而更广阔的未来正在该项目所代表的医疗新质生产力中延申,落在每一份病历的数据里,体现在患者的每个点滴便利。

以下是结合KingbaseES数据库操作与医疗信创项目的扩展内容,重点补充代码实现、技术细节及行业应用场景,总字数约2000字:


五、KingbaseES在医疗信创中的代码实践

1. 医疗数据表结构设计示例

医疗信创项目需满足《电子病历系统应用水平分级评价标准》,以下为关键表的KingbaseES设计示例:

患者基本信息表(patient_info)
CREATE TABLE patient_info (
    patient_id VARCHAR(20) PRIMARY KEY,          -- 患者唯一ID
    name VARCHAR(50) NOT,                  -- 姓名
    gender CHAR(1) CHECK (gender IN ('M','F')), -- 性别
    birth_date DATE,                            -- 出生日期
    id_card VARCHAR(18) UNIQUE,                 -- 身份证号
    phone VARCHAR(15),                          -- 联系电话
    address TEXT,                               -- 地址
    create_time TIMESTAMP DEFAULT NOW(),        -- 创建时间
    update_time TIMESTAMP                       -- 更新时间
);

-- 创建触发器自动更新修改时间
CREATE OR REPLACE FUNCTION update_timestamp()
RETURNS TRIGGER AS $$
BEGIN
    NEW.update_time = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_update_time
BEFORE UPDATE ON patient_info
FOR EACH ROW EXECUTE FUNCTION update_timestamp();
电子病历表(emr_record)
CREATE TABLE emr_record (
    record_id SERIAL PRIMARY KEY,               -- 记录ID(自增)
    patient_id VARCHAR(20) REFERENCES patient_info(patient_id),
    doctor_id VARCHAR(10) NOT,             -- 医生ID
    department VARCHAR(30),                     -- 科室
    diagnosis TEXT,                             -- 诊断结果
    treatment_plan TEXT,                        -- 治疗方案
    create_time TIMESTAMP DEFAULT NOW(),
    CONSTRAINT chk_diagnosis CHECK (length(diagnosis) > 0)
);

-- 创建全文检索索引(KingbaseES支持中文分词)
CREATE INDEX idx_emr_diagnosis ON emr_record USING gin(to_tsvector('zh', diagnosis));

2. 医疗场景复杂查询实现

多表关联查询(患者360视图)
-- 查询患者完整诊疗信息
SELECT 
    p.name AS patient_name,
    p.gender,
    p.birth_date,
    e.diagnosis,
    e.treatment_plan,
    d.department_name,
    r.exam_name,
    r.exam_result
FROM 
    patient_info p
JOIN 
    emr_record e ON p.patient_id = e.patient_id
JOIN 
    department d ON e.department = d.dept_code
LEFT JOIN 
    exam_record r ON p.patient_id = r.patient_id
WHERE 
    p.patient_id = 'P100001'
ORDER BY 
    e.create_time DESC;
医疗数据统计报表
-- 按科室统计门诊量(支持分页)
SELECT 
    d.department_name,
    COUNT(e.record_id) AS outpatient_count,
    AVG(EXTRACT(EPOCH FROM (e.create_time - p.create_time))/60) AS avg_wait_time
FROM 
    emr_record e
JOIN 
    department d ON e.department = d.dept_code
JOIN 
    patient_info p ON e.patient_id = p.patient_id
WHERE 
    e.create_time BETWEEN '2025-01-01' AND '2025-12-31'
GROUP BY 
    d.department_name
HAVING 
    COUNT(e.record_id) > 100
ORDER BY 
    outpatient_count DESC
LIMIT 10 OFFSET 0;  -- 分页参数

3. 高性能医疗数据操作优化

批量插入优化(医嘱数据)
-- 使用COPY命令替代INSERT(性能提升5-10倍)
COPY doctor_order(order_id, patient_id, drug_name, dosage, frequency) 
FROM '/path/to/order_data.csv' 
WITH (FORMAT csv, HEADER true, DELIMITER ',');

-- 或使用预编译语句批量插入
DO $$
DECLARE
    i INT;
BEGIN
    FOR i IN 1..1000 LOOP
        EXECUTE format('INSERT INTO doctor_order VALUES (%s, %L, %L, %L, %L)',
            i, 'P100001', '阿莫西林胶囊', '0.5g', 'tid');
    END LOOP;
END $$;
医疗影像元数据更新
-- 原子性更新影像检查状态
BEGIN;
UPDATE exam_record 
SET 
    exam_status = 'completed',
    report_time = NOW(),
    report_doctor = 'D2023'
WHERE 
    exam_id = 'EX20250001' 
    AND exam_status = 'processing';

-- 记录操作日志(KingbaseES支持事务性DML)
INSERT INTO operation_log 
VALUES (DEFAULT, 'exam_update', NOW(), '影像报告完成', 'D2023');
COMMIT;

4. 医疗信创特色功能实现

数据脱敏处理(符合等保2.0要求)
-- 创建脱敏视图
CREATE VIEW patient_info_masked AS
SELECT 
    patient_id,
    CASE 
        WHEN current_user = 'doctor' THEN name
        ELSE regexp_replace(name, '(.).*', '\1*') 
    END AS name,
    gender,
    CASE 
        WHEN current_user = 'admin' THEN id_card
        ELSE substr(id_card, 1, 6) || '********' || substr(id_card, 15, 4)
    END AS id_card,
    phone
FROM patient_info;

-- 授予医生角色访问权限
GRANT SELECT ON patient_info_masked TO doctor_role;
医疗智能预警(存储过程示例)
CREATE OR REPLACE FUNCTION check_drug_allergy() RETURNS TRIGGER AS $$
DECLARE
    allergy_count INT;
BEGIN
    -- 检查患者药物过敏史
    SELECT COUNT(*) INTO allergy_count
    FROM allergy_record a
    WHERE a.patient_id = NEW.patient_id
    AND a.allergen_type = 'drug'
    AND a.allergen_name = NEW.drug_name;

    -- 存在过敏则阻止开药
    IF allergy_count > 0 THEN
        RAISE EXCEPTION '患者对药物%存在过敏记录,禁止开具!', NEW.drug_name;
    END IF;

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 创建触发器
CREATE TRIGGER trg_drug_allergy_check
BEFORE INSERT ON doctor_order
FOR EACH ROW EXECUTE FUNCTION check_drug_allergy();

5. 医疗信创系统维护脚本

数据库健康检查脚本
-- 定期执行的存储过程
CREATE OR REPLACE PROCEDURE db_health_check()
LANGUAGE plpgsql AS $$
DECLARE
    v_result TEXT;
    v_count INT;
BEGIN
    -- 1. 检查表空间使用率
    SELECT pg_size_pretty(pg_tablespace_size('pg_default')) INTO v_result;
    INSERT INTO health_check_log VALUES (NOW(), 'tablespace_size', v_result);

    -- 2. 检测死锁
    SELECT COUNT(*) INTO v_count FROM pg_stat_activity WHERE waiting = true;
    IF v_count > 0 THEN
        INSERT INTO health_check_log VALUES (NOW(), 'deadlock_warning', '发现'||v_count||'个等待会话');
    END IF;

    -- 3. 验证关键表记录数
    FOR v_result IN 
        SELECT 'patient_count:'||COUNT(*) FROM patient_info
        UNION ALL
        SELECT 'emr_count:'||COUNT(*) FROM emr_record
    LOOP
        INSERT INTO health_check_log VALUES (NOW(), 'table_stats', v_result);
    END LOOP;
END;
$$;

-- 配置定时任务(通过KingbaseES的Scheduler)
SELECT scheduler.create_job('db_health_check', '0 3 * * *', 'CALL db_health_check()');
数据归档脚本(医疗数据生命周期管理)
-- 将历史数据归档到分区表
CREATE OR REPLACE PROCEDURE archive_old_data()
LANGUAGE plpgsql AS $$
BEGIN
    -- 创建按月分区表(需提前创建)
    EXECUTE format('
        INSERT INTO emr_record_archive_%s 
        SELECT * FROM emr_record 
        WHERE create_time < DATE %L',
        to_char(NOW() - INTERVAL '1 year', 'YYYY_MM'),
        date_trunc('month', NOW() - INTERVAL '1 year')
    );

    -- 删除已归档数据
    DELETE FROM emr_record 
    WHERE create_time < date_trunc('month', NOW() - INTERVAL '1 year');

    -- 重建索引优化查询
    REINDEX TABLE emr_record;
END;
$$;

6. 医疗信创安全加固方案

数据库审计配置
-- 启用审计功能
ALTER SYSTEM SET audit_enabled = on;
ALTER SYSTEM SET audit_log_dir = '/var/log/kingbase/audit';

-- 配置审计规则(记录所有DML操作)
SELECT audit.add_rule('emr_access', 
    'SELECT,INSERT,UPDATE,DELETE ON emr_record BY doctor_role');

-- 查看审计日志
SELECT * FROM audit.log WHERE timestamp > NOW() - INTERVAL '1 day';
医疗数据加密示例
-- 创建加密扩展(KingbaseES支持国密算法)
CREATE EXTENSION IF NOT EXISTS pgcrypto;

-- 加密存储敏感信息
INSERT INTO sensitive_data (patient_id, data_type, encrypted_data)
VALUES (
    'P100001',
    'HIV_RESULT',
    pgp_sym_encrypt('阳性', 'secret_key')
);

-- 查询时解密
SELECT 
    patient_id,
    pgp_sym_decrypt(encrypted_data::bytea, 'secret_key') AS hiv_result
FROM sensitive_data
WHERE data_type = 'HIV_RESULT';

总结

  1. 医疗数据模型设计

    • 采用主子表结构(如患者主表+病历子表)
    • 关键字段添加约束(CHECK约束保障数据质量)
    • 设计触发器自动维护数据一致性
  2. 性能优化策略

    • 医疗全文检索使用中文分词索引
    • 高频访问表采用分区设计
    • 批量操作使用COPY命令替代循环INSERT
  3. 信创特色功能

    • 基于角色的动态数据脱敏
    • 医疗业务规则的存储过程封装
    • 国密算法支持的加密存储
  4. 系统维护方案

    • 自动化健康检查脚本
    • 医疗数据生命周期管理
    • 完善的审计日志机制

这些代码实践在常德二院项目中得到验证,通过KingbaseES的企业级特性(如高可用集群、逻辑备份、并行查询等),构建了符合等保三级要求的医疗信创数据底座,为全国医疗行业提供了可复制的技术参考。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐