python自增列表_Python-MySQL系列 表的auto_increment自增,foreign key外键

auto_increment

步长 increment 与 偏移量(起始值) offset

表的初始值

若表的初始值不想为1,可以在创建表时设置,或在创建表后更改设置

语法:auto_increment = 起始值

#在创建完表后,修改自增字段的起始值

mysql> create table student(

-> id int primary key auto_increment,

-> name varchar(20),

-> sex enum('male','female') default 'male'

-> );

mysql> alter table student auto_increment=3;

mysql> show create table student;

.......

ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

mysql> insert into student(name) values('egon');

Query OK, 1 row affected (0.01 sec)

mysql> select * from student;

+----+------+------+

| id | name | sex |

+----+------+------+

| 3 | egon | male |

+----+------+------+

row in set (0.00 sec)

mysql> show create table student;

.......

ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

#也可以创建表时指定auto_increment的初始值,注意初始值的设置为表选项,应该放到括号外

create table student(

id int primary key auto_increment,

name varchar(20),

sex enum('male','female') default 'male'

)auto_increment=3;

表设置步长

若表的id排序不想以1个步长递增,则可以根据需要设置步长

首先,设置步长,可以是设置成该会话的步长,也可以设置成全局的步长(所有会话的,一个cmd代表一个会话)

#基于会话级别

set session auth_increment_increment=2 #修改会话级别的步长

#基于全局级别的

set global auth_increment_increment=2 #修改全局级别的步长(所有会话都生效)

再,设置表的自增初始值,也可以设置成会话级别,或设置全局级别

#基于会话级别

set session auth_increment_offset=2 #修改会话级别的步长

#基于全局级别的

set global auth_increment_offset=2 #修改全局级别的步长(所有会话都生效)

注:

查询mysql中的设置变量 语法: show variables like ''

mysql> show variables like 'auto_incre%';

+--------------------------+-------+

| Variable_name | Value |

+--------------------------+-------+

| auto_increment_increment | 1 |

| auto_increment_offset | 1 |

+--------------------------+-------+

注意!!!注意!!!注意!!!

初始值要小于等于步长,否则会被忽略

如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值会被忽略

比如:设置auto_increment_offset=3,auto_increment_increment=2

mysql> set global auto_increment_increment=5;

Query OK, 0 rows affected (0.00 sec)

mysql> set global auto_increment_offset=3;

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'auto_incre%'; #需要退出重新登录

+--------------------------+-------+

| Variable_name | Value |

+--------------------------+-------+

| auto_increment_increment | 1 |

| auto_increment_offset | 1 |

+--------------------------+-------+

create table student(

id int primary key auto_increment,

name varchar(20),

sex enum('male','female') default 'male'

);

mysql> insert into student(name) values('egon1'),('egon2'),('egon3');

mysql> select * from student;

+----+-------+------+

| id | name | sex |

+----+-------+------+

| 3 | egon1 | male |

| 8 | egon2 | male |

| 13 | egon3 | male |

+----+-------+------+

foreign key 外键

快速理解foreign key

员工信息表有三个字段:工号  姓名  部门

公司有3个部门,但是有1个亿的员工,那意味着部门这个字段需要重复存储,部门名字越长,越浪费

解决方法:

我们完全可以定义一个部门表

然后让员工信息表关联该表,如何关联,即foreign key

如何找出两张表之间的关系

分析步骤:

#1、先站在左表的角度去找

是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)

#2、再站在右表的角度去找

是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

#3、总结:

#多对一:

如果只有步骤1成立,则是左表多对一右表

如果只有步骤2成立,则是右表多对一左表

#多对多

如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

#一对一:

如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,

将左表的外键字段设置成unique即可

建立表之间的关系

#一对多或称为多对一

三张表:出版社,作者信息,书

一对多(或多对一):一个出版社可以出版多本书

关联方式:foreign key

#多对多

三张表:出版社,作者信息,书

多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多

关联方式:foreign key+一张新的表

#一对一

两张表:学生表和客户表

一对一:一个学生是一个客户,一个客户有可能变成一个学校,即一对一的关系

关联方式:foreign key+unique

注:

删除字段中的外键约束

语法:

ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名称;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值