mysql怎么让自增长的?
1、创建表时指定AUTO_INCREMENT自增值的初始值(即起始值):
CREATE TABLE XXX (ID INT(5) PRIMARY KEY AUTO_INCREMENT) AUTO_INCREMENT=100;
2、通过 ALTER TABLE 修改初始值(但是要大于表中的 AUTO_INCREMENT 自增值,否则设置无效):
ALTER TABLE XXX AUTO_INCREMENT=100;
3、如果自增序列的最大值被删除了,则在插入新记录时,该值被重用:
就是说如果表中原本有AUTO_INCREMENT属性值连续为78、100的值,但100这个数据被删除了,下此再添加数据的时候自增值为101,100被重用了。
即使在你将整个表中的所有数据delete清空后,之前的自增序列最大值还是会被重用。
解决办法是:
使用 ALTER TABLE XXX AUTO_INCREMENT=0; 重新设置自增初始值。
如何给mysql数据库的字段设默认值?
当数据不填,默认业务一定会出现的值,如删除状态,数据表中有该字段但是某些具体业务不使用该字段不设值默认值(就是null),如邮费实体店根本不存在,not null字段不一定要设置默认值,如商品价格必须要商家自己填写,不填一定要提示,所以不设置默认值,null字段一定不设置默认值。总之根据现实情况来,数据库表初衷是模拟现实,但存在某个具体业务不使用某些字段,所以这些字段就是null,有些字段必须要用户自己填入设置默认值也没有意义。
mysql怎么设置默认值为当前时间?
CREATE TABLE `test1` (
`a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`c` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
建表test1。3个字段 a,b,c
insert into test1 VALUES(NULL,NULL,NULL)
插入的时候设置3字段都是 null
然后成功
Affected rows : 1, Time: 0.00sec
怎么解决数据库Mysql自增锁问题?
在innodb里里面又一个参数叫innodb_autoinc_lock_mode,它的值分别为0,1,2.
下面来说说这三个值分别是什么意思。
0:传统方式。串行自增的,并且是连续的。这样需要独占的串行锁,语句完成才释放锁,所以性能最低。例如:1、2、3、4、5、6
1:连续方式。自增的,并且是连续的。当语句申请到自增锁就释放自增锁,自增锁就可以给其它语句使用。性能会好很多。这个是系统默认的。例如:1、2、3、4、5、6
2: 交错方式。多语句插入数据时,有可能自增的序列号和执行先后顺不一致,并且中间可能有断裂。一次分配一批自增值,然后下个语句就再进行分配一批自增值,阻塞很小,性能很高。例如:1、2、3、6、5
楼主说的自增锁的问题应该就是并发高的时候,语句执行完毕才会释放锁,所以可能会遇到语句阻塞。如果您不需要连续的自增id的话,可以把innodb_autoinc_lock_mode=2,并且把innodb_autoextend_increment设置大一些,例如innodb_autoextend_increment=10,这样可以缓解mysql自增锁的问题。
但是在statement-based replication下不一定是安全的,因为它插入的数据不一定是连续的,可能会导致一些主从不一致的情况。

