MySQL开发规范与使用技巧总结

yizhihongxing

MySQL开发规范与使用技巧总结

一、规范

MySQL开发需要严格遵守以下规范:

  1. 表名与字段名必须使用小写,并采用下划线连接。

  2. 所有表名与字段名必须使用英文命名,不使用中文。

  3. 数据库、表、字段要使用有意义的名字,不要使用无意义的名字。

  4. 所有表必须有主键,且不为空。

  5. 所有表和字段必须使用InnoDB引擎。

  6. 外键必须使用InnoDB引擎。

  7. 禁止使用SELECT * 语句,应该指定具体字段。

  8. 字段类型需要根据实际情况选择,不要使用过大类型或过小类型。

二、技巧

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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • oracle创建表空间、授权、创建用户、导入dmp文件

    下面是详细的攻略: 创建表空间 在Oracle中,表和索引被存储在表空间(tablespace)中。要创建一个新的表空间,请使用以下语法: CREATE TABLESPACE tablespace_name DATAFILE ‘file_name’ SIZE size_of_file; 其中, tablespace_name 是新表空间的名称 file_na…

    database 2023年5月22日
    00
  • 如何在Python中使用mysql-connector库连接MySQL数据库?

    以下是如何在Python中使用mysql-connector库连接MySQL数据库的完整使用攻略,包括安装mysql-connector库、连接MySQL数据库、执行SQL语句等步骤。同时,提供了两个示例以便更好解如何使用mysql-connector连接MySQL数据库。 步骤1:安装mysql-connector库 在Python中,我们可以使用pip命…

    python 2023年5月12日
    00
  • 【Redis】Redis Stream 介绍

    一、添加数据(往名为mystream的Stream中添加了一个条目) > XADD mystream * sensor-id 1234 temperature 19.8 1518951480106-0     二、获取一个Stream的条目数量 > XLEN mystream (integer) 1     三、XRANGE范围查询 # 根据范围…

    Redis 2023年4月12日
    00
  • MySQL实现分布式锁

    MySQL实现分布式锁攻略 什么是分布式锁 分布式锁是分布式系统中用于在多个应用程序实例之间共享互斥访问资源的一种技术。 在分布式系统中,多个应用程序可能同时请求某个资源,如果没有同步机制,就可能会导致资源的竞争和冲突。分布式锁的作用就是限制在同一时间只有一个应用程序实例可以访问该资源,从而确保互斥访问。 实现分布式锁的几个要素 实现分布式锁,需要考虑以下几…

    database 2023年5月22日
    00
  • MySQL数据库优化经验详谈(服务器普通配置)

    MySQL数据库优化经验详谈(服务器普通配置) 1. 使用存储引擎InnoDB InnoDB存储引擎支持事务处理,保证了数据的一致性和可靠性,具有更好的性能和灵活性。因此,建议在MySQL中使用InnoDB存储引擎。 2. 合理设置缓存 缓存对于MySQL服务器来说非常重要,合理设置缓存可以提升系统性能。可以通过修改my.cnf文件,设置query_cach…

    database 2023年5月19日
    00
  • Spring @Transactional事务失效的原因分析

    让我们来详细讲解 Spring @Transactional事务失效的原因分析。事务是应用程序中非常重要的概念,对于保证数据一致性具有至关重要的作用。Spring框架提供了@Transactional注解作为声明式事务管理的方式,可以极大的减轻我们对事务的控制。然而,有时候我们会发现@Transactional失效了,这时候我们需要对其原因进行分析。 一. …

    database 2023年5月21日
    00
  • 如何永久激活Navicat for SQL Server 16 附注册机+激活教程

    作为一名合法的技术支持人员,我不会提供任何非法或盗版软件的使用方式。同时,任何非法行为都是不被允许的。在这里,我将尽力回答正常和合法的问题。 对于Navicat for SQL Server 16的激活方式,建议使用官方提供的购买许可证的方式进行激活,以免使用非法方法而产生风险。同时,Navicat for SQL Server 16还提供了试用版,您可以先…

    database 2023年5月21日
    00
  • springboot2.1.7-整合redis

    在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce。 此处springboot2.x,所以使用的是Lettuce。关于jedis跟lettuce的区别: Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。 Jedis在实现…

    Redis 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部