phpMyAdmin 在插入第一个 table 时执行触发器时在第二个 table 中存储一个随机数
phpMyAdmin storing a random number in the 2nd table on the execution of trigger made on insert of first table
我有一个名为 "Log_Data" 的 table,它有两个字段,
- log_date "date" 数据类型
- log_information of "varchar" 数据类型,最大大小 = 250
我有另一个名为 "Patient" 的 table,它有很多属性,其中 2 个是
- patient_ID
- p_name
现在,我正在尝试在 "patient" table 上的 "Insert" 上创建触发器。
选择在 "insert" 和 "after" 执行插入时触发。
触发器定义如下,
insert into log_data
values(NOW(), 'New patient with Id = ' + new.patient_id + ' and name = ' + new.p_name + ' is added')
请注意log_data的第一个属性是"log_date",第二个属性是"log_information"
完成后,我在"patient"table中做了一个新的插入,如下,
INSERT INTO patient(patient_id, p_name, p_gender, p_address, p_phone_no, p_age, p_CNIC, p_isolation_id, p_quarantine_id, p_city, p_province, p_status) VALUES ('7','Asad Hussain','Male','Lasani Town House #5-B','03041502627','23','3310256209012','1',NULL,'Faisalabad','Punjab','ACTIVE')
现在,命令执行成功...它也成功插入患者体内,但它不适用于 log_data table。
当我转到 log_data table 时,它显示正确添加的时间(即 log_date 很好)但是对于 log_information,它会在其中添加一些随机数。
我多次执行插入查询,这些是我得到的值,
2020-06-14
20200614232014
2020-06-14
20200614232209
2020-06-14
8
2020-06-14
8
2020-06-14
8
2020-06-14
8
2020-06-14
9
因此,我尝试将触发器从 "After" 更改为 "Before",但它仍然显示相同的错误。
然后我尝试将其数据类型从 varchar 更改为 "Text" 然后它开始仅在 log_information 中插入“8”(这些时候,我添加的条目的患者 ID 是'8')
然后我尝试插入患者 ID = 9 的患者记录,然后这一次,它在 log_information 中存储了“9”(这次我也将数据类型从 text 改回了 varchar(250))
所以我看到它的方式,现在它正在将 "patient_id" 插入 log_information 但是跳过了其余信息......此外,它为前两个插入添加了一些随机数,我仍然不明白为什么。
任何人都可以指导我如何解决这个问题以及如何存储我试图存储在 log_data table 中的实际字符串吗?
此外,是否可以使用触发器存储自动增量 log_id?这将在每个日志创建时存储其 ID(并且 log_id 将自动递增,这意味着我们不必在编写触发器时将其提供给 log_data 中的插入)
谢谢!
请您始终使用 CONCAT 来合并文本
insert into log_data
values(NOW(), CONCAT('New patient with Id = ', NEW.patient_id ,' and name = ' , NEW.p_name , ' is added'))
我有一个名为 "Log_Data" 的 table,它有两个字段,
- log_date "date" 数据类型
- log_information of "varchar" 数据类型,最大大小 = 250
我有另一个名为 "Patient" 的 table,它有很多属性,其中 2 个是
- patient_ID
- p_name
现在,我正在尝试在 "patient" table 上的 "Insert" 上创建触发器。 选择在 "insert" 和 "after" 执行插入时触发。 触发器定义如下,
insert into log_data
values(NOW(), 'New patient with Id = ' + new.patient_id + ' and name = ' + new.p_name + ' is added')
请注意log_data的第一个属性是"log_date",第二个属性是"log_information"
完成后,我在"patient"table中做了一个新的插入,如下,
INSERT INTO patient(patient_id, p_name, p_gender, p_address, p_phone_no, p_age, p_CNIC, p_isolation_id, p_quarantine_id, p_city, p_province, p_status) VALUES ('7','Asad Hussain','Male','Lasani Town House #5-B','03041502627','23','3310256209012','1',NULL,'Faisalabad','Punjab','ACTIVE')
现在,命令执行成功...它也成功插入患者体内,但它不适用于 log_data table。 当我转到 log_data table 时,它显示正确添加的时间(即 log_date 很好)但是对于 log_information,它会在其中添加一些随机数。 我多次执行插入查询,这些是我得到的值,
2020-06-14
20200614232014
2020-06-14
20200614232209
2020-06-14
8
2020-06-14
8
2020-06-14
8
2020-06-14
8
2020-06-14
9
因此,我尝试将触发器从 "After" 更改为 "Before",但它仍然显示相同的错误。
然后我尝试将其数据类型从 varchar 更改为 "Text" 然后它开始仅在 log_information 中插入“8”(这些时候,我添加的条目的患者 ID 是'8') 然后我尝试插入患者 ID = 9 的患者记录,然后这一次,它在 log_information 中存储了“9”(这次我也将数据类型从 text 改回了 varchar(250))
所以我看到它的方式,现在它正在将 "patient_id" 插入 log_information 但是跳过了其余信息......此外,它为前两个插入添加了一些随机数,我仍然不明白为什么。
任何人都可以指导我如何解决这个问题以及如何存储我试图存储在 log_data table 中的实际字符串吗?
此外,是否可以使用触发器存储自动增量 log_id?这将在每个日志创建时存储其 ID(并且 log_id 将自动递增,这意味着我们不必在编写触发器时将其提供给 log_data 中的插入) 谢谢!
请您始终使用 CONCAT 来合并文本
insert into log_data
values(NOW(), CONCAT('New patient with Id = ', NEW.patient_id ,' and name = ' , NEW.p_name , ' is added'))