- MySQL 基础
- MySQL - 首页
- MySQL - 简介
- MySQL - 特性
- MySQL - 版本
- MySQL - 变量
- MySQL - 安装
- MySQL - 管理
- MySQL - PHP 语法
- MySQL - Node.js 语法
- MySQL - Java 语法
- MySQL - Python 语法
- MySQL - 连接
- MySQL - Workbench
- MySQL 数据库
- MySQL - 创建数据库
- MySQL - 删除数据库
- MySQL - 选择数据库
- MySQL - 显示数据库
- MySQL - 复制数据库
- MySQL - 数据库导出
- MySQL - 数据库导入
- MySQL - 数据库信息
- MySQL 用户
- MySQL - 创建用户
- MySQL - 删除用户
- MySQL - 显示用户
- MySQL - 修改密码
- MySQL - 授权
- MySQL - 显示权限
- MySQL - 收回权限
- MySQL - 锁定用户账户
- MySQL - 解锁用户账户
- MySQL 表
- MySQL - 创建表
- MySQL - 显示表
- MySQL - 修改表
- MySQL - 重命名表
- MySQL - 克隆表
- MySQL - 截断表
- MySQL - 临时表
- MySQL - 修复表
- MySQL - 描述表
- MySQL - 添加/删除列
- MySQL - 显示列
- MySQL - 重命名列
- MySQL - 表锁
- MySQL - 删除表
- MySQL - 派生表
- MySQL 查询
- MySQL - 查询
- MySQL - 约束
- MySQL - INSERT 查询
- MySQL - SELECT 查询
- MySQL - UPDATE 查询
- MySQL - DELETE 查询
- MySQL - REPLACE 查询
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 运算符和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 运算符
- MySQL - OR 运算符
- MySQL - LIKE 运算符
- MySQL - IN 运算符
- MySQL - ANY 运算符
- MySQL - EXISTS 运算符
- MySQL - NOT 运算符
- MySQL - 不等于运算符
- MySQL - IS NULL 运算符
- MySQL - IS NOT NULL 运算符
- MySQL - BETWEEN 运算符
- MySQL - UNION 运算符
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 运算符
- MySQL - INTERSECT 运算符
- MySQL - INTERVAL 运算符
- MySQL 连接
- MySQL - 使用连接
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自连接
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 触发器
- MySQL - 触发器
- MySQL - 创建触发器
- MySQL - 显示触发器
- MySQL - 删除触发器
- MySQL - BEFORE INSERT 触发器
- MySQL - AFTER INSERT 触发器
- MySQL - BEFORE UPDATE 触发器
- MySQL - AFTER UPDATE 触发器
- MySQL - BEFORE DELETE 触发器
- MySQL - AFTER DELETE 触发器
- MySQL 数据类型
- MySQL - 数据类型
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正则表达式
- MySQL - 正则表达式
- MySQL - RLIKE 运算符
- MySQL - NOT LIKE 运算符
- MySQL - NOT REGEXP 运算符
- MySQL - regexp_instr() 函数
- MySQL - regexp_like() 函数
- MySQL - regexp_replace() 函数
- MySQL - regexp_substr() 函数
- MySQL 函数和运算符
- MySQL - 日期和时间函数
- MySQL - 算术运算符
- MySQL - 数值函数
- MySQL - 字符串函数
- MySQL - 聚合函数
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事务
- MySQL - 使用序列
- MySQL - 处理重复数据
- MySQL - SQL 注入
- MySQL - 子查询
- MySQL - 注释
- MySQL - CHECK 约束
- MySQL - 存储引擎
- MySQL - 将表导出到 CSV 文件
- MySQL - 将 CSV 文件导入数据库
- MySQL - UUID
- MySQL - 公共表表达式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分区
- MySQL - 垂直分区
- MySQL - 游标
- MySQL - 存储函数
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字符集
- MySQL - 校对规则
- MySQL - 通配符
- MySQL - 别名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 存储过程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 标准差
- MySQL - 查找重复记录
- MySQL - 删除重复记录
- MySQL - 选择随机记录
- MySQL - SHOW PROCESSLIST
- MySQL - 修改列类型
- MySQL - 重置自动递增
- MySQL - Coalesce() 函数
- MySQL 有用资源
- MySQL - 有用函数
- MySQL - 语句参考
- MySQL - 快速指南
- MySQL - 有用资源
- MySQL - 讨论
MySQL - 删除索引
MySQL 数据库中的DROP语句用于删除或移除现有的数据库对象,例如表、索引、视图或过程。无论何时使用DROP语句以及任何数据库对象(如索引),它都将永久删除它们及其关联的数据。
因此,我们可以使用两种不同的SQL DROP查询从数据库表中删除任何索引。
重要的是要理解,删除索引可能会对数据库查询的性能产生重大影响。因此,只有在确定不再需要索引时才尝试删除它。
MySQL DROP INDEX 语句
MySQL 中的 DROP INDEX 语句用于从表中删除索引。
语法
以下是使用 DROP INDEX 语句删除索引的语法:
DROP INDEX index_name ON table_name;
示例
在这个例子中,我们首先创建一个新的表CUSTOMERS,并使用以下 CREATE TABLE 查询向其中一列 (AGE) 添加索引:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY(ID), INDEX(AGE) );
现在,在CUSTOMERS表上创建另一个索引。我们在这里使用 CREATE INDEX 语句:
CREATE INDEX NAME_INDEX ON CUSTOMERS (Name);
DROP INDEX 查询:
然后,使用以下查询删除上面创建的索引。
DROP INDEX NAME_INDEX ON CUSTOMERS;
验证
要验证索引是否已删除,请使用下面的 DESC 查询显示表定义:
DESC CUSTOMERS;
正如我们在下表中看到的,NAME 列上的索引已被删除。
字段 | 类型 | Null | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL | |
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | MUL | NULL | |
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18, 2) | YES | NULL |
MySQL ALTER...DROP 语句
ALTER DROP 语句也可用于在 MySQL 表中删除索引。这只是 DROP INDEX 语句的替代方法,因此它仅适用于表上存在的索引。
语法
以下是 SQL 中 DROP INDEX IF EXISTS 的语法:
ALTER TABLE table_name DROP INDEX index_name;
示例
让我们再看一个例子,使用 ALTER...DROP 命令从 CUSTOMERS 表中删除索引,如下所示:
ALTER TABLE CUSTOMERS DROP INDEX AGE;
验证
要验证 AGE 列上的索引是否已删除,请使用下面的 DESC 查询显示表定义:
DESC CUSTOMERS;
正如我们在下表中看到的,NAME 列上的索引已被删除。
字段 | 类型 | Null | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL | |
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | NULL | ||
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18, 2) | YES | NULL |
删除 PRIMARY KEY 或 UNIQUE 约束
MySQL 中的 DROP INDEX 语句通常不会删除诸如 PRIMARY KEY 或 UNIQUE 约束之类的索引。要删除与这些约束关联的索引,我们需要使用ALTER TABLE DROP命令。
语法
以下是语法:
ALTER TABLE table_name DROP constraint_name;
示例
在这个例子中,我们使用以下查询删除 CUSTOMERS 表的 ID 列上存在的 PRIMARY KEY 约束:
ALTER TABLE CUSTOMERS DROP PRIMARY KEY;
验证
要验证主键约束是否已从表中删除,请使用 DESC 命令描述 'temp' 表,如下所示:
DESC CUSTOMERS;
PRIMARY KEY 约束最终被删除了!请看下表:
字段 | 类型 | Null | 键 | 默认值 | 额外 |
---|---|---|---|---|---|
ID | int | NO | NULL | ||
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | NULL | ||
ADDRESS | char(25) | YES | NULL | ||
SALARY | decimal(18, 2) | YES | NULL |
使用客户端程序删除索引
我们已经了解了如何使用 SQL 查询从 MySQL 数据库中删除索引。除此之外,我们还可以使用其他客户端程序在 MySQL 数据库中执行删除索引操作。
语法
以下是使用各种编程语言从 MySQL 数据库中删除索引的语法:
MySQL PHP 连接器mysqli提供了一个名为query()的函数来在MySQL数据库中执行DROP INDEX查询。
$sql = "DROP INDEX index_name ON tbl_name"; $mysqli->query($sql);
MySQL NodeJS 连接器mysql2提供了一个名为query()的函数来在MySQL数据库中执行DROP INDEX查询。
sql= "DROP INDEX index_name ON tbl_name"; con.query(sql);
我们可以使用JDBC 类型 4驱动程序通过Java与MySQL进行通信。它提供了一个名为executeUpdate()的函数来在MySQL数据库中执行DROP INDEX查询。
String sql = "DROP INDEX index_name ON table_name"; statement.executeQuery(sql);
MySQL Connector/Python 提供名为 execute() 的函数来执行 MySQL 数据库中的 DROP INDEX 查询。
drop_index_query = "DROP INDEX index_name ON tbl_name" cursorObj.execute(drop_index_query);
示例
以下是此操作在各种编程语言中的实现:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); // CREATE INDEX $sql = "DROP INDEX tid ON tutorials_table"; if ($mysqli->query($sql)) { printf("Index droped successfully!.
"); } if ($mysqli->errno) { printf("Index could not be droped!.
", $mysqli->error); } $mysqli->close();
输出
获得的输出如下:
Index droped successfully!.
var mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "Nr5a0204@123" }); //Connecting to MySQL con.connect(function (err) { if (err) throw err; console.log("Connected!"); console.log("--------------------------"); sql = "create database TUTORIALS" con.query(sql); sql = "USE TUTORIALS" con.query(sql); sql = "CREATE TABLE temp(ID INT, Name VARCHAR(255), age INT, Location VARCHAR(255));" con.query(sql); sql = "INSERT INTO temp values(1, 'Radha', 29, 'Vishakhapatnam'),(2, 'Dev', 30, 'Hyderabad');" con.query(sql); //Creating Indexes sql = "CREATE INDEX sample_index ON temp (name) USING BTREE;" con.query(sql); sql = "CREATE INDEX composite_index on temp (ID, Name);" con.query(sql); //Displaying Indexes sql = "SHOW INDEXES FROM temp;" con.query(sql, function(err, result){ if (err) throw err console.log(result); console.log("--------------------------"); }); //Dropping Indexes sql = "DROP INDEX sample_index ON temp;" con.query(sql); sql = "DROP INDEX composite_index ON temp;" con.query(sql); //Displaying Indexes after deleting sql = "SHOW INDEXES FROM temp;" con.query(sql, function(err, result){ if (err) throw err console.log(result); }); });
输出
生成的输出如下:
Connected! -------------------------- [ { Table: 'temp', Non_unique: 1, Key_name: 'sample_index', Seq_in_index: 1, Column_name: 'Name', Collation: 'A', Cardinality: 2, Sub_part: null, Packed: null, Null: 'YES', Index_type: 'BTREE', Comment: '', Index_comment: '', Visible: 'YES', Expression: null }, { Table: 'temp', Non_unique: 1, Key_name: 'composite_index', Seq_in_index: 1, Column_name: 'ID', Collation: 'A', Cardinality: 2, Sub_part: null, Packed: null, Null: 'YES', Index_type: 'BTREE', Comment: '', Index_comment: '', Visible: 'YES', Expression: null }, { Table: 'temp', Non_unique: 1, Key_name: 'composite_index', Seq_in_index: 2, Column_name: 'Name', Collation: 'A', Cardinality: 2, Sub_part: null, Packed: null, Null: 'YES', Index_type: 'BTREE', Comment: '', Index_comment: '', Visible: 'YES', Expression: null } ] -------------------------- []
import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class DropIndex { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/TUTORIALS"; String username = "root"; String password = "password"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); System.out.println("Connected successfully...!"); //Drop index; String sql = "DROP INDEX tid ON tutorials_tbl"; statement.executeUpdate(sql); System.out.println("Index has been dropped Successfully...!"); connection.close(); } catch (Exception e) { System.out.println(e); } } }
输出
获得的输出如下所示:
Connected successfully...! Index has been dropped Successfully...!
import mysql.connector #establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) cursorObj = connection.cursor() drop_index_query = "DROP INDEX idx_submission_date ON tutorials_tbl" cursorObj.execute(drop_index_query) connection.commit() print("Index dropped successfully.") cursorObj.close() connection.close()
输出
以下是上述代码的输出:
Index dropped successfully.