本篇主要解析MySQL数据库中关于时间函数、权限控制以及锁机制的常见面试问题。

NOW() 与 CURRENT_DATE() 的区别

NOW() 函数返回当前日期和时间的完整值,包括年、月、日、时、分、秒。而 CURRENT_DATE() 函数仅返回当前日期值,即年、月、日。

MySQL 权限表

MySQL 服务器通过权限表控制用户对数据库的访问。权限表存储在 mysql 数据库中,由 mysql_install_db 脚本初始化。 主要的权限表包括:

  • user:存储用户账户和全局权限信息。
  • db:存储数据库级别的权限信息。
  • table_priv:存储表级别的权限信息。
  • columns_priv:存储列级别的权限信息。
  • host:存储主机级别的访问控制信息。

MySQL 锁机制

MySQL 提供两种主要的锁机制:表锁和行锁。

  • 表锁: MyISAM 引擎支持表锁。其开销小,加锁快,不会出现死锁,但锁定粒度大,容易发生锁冲突,并发性能较低。
  • 行锁: InnoDB 引擎支持表锁和行锁,默认为行锁。行锁开销大,加锁慢,可能出现死锁,但锁定粒度小,发生锁冲突概率低,并发性能较高。