MySQL之外键、主键、自增
1、创建外键
create table userinfo( uid int auto_increment primary key, name varchar(32), department_id int, xx_id int, constraint fk_user_depar foreign key (“department_id”) references color(“id”) )engine=innodb default charset=utf8; create table department( id bigint auto_increment primary key, title char(15) )engine=innodb default charset=utf8;
2、补充主键:
一个表只能有一个主键
主键可以由多列组成:
create table t1( nid int(11) not null auto_increment, pid int(11) not null , num int(11) null, primary key(nid,pid) ) engine=InnoDB default charset=utf8;
例:
CREATE TABLE t5 (
nid int(11) NOT NULL AUTO_INCREMENT,
pid int(11) not NULL,
num int(11),
primary key(nid,pid) #此时nid,pid整体作为主键,下面就可以整体进行关联
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table t6(
id int auto_increment primary key,
name char(10),
id1 int,
id2 int,
CONSTRAINT fk_t5_t6 foreign key (id1,id2) REFERENCES t1(nid,pid) #nid,pid整体作为主键(这个是前提条件),所以这里关联了两个
)engine=innodb default charset=utf8;
注:上面foreign key的名字fk_t5_t6不能重复
3、自增补充
上面的AUTO_INCREMENT=4表示下一次插入数据的时候id从4开始自增,如果想要定制从10开始自增:
alter table t10 AUTO_INCREMENT=10;
MySQL:自增步长
3.1基于会话级别:(*****)
一次mysql登录就是一次会话,在当前mysql中设置了步长,再打开一个新的mysql后,新的mysql中步长还是默认为1
3.1.1 show session variables like 'auto_inc%'; 查看全局的步长,默认为1
可以知道步长为1
3.1.2 set session auto_increment_increment=2; 设置会话步长
可以看出全局步长被设置为2
添加数据id的步长就按照2增加
3.1.3 # set session auto_increment_offset=10; 设置会话起始值,一般用不到,因为我们在表中已经规定好了
3.2 基于全局级别
在当前全局中修改步长之后,再开会话(打开新的mqsql)都会以你设置的全局步长默认设置,不推荐此种方式
3.2.1 show global variables like 'auto_inc%'; 查看全局变量
set global auto_increment_increment=2; 设置会话步长
# set global auto_increment_offset=10; 设置全局起始值