增
**创建用户**
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;