#标识列
/*
又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key(也可以是unique)
2、一个表可以有几个标识列?至多一个!
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,
seat INT
);
DROP TABLE IF EXISTS tab_identity;
CREATE TABLE tab_identity(
id INT ,
NAME FLOAT UNIQUE AUTO_INCREMENT,
seat INT
);
TRUNCATE TABLE tab_identity;
# 要么 带着所有的字段,插入时,自增长列对应插入null
INSERT INTO tab_identity(id,NAME) VALUES(NULL,‘john‘);
#要么 不带自增长列,插入时只插别的字段
INSERT INTO tab_identity(NAME) VALUES(‘lucy‘);
SELECT * FROM tab_identity;
# 自增长列默认从1开始递增,步长为1
SHOW VARIABLES LIKE ‘%auto_increment%‘;
# auto_increment_increment:步长
# auto_increment_offset:起始位置(mysql中不能人为设置)
SET auto_increment_increment=3; # 设置步长
#如果想自己设置起始位置:10
#先执行下一句通过 手动插入值,设置起始值
INSERT INTO tab_identity(id,NAME) VALUES(10,‘john‘);
#然后 和以前一样,插入多行下一句:
INSERT INTO tab_identity(NAME) VALUES(‘lucy‘);
#二、修改表时设置标识列
DROP TABLE IF EXISTS test;
CREATE TABLE test(
id INT PRIMARY KEY,
NAME VARCHAR(20)
);
ALTER TABLE test MODIFY COLUMN id INT AUTO_INCREMENT;
INSERT INTO test VALUES (NULL,‘aaa‘);
SELECT * FROM test;
TRUNCATE TABLE test; #清空表,注意与DROP TABLE IF EXISTS test; 的区别,一个是清空,另一个删除
SHOW VARIABLES LIKE ‘%auto_increment%‘;
SET auto_increment_increment = 2;
INSERT INTO test VALUES(5,‘haha‘);
INSERT INTO test VALUES(NULL,‘haha‘);#运行多次该句
SELECT * FROM test; # 结果是 id = 5,7,9....
DESC test;
#二、修改表时删除标识列
ALTER TABLE test MODIFY COLUMN id INT ;
DESC test;