CREATE INDEX IF NOT EXIST

CREATE INDEX IF NOT EXIST这种创建索引的方式在MySQL中是不支持的,只支持CREATE INDEX,连续两次运行CREATE INDEX ,第二次会报错。


那么,我遇到这么一个问题:希望在一段升级脚本中对一个表建立索引。这段脚本可能会被反复运行,下面的写法是安全的:

if(!pdo_fieldexists('goods', 'cover_content')) {
  pdo_query("ALTER TABLE goods ADD `cover_content` text");
}


CREATE TABLE if not exists  `express` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
);

但是,索引,不支持这种先判断后创建的模式,即不支持CREATE INDEX IF NOT EXIST,也没有给出明确接口判断一个索引是否存在。MySQL文档给出的解决方案太复杂了:http://dev.mysql.com/doc/refman/5.0/en/create-index.html


我想到了一个土鳖的办法:

if(!pdo_fieldexists('dummy_table', 'new_column')) {
  pdo_query("ALTER TABLE dummy_table ADD `new_column` int");
  create index my_index_on_goods xxxxx;
}

完美搞定!代价是搞了个不必要的列,姑且称为Guard Column吧!如果这种需求很频繁,可以专门搞一个无用的表做这个事情。


为什么MySQL不支持CREATE INDEX IF NOT EXIST呢?周一问问OceanBase是否支持这个东东。有点奇怪。

### 麒麟操作系统 DeepSeek-R1-Zero 本地化部署教程 #### 准备工作 为了成功完成DeepSeek-R1-Zero在麒麟操作系统的本地化部署,需确保环境满足最低硬件需求并安装必要的软件包。 - **硬件准备** - 至少4GB内存,推荐8GB以上。 - 处理器支持SSE4.2指令集。 - 安装最新版本的Python3及其开发库。 - 更新pip至最新版`pip install --upgrade pip`。 - 使用apt-get或其他包管理器安装gcc、make等编译工具[^1]。 ```bash sudo apt update && sudo apt upgrade -y sudo apt install python3-dev python3-pip gcc make git curl wget unzip libssl-dev zlib1g-dev -y ``` #### 获取源码与配置 通过官方GitHub仓库克隆项目到本地: ```bash git clone https://github.com/deepseek-r1-zero/deploy.git /opt/deepseek-r1-zero cd /opt/deepseek-r1-zero ``` 创建虚拟环境来隔离运行时依赖关系,并激活该环境: ```bash python3 -m venv ./venv source ./venv/bin/activate ``` 按照README.md中的指示执行预构建脚本以下载额外资源文件和第三方库: ```bash ./scripts/prebuild.sh ``` #### 编辑配置文件 编辑位于`conf/local_settings.py`内的设置参数,调整数据库连接字符串以及其他特定于生产环境的关键选项。对于中文界面的支持,在同一目录下找到`locale/settings_zh_Hans.cn.json`,确认其中的语言设定无误。 #### 数据迁移与服务启动 首次部署前应先同步模型结构到目标数据库中去;之后即可正常开启web服务器进程供外部访问了。 ```bash python manage.py migrate nohup python manage.py runserver 0.0.0.0:8000 & ``` #### 测试验证 打开浏览器输入http://localhost:8000检查首页加载情况,尝试登录账户体验核心功能模块是否运作良好。如果一切顺利,则表示已完成整个流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值