Mysql增加主键或者修改主键的sql语句

本文详细介绍Mysql中如何通过SQL语句进行表结构的修改,包括添加、修改和删除字段,设置字段为主键,创建唯一键和索引,以及通过存储过程实现复杂的数据表结构调整。

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

Mysql增加主键或者更改表的列为主键的sql语句

添加表字段

alter table table1 add transactor varchar(10) not Null;

alter table   table1 add id int unsigned not Null auto_increment primary key

修改某个表的字段类型及指定为空或非空

alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];

alter table 表名称 modify 字段名称 字段类型 [是否允许非空];

alter table 表名称 modify 字段名称 字段类型 [是否允许非空];

修改某个表的字段名称及指定为空或非空

alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空

删除某一字段

ALTER TABLE mytable DROP 字段 名;

添加唯一键

ALTER TABLE `test2` ADD UNIQUE ( `userid`)

修改主键

ALTER TABLE `test2` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `id` )

增加索引

ALTER TABLE `test2` ADD INDEX ( `id` )

ALTER TABLE `category ` MODIFY COLUMN `id`  int(11) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`id`);

 

修改主键的sql语句块如下:

mailbox 表新增字段

DROP PROCEDURE IF EXISTS mailbox_column_update;
CREATE PROCEDURE mailbox_column_update() BEGIN
    -- 新增删除标志列
    IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='cbs' AND table_name='mailbox' AND COLUMN_NAME='delete_flag') THEN
            ALTER TABLE mailbox ADD   delete_flag  int  DEFAULT 2   NOT NULL;
    END IF;
    -- 新增删除日期列
    IF NOT EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='cbs' AND table_name='mailbox' AND COLUMN_NAME='delete_date') THEN
            ALTER TABLE mailbox ADD  delete_date  int  DEFAULT 0   NOT NULL;
    END IF;
    -- 如果存在字段account_mail,则修改字段长度
    IF EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='cbs' AND table_name='mailbox' AND COLUMN_NAME='email_account')
    THEN
        alter table mailbox modify column email_account varchar(320);
    END IF;
    -- 如果不存在主键列,则设置双主键
    IF ((SELECT count(*) FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA ='cbs' AND table_name='mailbox' AND CONSTRAINT_NAME ='PRIMARY' AND (COLUMN_NAME ='email_account' OR COLUMN_NAME = 'company_id'))=0)THEN
                ALTER TABLE mailbox ADD primary key (company_id,email_account);
    -- 如果只存在一个主键列
    ELSEIF ((SELECT count(*) FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA ='cbs' AND table_name='mailbox' AND CONSTRAINT_NAME ='PRIMARY' AND (COLUMN_NAME ='email_account' OR COLUMN_NAME = 'company_id'))<2)THEN
                ALTER TABLE mailbox  DROP PRIMARY KEY,ADD primary key (company_id,email_account);
    END IF;
        
END;
CALL mailbox_column_update();
DROP PROCEDURE IF EXISTS mailbox_column_update;

 

### 设置主键自增的SQL语句MySQL 中,可以通过 `AUTO_INCREMENT` 属性为中的某个字段设置为主键并启用自动递增功能。以下是几种常见的场景及其对应的 SQL 语句: #### 创建新时设置主键自增 当创建一张新时,可以直接通过定义字段属性的方式指定该字段作为主键,并开启自动递增功能。 ```sql CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); ``` 上述语句会创建一个名为 `example_table` 的,其中包含两个字段:一个是具有自动递增特性的整数型主键 `id`,另一个是字符串类型的 `name` 字段[^1]。 --- #### 对已存在的添加自增主键 如果已经存在一张没有主键或者需要修改其结构的,则可以使用 `ALTER TABLE` 语句为其添加带有自动递增特性的主键。 假设有一张名为 `ucenter_member` 的,当前缺少主键或希望重新配置主键为自增模式,可通过如下命令完成操作: ```sql -- 添加一个新的自增主键列 ALTER TABLE ucenter_member ADD id INT AUTO_INCREMENT PRIMARY KEY; ``` 此方法适用于那些尚未拥有任何主键约束的情况;它会在原有基础上追加一列命名为 `id` 的整数值,并赋予其唯一性和逐步增加的能力[^5]。 另外还有一种情况就是原格里已经有某些数据记录但缺乏明确标识符的时候也可以采用这种方法来进行改造升级从而满足实际需求当中对于每条独立信息都需要具备独一无二编号的要求[^3]。 --- #### 调整现有主键为非自增状态或其他变更 有时候可能因为业务逻辑调整等原因而不再需要某特定列保持持续上升趋势的话则需要用到下面这条指令来移除掉之前设定好的这种特性: ```sql ALTER TABLE tableName MODIFY id INT UNSIGNED NOT NULL COMMENT '主键'; ``` 这里我们将原有的带增量性质转换成了普通的无符号整形变量形式而不涉及其他额外参数选项设置了说明文字部分以便于后续维护人员理解此处设计意图所在[^2]. 需要注意的是执行此类动作前最好先备份原始资料以防万一发生意外丢失不可恢复等问题. --- ### 自动递增值的相关控制 除了基本的功能之外还可以进一步定制化初始起点以及每次跳跃幅度大小等细节方面的东西比如: - **更改默认开始位置**: 如果不想让序列号从常规的一位数字起步而是更倾向于别的更大一些的位置那么就可以利用这样的语法格式来做相应改动. ```sql ALTER TABLE your_table_name AUTO_INCREMENT = desired_start_value; ``` - **查看当前系统的全局配置状况** 可以运行以下查询了解服务器端有关这方面的一些基本信息 ```sql SHOW VARIABLES LIKE '%auto_increment%'; ``` 这些都会返回类似如下的结果集展示出来供参考决策之用: +-------------------------------|-------+ |Variable_name |Value | +-------------------------------|-------+ |auto_increment_increment |1 | |auto_increment_offset |1 | +-------------------------------|-------+ 这意味着除非特别指定了不同的偏移量与间隔距离外一般情况下都是按照简单线性关系依次排列下去不会跳过任何一个中间环节[^4]. ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值