目录
一、切换键已经存在
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 KEY 和 AUTO_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;