MySQL中的唯一索引(Unique Index)是一种特殊类型的索引,它确保索引列中的所有值都是唯一的。这意味着在一个表中,任何两行都不能有相同的唯一索引值。唯一索引可以应用于单个列或多个列的组合。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
UNIQUE INDEX idx_unique_username (username),
UNIQUE INDEX idx_unique_email (email)
);CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATE NOT NULL,
UNIQUE INDEX idx_unique_customer_order (customer_id, order_date)
);原因:尝试插入的数据违反了唯一索引的约束。
解决方法:
import mysql.connector
try:
conn = mysql.connector.connect(user='user', password='password', host='host', database='database')
cursor = conn.cursor()
query = "INSERT INTO users (username, email) VALUES (%s, %s)"
values = ('existing_username', 'existing_email@example.com')
cursor.execute(query, values)
conn.commit()
except mysql.connector.IntegrityError as err:
print(f"Error: {err}")
finally:
cursor.close()
conn.close()原因:索引未被正确使用或索引设计不合理。
解决方法:
EXPLAIN语句分析查询计划,确定是否使用了索引。EXPLAIN SELECT * FROM users WHERE username = 'existing_username';通过以上信息,您可以更好地理解MySQL唯一索引的基础概念、优势、类型、应用场景以及常见问题的解决方法。