#标识列
/*
又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
好处:不用我们自己插入值,也不用关心值是否重复的问题。因为它肯定不重复。它默认的起始值是1
特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key
DROP TABLE IF EXISTS tab_identity;
CREATE TABLE tab_identity(
id INT AUTO_INCREMENT,
NAME varchar(20) #unique--唯一键,也是一个key
);
图1
2、一个表可以有几个标识列?至多一个!
DROP TABLE IF EXISTS tab_identity;
CREATE TABLE tab_identity(
id INT AUTO_INCREMENT,
NAME varchar(20),
seat INT UNIQUE AUTO_INCREMENT
);
图2
3、标识列的类型只能是数值型(int,float,double...),只不过一般是int
DROP TABLE IF EXISTS tab_identity;
CREATE TABLE tab_identity(
id INT,
NAME varchar(20) AUTO_INCREMENT,
seat INT
);
图3
4、标识列可以通过 SET auto_increment_increment=3;设置步长
可以通过 手动插入值,设置起始值
*/
#一、创建表时设置标识列
DROP TABLE IF EXISTS tab_identity;
CREATE TABLE tab_identity(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME FLOAT UNIQUE AUTO_INCREMENT,
);
TRUNCATE TABLE tab_identity;
INSERT INTO tab_identity(id,NAME) VALUES(NULL,'john'); #为了保证值与字段数一致,需要插入null
INSERT INTO tab_identity(NAME) VALUES('lucy');
SELECT * FROM tab_identity;
SHOW VARIABLES LIKE '%auto_increment%';
auto_increment_increment #步长,每次增长的值。默认每次增长1
auto_increment_increment #偏移量,默认是1.即:起始值是1.不能被修改(其实也可以被修改,例如下),设置成其他值也没有效果,默认还是1
例:
TRUNCATE TABLE tab_identity;
INSERT INTO tab_identity(id,NAME) VALUES(10,'john'); #相当于把起始值(id)修改为了10
INSERT INTO tab_identity(id,NAME) VALUES(NULL,'john'); #id=11
SET auto_increment_increment=3; #(1,4,7,10,13,16,...),一旦修改了代表当前连接下的所有值都被修改了
#二、修改表时设置标识符
DROP TABLE IF EXISTS tab_identity;
CREATE TABLE tab_identity(
id INT,
NAME float,
seat INT
);
alter table tab_identity modify column id int primary key AUTO_INCREMENT;
#三、修改表时删除标识列
alter table tab_identity modify column id int PRIMARY KEY;