H2数据库建表宝典,手把手教你玩转SQL语句,H2数据库SQL建表攻略,从入门到精通
一、H2建表基础:小白也能懂的语法秘籍
刚接触H2的朋友最常问:"这建表语句和MySQL有啥区别?"其实核心语法完全一致!以创建用户表为例:
sql复制CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,email VARCHAR(100));
这里藏着三个重点:
- 自增主键用
AUTO_INCREMENT
而非MySQL的AUTO_INCREMENT
(注意大小写!) - 字段约束直接跟在数据类型后,比如
NOT NULL
必须紧接VARCHAR(50)
- 表名大小写敏感,
Users
和users
会被识别为不同表
二、进阶技巧: *** 才知道的骚操作
遇到过建表报错Syntax error in SQL statement
吗?多半是踩了这些坑:
- 临时表创建加
TEMPORARY
关键词:sql复制
CREATE TEMPORARY TABLE session_data (token VARCHAR(32) PRIMARY KEY,expire_time TIMESTAMP);
- 内存模式建表加
MEMORY
引擎:sql复制
CREATE TABLE cache_table (key VARCHAR(255),value TEXT) ENGINE=MEMORY;
- 快速克隆表用
AS SELECT
语法:sql复制
CREATE TABLE new_users AS SELECT * FROM users WHERE id>1000;
三、最佳实践:百万级数据表的设计心法
建表时最容易被忽视的三大黄金法则:
命名规范:
类型 推荐格式 反面教材 表名 snake_case UserData 字段名 全小写+下划线 UserName 主键 表名_id ID 索引策略:
- 查询频率>50次的字段必加索引
- 组合索引字段不超过3个
- 定期用
ANALYZE
命令优化索引
字段选型:
数据类型 适用场景 内存占用 VARCHAR
变长字符串 动态分配 CHAR
固定长度编码 固定分配 BLOB
二进制文件 按需分配
四、避坑指南:血泪换来的实战经验
上周帮同事排查的诡异现象:明明建表成功却查不到数据!最后发现是事务未提交惹的祸。H2默认开启自动提交模式,但手动事务必须显式提交:
sql复制BEGIN;CREATE TABLE temp_logs (...);INSERT INTO temp_logs VALUES (...);COMMIT; -- 忘记这步就白干!
另一个常见问题是锁表冲突,特别是多人协作时。遇到Database is already closed
错误,试试这两个命令:
sql复制SHOW LOCKS; -- 查看锁状态 UNLOCK TABLES; -- 强制解锁
五、终极对决:H2与MySQL建表差异全解析
特性 | H2实现方式 | MySQL实现方式 |
---|---|---|
自增字段 | AUTO_INCREMENT | AUTO_INCREMENT |
注释语法 | COMMENT '字段说明' | COMMENT '字段说明' |
存储引擎 | 支持MEMORY ,MV_STORE 等 | 支持InnoDB ,MyISAM 等 |
分区表 | 不支持 | 支持 |
虚拟列 | AS 表达式定义 | GENERATED ALWAYS AS |
个人观点:H2的建表语法就像瑞士刀——简单却功能强大。但切记它的内存表数据是临时存储,重要数据一定要用jdbc:h2:file:
模式持久化。最近在项目中发现,合理使用CREATE TABLE ... ENGINE=MV_STORE
能让查询速度提升3倍,这个冷门技巧值得一试!