MySQL在旧表中新增主键,复合主键新增方法

本文介绍了在MySQL中如何设置复合主键。对于已存在的表,需要先删除原主键再新增;对于新建表,则直接在创建时指定。通过具体SQL语句示例展示了复合主键的设置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、如果原表已有主键,则必须先删后新增。

例如:

ALTER TABLE `your_database`.`your_table` DROP PRIMARY KEY,ADD PRIMARY KEY (`id`, `login_time`) USING BTREE;

2、如果还未建表,则在建表时设置复合主键。

例如:设置id和login_time为复合主键

CREATE TABLE `your_databse`.`your_table`(
  `id` int(10) UNSIGNED  NOT NULL  AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `ip` varchar(255) NOT NULL,
  `login_time` datetime(0) NOT NULL,
  PRIMARY KEY (`id`,`login_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

### MySQL 中查看和新增索引的方法 #### 查看索引 在 MySQL 中,可以通过 `SHOW INDEX` 或者 `INFORMATION_SCHEMA.STATISTICS` 表来查看某个表上的索引信息。 1. 使用 `SHOW INDEX` 命令: 这是最常用的命令之一,用于显示指定表的所有索引详情。 ```sql SHOW INDEX FROM table_name; ``` 此命令返回的结果包含了索引名称、列名以及索引类型等重要信息[^3]。 2. 查询系统表 `INFORMATION_SCHEMA.STATISTICS`: 如果需要更详细的索引信息,可以直接查询系统的元数据表。 ```sql SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME='table_name'; ``` 该方法适用于跨库操作或者需要进一步分析的情况[^4]。 #### 新增索引 根据需求的不同,可以选择不同的方式创建索引。以下是几种常见的索引创建方式: 1. **普通索引**: 创建普通的单列索引,允许重复值存在。 ```sql ALTER TABLE table_name ADD INDEX index_name (column_list); ``` 上述语句会在指定的列上创建一个名为 `index_name` 的普通索引。 2. **唯一索引**: 确保某列或多列组合中的所有值都是唯一的。 ```sql ALTER TABLE table_name ADD UNIQUE unique_index_name (column_list); ``` 3. **主键索引**: 主键是一种特殊的唯一索引,不允许 NULL 值,并且每张表最多只能有一个主键。 ```sql ALTER TABLE table_name ADD PRIMARY KEY (column_list); ``` 4. **复合索引(多列索引)**: 当多个字段经常一起被查询时,可以考虑创建复合索引以提高性能。 ```sql ALTER TABLE table_name ADD INDEX composite_index_name (col1, col2, ...); ``` 需要注意的是,复合索引遵循最左前缀原则,即只有当查询条件包含索引的第一列时才会生效[^2]。 5. **全文索引**: 全文索引主要用于支持复杂的文本搜索功能。 ```sql ALTER TABLE table_name ADD FULLTEXT fulltext_index_name (column_list); ``` 6. **空间索引**: 对于地理坐标类的空间数据,可以使用空间索引来优化查询。 ```sql ALTER TABLE table_name ADD SPATIAL spatial_index_name (geometry_column); ``` 需要注意的是,虽然索引能够显著加快读取速度,但在写入或修改数据时可能会带来额外开销。因此,在设计索引策略时应综合权衡利弊[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值