常用的 SQL 语句

大部分语句都可以通过 phpMyAdmin 解决,但实际要写出可能还要再翻看,所以暂时记录下。

创建 UTF-8 格式的数据库

1
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

更新小技巧

1
2
3
UPDATE train AS a, train AS b
SET a.next_temp = b.temp
WHERE b.timestamp = DATE_ADD(a.timestamp, INTERVAL 30 MINUTE)

大小写问题

在工作中遇到了项目工程在 Windows 上启动没问题,在 Ubuntu 上启动报错的问题,经排查发现是 MySQL 大小写问题。

原因分析

原来是 Linux 下的 MySQL 默认是要区分表名大小写的,而在 Windows 下是不区分。从 Windows 下导出的数据脚本中数据表的名字使用的是小写,而 Hibernate 生成的 SQL 中表名是大写的,所以查不出数据。

解决方案

让 MySQL 不区分表名大小写的方法其实很简单:

  1. 用 ROOT 登录,修改 /etc/my.cnf
  2. 在 [mysqld] 下加入一行: lower_case_table_names = 1
  3. 重新启动数据库即可 sudo /etc/init.d/mysql restart

注意事项

MySQL 在 Linux 下数据库名、表名、列名、别名大小写规则如下:

  1. 数据库名与表名是严格区分大小写的
  2. 表的别名是严格区分大小写的
  3. 列名与列的别名在所有的情况下均是忽略大小写的
  4. 变量名也是严格区分大小写的

复制表

1
2
CREATE TABLE newtable LIKE oldtable;
INSERT newtable SELECT * FROM oldtable;

参考: Copy a MySQL table including indexes