Cassandra/CQL是否支持「ALTER TABLE ADD COLUMN IF NOT EXISTS」等效语句?
实现添加列前的存在性检查(避免重复添加报错)
不同数据库的实现方式略有差异,以下是主流数据库的解决方案:
MySQL/MariaDB
- 若使用MySQL 8.0及以上版本,直接用原生的
IF NOT EXISTS语法最简便:
ALTER TABLE <table> ADD COLUMN IF NOT EXISTS <column_name> <type>;
- 旧版本可通过查询系统表判断后再执行:
SET @column_exists = ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '你的数据库名' AND TABLE_NAME = '<table>' AND COLUMN_NAME = '<column_name>' ); IF @column_exists = 0 THEN ALTER TABLE <table> ADD <column_name> <type>; END IF;
PostgreSQL
- PostgreSQL 9.6及以上支持直接用
IF NOT EXISTS:
ALTER TABLE <table> ADD COLUMN IF NOT EXISTS <column_name> <type>;
- 旧版本可用PL/pgSQL块实现判断:
DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' -- 替换为你的模式名 AND table_name = '<table>' AND column_name = '<column_name>' ) THEN ALTER TABLE <table> ADD COLUMN <column_name> <type>; END IF; END $$;
SQL Server
直接通过系统视图判断后执行:
IF NOT EXISTS ( SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID('<table>') AND name = '<column_name>' ) BEGIN ALTER TABLE <table> ADD <column_name> <type>; END
Oracle
通过PL/SQL块查询系统表判断后执行:
DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM user_tab_columns WHERE table_name = UPPER('<table>') -- Oracle表/列名默认存储为大写 AND column_name = UPPER('<column_name>'); IF v_count = 0 THEN EXECUTE IMMEDIATE 'ALTER TABLE <table> ADD <column_name> <type>'; END IF; END; /
内容的提问来源于stack exchange,提问作者alan
相关产品推荐
相关产品推荐

