1,mysql报错
The error occurred while setting parameters
SQL: INSERT INTO t_sale ( amount, product_id, batch ) VALUES ( ?, ?, ? )
Cause: java.sql.SQLException: Incorrect string value: ‘\xE5\xB8\x85\xE4\xBB\x95…’ for column ‘_name’ at row 30
这个错误通常发生在数据库字符集和应用程序字符集不匹配的情况下,导致插入非法的字符集到数据库字段中。
解决这个问题的一种方法是将数据库字符集和应用程序字符集保持一致。你可以在创建数据库时指定正确的字符集,然后在应用程序中设置相应的字符集。
(1)如果你已经创建了数据库并且不能更改数据库字符集,则可以尝试在插入数据时使用一些方法来保证数据字符集正确。例如,你可以在JDBC连接URL中指定字符集:
jdbc:mysql://localhost/mydatabase?useUnicode=true&characterEncoding=utf8
(2)此外,可以在MySQL中,可以使用 ALTER TABLE 语句来更改表的排序规则(navicat 查询——新建查询)
ALTER TABLE my_table COLLATE utf8_general_ci;
2,修改一个自动递增字段的开始值
在MySQL中,如果你需要修改一个自动递增字段的开始值,可以使用 ALTER TABLE 语句来进行操作。以下是一个示例:
ALTER TABLE my_table AUTO_INCREMENT = 100;
这个语句将my_table表的自动递增值设置为100。也就是说,下一次插入数据时,该自动递增字段的值将从100开始,而不是从默认的1开始。
需要注意的是,如果my_table表已经有了自动递增字段的数据,那么这个语句将不能直接改变表中已有的数据行的值。在这种情况下,你需要使用 ALTER TABLE 和 UPDATE 语句一起来完成该操作。以下是一个包含 UPDATE 语句的示例:
ALTER TABLE my_table AUTO_INCREMENT = 100;
UPDATE my_table SET id = id + 100;
这个语句将my_table表的自动递增值设置为100,并将id字段的每个旧值加上100。这样,就可以正确地重新设置自动递增字段,并调整现有数据行的值。
3,自动从库存表里面加载销售数据
新建一条销售数据,填入商品编号、批次、销售数量,自动从库存表里面加载商品名。单价等字段
新建触发器
CREATE TRIGGER automatic_update
BEFORE INSERT ON t_sale
FOR EACH ROW
BEGIN
DECLARE _product_id INT;
DECLARE _batch INT;
DECLARE _name VARCHAR(255);
DECLARE _unit VARCHAR(255);
DECLARE _description VARCHAR(255);
DECLARE _sp DECIMAL(10,2);
SET _product_id = NEW.product_id;
SET _batch = NEW.batch;
SELECT name,unit,description,selling_price INTO _name,_unit,_description,_sp FROM t_store WHERE product_id = _product_id AND batch = _batch;
IF (_name IS NOT NULL) THEN
SET NEW.name = _name;
END IF;
IF (_unit IS NOT NULL) THEN
SET NEW.unit = _unit;
END IF;
IF (_description IS NOT NULL) THEN
SET NEW.description = _description;
END IF;
IF (_sp IS NOT NULL) THEN
SET NEW.price = _sp ;
SET NEW.money = NEW.amount * _sp;
END IF;
END