咸鱼的鱼

导航

133标识列

#标识列
/*
又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值


好处:不用我们自己插入值,也不用关心值是否重复的问题。因为它肯定不重复。它默认的起始值是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;

 

posted on 2019-03-29 21:54  Holy_Shit  阅读(192)  评论(0编辑  收藏  举报