主键
简介
检验请求参数具有唯一性,例如商品表中的商品编号是唯一的,用户表中的邮箱是唯一的。
示例
准备数据表
假设有hrm.salaries 人力资源系统 - 员工的薪水信息表,结构如下:
--薪资表
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`),
CONSTRAINT `salaries_ibfk_1` FOREIGN KEY (`emp_no`) REFERENCES `employees` (`emp_no`) ON DELETE CASCADE
)
通过上述表结构可以看到:
- 主键是『员工编号』emp_no和『开始日期』from_date的组合,用于唯一标识一条工资记录,值必须是唯一的
- 工号字段emp_no作为外键,外键约束参考外键
示例1:正常请求
POST http://127.0.0.1:21000
Content-Type: application/json;charset=utf-8
{
"jsonrpc": "2.0",
"method": "hrm.salaries.add",
"params": {
"empNo": 10010,
"salary": 10000,
"fromDate": "2023-10-01",
"toDate": "2023-10-31"
},
"id": "client-unique-request-id"
}
响应
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"jsonrpc": "2.0",
"result": {
"empNo": 10010,
"fromDate": "2023-10-01"
},
"id": "client-unique-request-id"
}
示例2:错误请求
重复提交该请求,检测到『员工编号』和『开始日期』的组合已经存在,响应错误。
POST http://127.0.0.1:21000
Content-Type: application/json;charset=utf-8
{
"jsonrpc": "2.0",
"method": "hrm.salaries.add",
"params": {
"empNo": 10010,
"salary": 10000,
"fromDate": "2023-10-01",
"toDate": "2023-10-31"
},
"id": "client-unique-request-id"
}
响应错误
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
{
"jsonrpc": "2.0",
"error": {
"code": -32600,
"message": "checking for primary key conflicts: duplicate primary key in hrm.salaries [empNo fromDate]",
"data": {
"errorCode": "EU.Constraint.PK.Duplicated",
"errorDetails": [
{
"constraint": "PrimaryKeyDuplicated",
"field": [
"empNo",
"fromDate"
],
"fieldValue": [
10010,
"2023-10-01"
],
"location": "hrm.salaries",
"message": "duplicate primary key in hrm.salaries.[empNo fromDate] [10010 2023-10-01]"
}
],
"errorMessage": "duplicate primary key in hrm.salaries [empNo fromDate]"
}
},
"id": "client-unique-request-id"
}
Tested on Luwak 1.13.0