MySQL开发规范与使用技巧总结
一、规范
MySQL开发需要严格遵守以下规范:
-
表名与字段名必须使用小写,并采用下划线连接。
-
所有表名与字段名必须使用英文命名,不使用中文。
-
数据库、表、字段要使用有意义的名字,不要使用无意义的名字。
-
所有表必须有主键,且不为空。
-
所有表和字段必须使用InnoDB引擎。
-
外键必须使用InnoDB引擎。
-
禁止使用SELECT * 语句,应该指定具体字段。
-
字段类型需要根据实际情况选择,不要使用过大类型或过小类型。
二、技巧
1. 合理分页
在使用分页的时候,尽量避免使用子查询或者JOIN语句,可以使用LIMIT语句进行分页。例如:
SELECT * FROM `table` LIMIT 10 OFFSET 20
上面的语句会返回第21-30条记录。
2. 查询缓存
为了提高MySQL查询速度,可以开启查询缓存。在MySQL设置中执行以下语句即可开启查询缓存:
SET GLOBAL query_cache_size = 67108864; # 设置缓存大小
SET GLOBAL query_cache_type = 1; # 开启查询缓存
开启查询缓存后,MySQL在执行请求时会先在缓存中查找相应的结果,如果命中缓存则直接返回缓存结果,否则才会去查询数据库。但是,查询缓存也有一定的性能问题,建议仅对查询频率较高、结果不经常变化的查询开启缓存。
三、示例
1. 时间戳
在业务开发中,需要记录创建时间和修改时间,可以使用时间戳来记录。在表结构中添加created_at和modified_at字段:
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(50) NOT NULL DEFAULT '',
`created_at` int(11) NOT NULL DEFAULT '0',
`modified_at` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
为了方便处理时间戳,可以使用MySQL内置函数NOW()。在插入和更新记录时,可以调用NOW()函数来自动获取当前时间:
INSERT INTO `user` (`name`, `created_at`, `modified_at`) VALUES ('test', NOW(), NOW());
UPDATE `user` SET `name`='test2', `modified_at`=NOW() WHERE `id`=1;
2. 唯一约束
在某些情况下,我们需要对某些字段进行唯一性约束。可以在表结构中添加UNIQUE约束来实现:
CREATE TABLE `product` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(50) NOT NULL DEFAULT '',
`code` varchar(20) NOT NULL DEFAULT '',
UNIQUE KEY `code` (`code`) # 添加唯一约束
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
添加唯一约束后,插入或更新记录时如果存在相同的code值,则会抛出异常。可以使用以下语句忽略该异常:
INSERT IGNORE INTO `product` (`name`, `code`) VALUES ('test', '123');
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL开发规范与使用技巧总结 - Python技术站