WYH
2024-01-23 72a150a5f1e86f3540701ead0e7d2dc4a2f61239
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
 
postgreSQL下载地址:目前开源的TBase版本是基于postgreSQL10的
https://www.enterprisedb.com/downloads/postgres-postgreSQL-downloads
 
 
安装教程
https://blog.csdn.net/engerla/article/details/127820191
 
postgreSQL建表示例:
    CREATE TABLE "evaluation_records" (
        "id" int8 NOT NULL,
        "name" varchar(255) COLLATE "default" DEFAULT NULL::character varying,
        "evaluation_score" int4,
        "evaluation_date" date,
        "evaluation_content" text COLLATE "default",
        "attendance_probability" float4,
        "status" int2 DEFAULT 0,
        "remark" varchar(500) COLLATE "default" DEFAULT NULL::character varying,
        "creator" varchar(32) COLLATE "default" DEFAULT NULL::character varying,
        "updater" varchar(32) COLLATE "default" DEFAULT NULL::character varying,
        "create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP NOT NULL,
        "update_time" timestamp(6),
        PRIMARY KEY ("id")
    );
    COMMENT ON TABLE "evaluation_records" IS '评价记录表';
 
    COMMENT ON COLUMN "evaluation_records"."id"                     IS '主键';
    COMMENT ON COLUMN "evaluation_records"."name"                   IS '姓名';
    COMMENT ON COLUMN "evaluation_records"."evaluation_score"       IS '评价分数';
    COMMENT ON COLUMN "evaluation_records"."evaluation_date"        IS '评价日期';
    COMMENT ON COLUMN "evaluation_records"."evaluation_content"     IS '评价内容:富文本';
    COMMENT ON COLUMN "evaluation_records"."attendance_probability" IS '出勤率';
    COMMENT ON COLUMN "evaluation_records"."status"                 IS '状态: 0-删除,1-有效';
    COMMENT ON COLUMN "evaluation_records"."remark"                 IS '备注';
    COMMENT ON COLUMN "evaluation_records"."creator"                IS '创建人';
    COMMENT ON COLUMN "evaluation_records"."updater"                IS '更新人';
    COMMENT ON COLUMN "evaluation_records"."create_time"            IS '创建时间';
    COMMENT ON COLUMN "evaluation_records"."update_time"            IS '更新时间';
 
建表注意事项:
    建议表名和字段名都统一为小写!因为在postgreSQL中查询的时候必须对大写字段添加双引号才能执行,例如:SELECT * from train_toolkit_quartz WHERE "STATE" = 1;
    两张关联表,关联字段的字段类型一定要保持一致!否则,关联查询的时候postgreSQL会报错!
    
    常用字段类型对应关系:
        int8            对应mysql中的 bigint
        int4            对应mysql中的 int
        int2            对应mysql中的 smallint
        longtext        对应mysql中的 text
        timestamp(6)    对应mysql中的 datetime
        date            对应mysql中的 date
 
    mysql建表语句,示例:
    CREATE TABLE `evaluation_records` (
        `id` bigint(20) NOT NULL COMMENT '主键',
        `name` varchar(255) DEFAULT NULL COMMENT '姓名',
        `evaluation_score` int(3) DEFAULT NULL COMMENT '评价分数',
        `evaluation_date` date DEFAULT NULL COMMENT '评价日期',
        `evaluation_content` longtext COMMENT '评价内容:富文本',
        `attendance_probability` double(2,2) DEFAULT NULL COMMENT '出勤率',
        `status` smallint(1) NOT NULL DEFAULT '0' COMMENT '状态: 0-删除,1-有效',
        `remark` varchar(500) DEFAULT NULL COMMENT '备注',
        `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
        `updater` varchar(32) DEFAULT NULL COMMENT '更新人',
        `create_time` datetime DEFAULT NULL COMMENT '创建时间',
        `update_time` datetime DEFAULT NULL COMMENT '更新时间',
        PRIMARY KEY (`id`) 
    ) COMMENT='评价记录表';
    
插入数据:
    -- 通用写法
    INSERT INTO evaluation_records VALUES ('713503081040800400', '张三', '10', '2023-09-15', '<p>评价依据:XXX</p>', '0.89', '1', NULL, '000018e30cce41eea59765009e413f82', NULL, '2023-09-15 18:45:11', NULL);
    -- mysql
    INSERT INTO `evaluation_records` VALUES ('713503081040800400', '张三', '10', '2023-09-15', '<p>评价依据:XXX</p>', '0.89', '1', NULL, '000018e30cce41eea59765009e413f82', NULL, '2023-09-15 18:45:11', NULL);
    -- postgreSQL
    INSERT INTO "evaluation_records" VALUES ('713503081040800400', '张三', '10', '2023-09-15', '<p>评价依据:XXX</p>', '0.89', '1', NULL, '000018e30cce41eea59765009e413f82', NULL, '2023-09-15 18:45:11', NULL);
 
修改数据
    -- 通用写法
    UPDATE evaluation_records SET name='李四' WHERE id='713503081040800400';
 
查询数据:
    -- 通用写法
    SELECT * FROM evaluation_records WHERE name='李四';
    
    -- 通用写法:AS关键字
    SELECT name,evaluation_score AS "evaluationScore" FROM evaluation_records WHERE name='李四';
    
    -- 通用写法:时间等于
    SELECT * FROM evaluation_records WHERE create_time = '2023-09-15 18:45:11';
        
    -- 通用写法:时间区间
    SELECT * FROM evaluation_records WHERE create_time between '2023-09-15' and '2023-09-16';
    
删除数据:
    -- 通用写法
    DELETE FROM evaluation_records WHERE id='713503081040800400';
 
创建索引:
    -- 普通索引,通用写法
    CREATE INDEX idx_name_score ON evaluation_records(name,evaluation_score);
    -- 唯一索引,通用写法
    CREATE UNIQUE INDEX idx_status ON evaluation_records(status);
 
分页:
    -- postgreSQL分页
    SELECT
        id,
        type,
        name,
        code,
        pid,
        remark
    FROM
        sys_org
    WHERE
        type = 1
    AND pid = 1323441314737557510
    ORDER BY state DESC,seq ASC
    -- 从第0条开始,检索10条
    OFFSET 0 LIMIT 10 
    
    -- mysql分页
    SELECT
        id,
        type,
        name,
        code,
        pid,
        remark
    FROM
        sys_org
    WHERE
        type = 1
    AND pid = 1323441314737557510
    ORDER BY state DESC,seq ASC
    -- 从第0条开始,检索10条
    LIMIT 0,10
    
    
常用函数对应关系:
    <>                                                             对应mysql中的 !=
    
    OR                                                             对应mysql中的 ||
    
    TO_CHAR()                                                     对应mysql中的 DATE_FORMAT()
    
    yyyy-mm-dd hh24:mi:ss                                         对应mysql中的 %Y-%m-%d %H:%i:%S
    
    DATE()                                                         对应mysql中的 DAY()
    
    CURRENT_DATE                                                 对应mysql中的 CURDATE()
    
    CASE WHEN type=1 THEN 1 ELSE 0 END                            对应mysql中的 IF(type=1,1,0) 备注,type为字段名称
    
    COALESCE()                                                     对应mysql中的 IFNULL()
    
    CONCAT(字段1,'分隔符',字段2))                                 对应mysql中的 CONCAT(字段1,"分隔符",字段2))
    
    STRING_AGG(字段名称,',')                                     对应mysql中的 GROUP_CONCAT(字段名称)
    
    不支持mysql中的时间差计算函数TIMESTAMPDIFF()
    
    GROUP BY函数:
        -- postgreSQL写法
        SELECT
            tfs.name,
            tfs.total_num 
        FROM
            train_fixed_assets tfs
        GROUP BY tfs.name,tfs.total_num  
        ORDER BY tfs.total_num DESC        
        
        -- mysql写法
        SELECT
            tfs.name,
            tfs.total_num 
        FROM
            train_fixed_assets tfs
        GROUP BY tfs.name 
        ORDER BY tfs.total_num DESC        
        
        
针对xxMapper.xml文件:
        -- postgreSQL写法:万万不可省略AS关键字!
        SELECT name,evaluation_score AS "evaluationScore" FROM evaluation_records
        <WHERE>
            status = 1
            <if test="creator!=null">
                and creator = #{creator}
            </if>
            <if test="startTime!=null">
                and to_char(create_time,'yyyy-mm-dd hh24:mi:ss') <![CDATA[ >= ]]> #{startTime}
            </if>
            <if test="endTime!=null">
                and to_char(create_time,'yyyy-mm-dd hh24:mi:ss') <![CDATA[ <= ]]> #{endTime}
            </if>
        </WHERE>
        
        -- mysql写法
        SELECT name,evaluation_score 'evaluationScore' FROM evaluation_records
        <WHERE>
            status = 1
            <if test="creator!=null">
                and creator = #{creator}
            </if>
            <if test="startTime!=null">
                and DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') <![CDATA[ >= ]]> DATE_FORMAT(#{startTime},'%Y-%m-%d %H:%i:%S')
            </if>
            <if test="endTime!=null">
                and DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') <![CDATA[ <= ]]> DATE_FORMAT(#{endTime},'%Y-%m-%d %H:%i:%S')
            </if>
        </WHERE>