mysql 切换主键

目录

一、切换键已经存在

1、创建表(表数据已存在)

2、先删除主键

3、再添加主键

二、切换键不存在

1、创建表(表数据已存在)

2、直接添加新键,并设置为主键

三、切换键不存在

1、创建表(表数据已存在)

2、先添加新建

3、再设置为主键

四、主键特点

       1、唯一性;

       2、非空性;

       3、主键不一定是自增字段,但自增字段必须为主键。

五、相关的的 sql 语句


一、切换键已经存在

       name ==》id

1、创建表(表数据已存在)

CREATE TABLE person (
    id  INT NOT NULL,
    name  VARCHAR(32) NOT NULL,
    PRIMARY KEY (name)
) ENGINE = innoDB DEFAULT CHARSET = utf8;

2、先删除主键

ALTER TABLE person DROP PRIMARY KEY;

3、再添加主键

ALTER TABLE person ADD PRIMARY KEY (id);

二、切换键不存在

1、创建表(表数据已存在)

 
CREATE TABLE person (
    name  VARCHAR(32) NOT NULL
) ENGINE = innoDB DEFAULT CHARSET = utf8;

2、直接添加新键,并设置为主键

ALTER TABLE person ADD COLUMN id INT PRIMARY KEY AUTO_INCREMENT FIRST;

或者

ALTER TABLE person ADD COLUMN id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;

       PRIMARY KEYAUTO_INCREMENT 必须同时使用,因为只能有一个 自增 的列,并且该列必须为 主键,NOT NULL 可以没有,因为主键默认是非空的。

       以下两种都是错误的:

ALTER TABLE person ADD COLUMN id INT AUTO_INCREMENT FIRST;

ALTER TABLE person ADD COLUMN id INT PRIMARY KEY FIRST;

       第一个报错,自增列,却没有设置其为主键,和自增列只能有一个且必须为主键的特性冲突;

       第二个报错,主键不能为空,所以都默认为0,和主键的唯一性冲突。

三、切换键不存在

1、创建表(表数据已存在)

 
CREATE TABLE person (
    name  VARCHAR(32) NOT NULL
) ENGINE = innoDB DEFAULT CHARSET = utf8;

2、先添加新建

ALTER TABLE person ADD COLUMN id INT FIRST;                # 填充 null 值

或者

ALTER TABLE person ADD COLUMN id INT NOT NULL FIRST;       # 填充 0 值

3、再设置为主键

ALTER TABLE person ADD COLUMN id INT PRIMARY KEY AUTO_INCREMENT FIRST;     # 填充自增值

四、主键特点

       1、唯一性;

       2、非空性;

       3、主键不一定是自增字段,但自增字段必须为主键。

五、相关的的 sql 语句

SHOW TABLES;
SELECT * FROM person;
DESC person;

# 删除列
ALTER TABLE person DROP COLUMN id;        
         
# 添加主键列
ALTER TABLE person ADD Column id INT PRIMARY KEY AUTO_INCREMENT FIRST;
ALTER TABLE person ADD Column id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;

# 删除/设置主键
ALTER TABLE person DROP PRIMARY KEY;
ALTER TABLE person ADD PRIMARY KEY (name);    # 此时数据必须 唯一 且 不为空

# 添加新建
ALTER TABLE person ADD Column id INT FIRST;                         # 填充 null
ALTER TABLE person MODIFY COLUMN id INT AUTO_INCREMENT PRIMARY KEY; # 对原始 INT 数据无要求,会按自增重排数据

ALTER TABLE person ADD Column id INT NOT NULL FIRST;                # 填充 0
ALTER TABLE person MODIFY COLUMN id INT AUTO_INCREMENT PRIMARY KEY;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值