mysql的增_MySQL-----增

这篇博客介绍了如何在MySQL和SQL Server中创建用户、数据库和表,以及如何管理自增ID的步长。详细阐述了如何设置初始值、步长,以及不同情况下自增ID的变化规则,并展示了相关SQL语句示例。内容涵盖了数据库的创建、数据插入以及自增列的优化策略。
摘要由CSDN通过智能技术生成

**创建用户**

create user 'alex'@'192.168.1.1' identified by '123123';

create user 'alex'@'192.168.1.%' identified by '123123';

create user 'alex'@'%' identified by '123123';

**创建数据库**

create database “数据库名称” default charset utf8;

**创建数据库表**

create table 表名(

列名 类型,

列名 类型 not null,

列名 类型 not null default 1,

列名 类型 not null auto_increment,

列名 类型 not null auto_increment primary key,

)engine=innodb default charset=utf-8;

engine = innodb 支持事务,原子性操作。

engine = myisam 不支持事件的回滚,不建议用。

not null 是否可以为空。

default : 定义默认值。

auto_increment 表示:自增,是这一列的唯一标识。

primary key:是主键。表示 约束(不能重复且不能为空); 加速查找。

char(数字): 限制长度。

***一个表里只能有一个自增列和一个主键。

例子:

create table 表名(

id int not null auto_increment primary key,

name char(10)

)engine=innodb default charset=utf-8;

**插入数据库表数据**

insert into 数据库表(字段) values(数据);

insert into 数据库表(id,name) values(1,'george');

insert into 数据库表(id,name) values(1,'george'),(2,'wang');  一次添加多个值

**将A表中的数据或指定数据添加到B表中**

insert into 数据库表名A(id,name) select id,name from 数据库表名B;

数据类型:

数字:

tinyint

int

bigint

float

double

decimal(精准小数):

decimal(10,5) 意思是10为这个数的总位数,5为取到这个数的小数后5位

字符串:

char()   如果char为10,但输入的不足10,则char自己补到10.

varchar() 如果varchar为10,但输入的不足10,varchar不补到10.

char和varchar的区别是char查询快,因为是定长,varchar节省空间,因为不补充字节。

建议:数据库优化,定长在前,varchar在后。

text

mediumtext

longtext

时间类型:

datatime:

枚举:

enum

set

自增:

**在数据库表中,从大到小的自增**

desc 数据库表名

**控制自增的起始值**

alter table 数据库表名 AUTO_INCREMENT=20;

加在创建表的结尾,在engine = innodb的后边。

可以通过 “alter table 表名 auto_incremenrt=n” 语句强制设置自动增长列的初始值,默认从1开始,但是该强制的默认值是保留在内存中的,如果该值在使用之前数据库重新启动,那么这个强制的默认值就会丢失,就需要数据库启动后重新设置

MySQL: 自增步长:基于会话级别

**auto_increment_increment控制列中的值的增量值,也就是步长**

**auto_increment_offset确定AUTO_INCREMENT列值的起点,也就是初始值**

**变量范围:可以在全局以及session级别设置这2个变量**

**查看变量auto_increment_increment与auto_increment_offset**

**基于会话(session)级别**

show session variables like 'auto_inc%';查看会话变量

set session auto_increment_increment=2; 设置会话步长

set session auto_increment_offset=10;   设置会话起始值

**基于全局(global)级别**

show global variables like 'auto_inc%';查看全局变量

set global auto_increment_increment=2; 设置全局步长

set global auto_increment_offset=10;  设置全局起始值

SqlServer:自增步长:基于表级别

create table t5 (

nid int(11) not null auto_increment,

pid int(11) not null,

num int(11) default null,

primary key (nid,pid)

) engine=innodb auto_increment=4, 步长=2 default charset=utf8;

create table t6 (

nid int(11) not null auto_increment,

pid int(11) not null,

num int(11) default null,

primary key (nid,pid)

) engine=innodb auto_increment=4, 步长=20 default charset=utf8;

# 演示auto_increment_increment与auto_increment_offset

**创建演示表,使用auto_increment子句**

create table t1(id int not null auto_increment primary key, col varchar(20));

**插入记录**

insert into t1(col) values('robin'),('fred'),('jack'),('james');

**下面可以看到id列起始值为1,增量为1**

select * from t1;

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

| id | col |

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

| 1 | robin |

| 2 | fred |

| 3 | jack |

| 4 | james |

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

**设置步长为5**

set session auto_increment_increment=5;

show variables like '%auto_incre%';

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

| Variable_name | Value |

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

| auto_increment_increment | 5 |

| auto_increment_offset | 1 |

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

**清空表t1**

truncate table t1;

**再次插入记录**

insert into t1(col) values('robin'),('fred'),('jack'),('james');

**如下查询可以看到步长以5位基数发生变化**

select * from t1;

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

| id | col |

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

| 1 | robin |

| 6 | fred |

| 11 | jack |

| 16 | james |

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

**设置初始值为5**

set session auto_increment_offset=5;

show variables like '%auto_incre%';

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

| Variable_name | Value |

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

| auto_increment_increment | 5 |

| auto_increment_offset | 5 |

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

truncate table t1;

insert into t1(col) values('robin'),('fred'),('jack'),('james');

**下面是新的结果**

select * from t1;

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

| id | col |

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

| 5 | robin |

| 10 | fred |

| 15 | jack |

| 20 | james |

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

# auto_increment_increment与auto_increment_offset取值范围

**将变量auto_increment_increment设置为0**

set session auto_increment_increment=0;

**实际值变成了1**

show variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 1 |

| auto_increment_offset | 5 |

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

**同样将auto_increment_offset设置为0**

set session auto_increment_offset=0;

**实际值也变成了1**

show variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 1 |

| auto_increment_offset | 1 |

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

**下面尝试将2个变量设置为大于65535**

set session auto_increment_increment=65537;

set session auto_increment_offset=65537;

**其实际的值都变成了65535**

how variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 65535 |

| auto_increment_offset | 65535 |

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

**尝试为2个变量设置为负值**

set session auto_increment_offset=-2;

set session auto_increment_increment=-5;

**下面的查询可以看出全部恢复到缺省值1**

show variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 1 |

| auto_increment_offset | 1 |

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

由上可以看出2个变量只能设置为1至65535之间的整数值。

所有非正整数全部会置为缺省值1,大于65535的值会被自动置为65535。

# 全局与session级别的设置

**查看全局范围这2个变量的值**

show global variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 1 |

| auto_increment_offset | 1 |

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

**下面分别设置会话(session)基本的值**

set session auto_increment_increment=5;

set session auto_increment_offset=10;

**查看会话(session)级别的值**

show session variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 5 |

| auto_increment_offset | 10 |

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

**查看全局(global)级别的值**

show global variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 1 |

| auto_increment_offset | 1 |

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

**设置全局(global)级别的值**

set global auto_increment_increment=2;

set global auto_increment_offset=3;

show global variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 2 |

| auto_increment_offset | 3 |

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

# 已有auto_increment列值任一变量变化的情形

truncate table t1;

show variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 1 |

| auto_increment_offset | 1 |

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

insert into t1(col) values('robin'),('fred'),('jack');

select * from t1;

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

| id | col |

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

| 1 | robin |

| 2 | fred |

| 3 | jack |

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

set session auto_increment_increment=5;

show variables like '%auto_increment%';

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

| Variable_name | Value |

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

| auto_increment_increment | 5 |

| auto_increment_offset | 1 |

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

insert into t1(col) values('david'),('tim'),('jerry');

select * from t1;

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

| id | col |

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

| 1 | robin |

| 2 | fred |

| 3 | jack |

| 6 | david |

| 11 | tim |

| 16 | jerry |

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

New_value = auto_increment_offset+ N * auto_increment_increment

New_value1 = 1 + 1 * 5 = 6

New_value2 = 1 + 2 * 5 = 11

**下面是修改auto_increment_offset后的结果**

set session auto_increment_offset=2;

insert into t1(col) values('lewis'),('ian');

select * from t1;

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

| id | col |

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

| 1 | robin |

| 2 | fred |

| 3 | jack |

| 6 | david |

| 11 | tim |

| 16 | jerry |

| 22 | lewis |

| 27 | ian |

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

这个id为22,应该是这样推算来的:max(id)+(new_offset-old_offset)+increment

也就是说变化auto_increment_offset后的第一个值为max(id)+(new_offset-old_offset)+increment之后再按步长递增。

# SqlServer:自增步长:

**基础表级别:**

CREATE TABLE `t5` (

`nid` int(11) NOT NULL AUTO_INCREMENT,

`pid` int(11) NOT NULL,

`num` int(11) DEFAULT NULL,

PRIMARY KEY (`nid`,`pid`)

) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8

CREATE TABLE `t6` (

`nid` int(11) NOT NULL AUTO_INCREMENT,

`pid` int(11) NOT NULL,

`num` int(11) DEFAULT NULL,

PRIMARY KEY (`nid`,`pid`)

) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8

# 增

insert into tb11(name,age) values('alex',12);

insert into tb11(name,age) values('alex',12),('root',18);

insert into tb12(name,age) select name,age from tb11;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值