Mysql唯一键约束不考虑大小写和前后空格
MySQL的唯一键约束不考虑大小写和前后空格。因此,在插入或更新数据时,如果违反了唯一键约束,MySQL会抛出DuplicateKeyException异常。
举个例子,假设在一个表中有一个唯一键约束,列名为"username"。如果已经存在一个记录的username.为"test",那么再次插入或更新一个username为"Test"或"test"的记录时,都会触发唯一键约束的错误,抛出DuplicateKeyException异常。
如果希望进行大小写敏感的唯一键约束,可以在创建表时使用COLLATE关键字指定特定的字符集和排序规则。例如,可以使用COLLATE utf8_bin来实现大小写敏感的唯一键约束。
CREATE TABLE my_table {
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255) COLLATE utf8_bin UNIQUE,
...
}
此时再去插入与表中test不一致的Test值是就不会有问题。
多数据源配置
- nacos配置多数据源,默认使用dataSourceDefault数据源
spring:
datasource:
dynamic:
primary: dataSourceDefault
datasource:
dataSourceDefault:
username: 数据库名称1
password: 数据库密码1
url: 数据库url地址1
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
hikari:
min-idle: 5
max-pool-size: 15
is-auto-commit: true
idle-timeout: 600000
pool-name: HikariCP
max-lifetime: 28740000
dataSourceHolo:
username: 数据库名称2
password: 数据库密码2
url: 数据库url地址2
driver-class-name: com.mysql.cj.jdbc.Driver
2. 添加依赖:
<!-- 动态数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
3. 在对应的使用其他数据源的地方添加注解@DS("xxx")
@Component
@DS("dataSourceHolo")
public interface VoucherOperateLogMapper extends BaseMapper<VoucherOperateLog> {
}
4. 测试结果
在user服务添加dev-bdw-cms数据库,成功获取到数据
MySQL深分页及解决方案
在实际应用中,我们经常需要对数据进行分页查询。然而,当我们尝试获取数据的后几页时,MySQL的性能可能会大幅度下降。这就是MySQL的深分页问题。原因在于MySQL在查询结果中跳过大量行时需要花费大量时间。例如,如果我们想获取第10000页的数据,MySQL需要先读取并跳过前9999页的数据,这将消耗大量时间。
解决方案:记录上次查询的位置
在进行分页查询时,我们可以记录上次查询的最后一个ID,然后在下次查询时,直接从这个ID开始查询,避免检索起始位置之前的数据。例如:
SELECT * FROM table WHERE id > last_id ORDER BY id LIMIT 10;