一。not null vs DEAFUL value
有人说芳华就是批驳的年光光阴,这种说法并不夸大。这种批驳的特点是很高的积极性和很强的原则性。? 在建表的时辰,凡是会请求给所有字段一个默认值,1来避免产生null字段,2来还可以在写代码的时辰偷下懒。
case1: not null +default
于是如许的create sql就出来了
Sql代码??
DROP?TABLE?IF?EXISTS?`zhushan`.`admin`;??
CREATE?TABLE??`zhushan`.`admin`?(??
??`admin_id`?int(10)?unsigned?NOT?NULL?auto_increment,??
??`name`?varchar(20)?NOT?NULL?default?""admin"",??
??`pwd`?varchar(20)?NOT?NULL?default?""amdin"",??
??PRIMARY?KEY??(`admin_id`)??
)?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;??
?
好,我一向认为如许是:?name/pwd 字段不克不及为空,并且插入null的话,会默认填写admin
那么测试一下:
Sql代码??
?into?admin?(name,pwd)?values(null,2)??
?Column ""name"" cannot be null .?
?
实际上在Mysql指定列 not null 的时辰,其含义是插入sql中,该字段值不克不及为null!!后面的default 也就不会履行了。是以在写了default value之后,还是须要把not null 去掉的。
?
case2: default ,没有not null
Sql代码??
DROP?TABLE?IF?EXISTS?`zhushan`.`admin`;??
CREATE?TABLE??`zhushan`.`admin`?(??
??`admin_id`?int(10)?unsigned?NOT?NULL?auto_increment,??
??`name`?varchar(20)?default?""admin"",??
??`pwd`?varchar(20)?default?""amdin"",??
??PRIMARY?KEY??(`admin_id`)??
)?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;??
?同样应用上方的sql进行插入:
Sql代码??
?into?admin?(name,pwd)?values(null,2)??
获得的成果居然更恶心:default字段失效了!插入null居然直接赋值成null了
Sql代码??
mysql>?SELECT?*?FROM?admin?a;??
+----------+-------+-------+??
|?admin_id?|?name??|?pwd???|??
+----------+-------+-------+??
|????????1????|?NULL?|?2???????|??
+----------+-------+-------+??
?case3: default /not null 其实都不克不及解决题目,最简单的办法就是全部not null + default, 对须要取默认值的字段,语句直接跳过该字段(类似case1,2中的admin_id),如许就会取到默认值了。
二。行锁
InnoDB?行锁是经由过程给索引上的索引项加锁来实现的,这一点?MySQL?与?ORACLE?不合,后者是经由过程在数据块中对响应数据行加锁来实现的。?InnoDB?这种行锁实现特点意味着:只有经由过程索引前提检索数据,?InnoDB?才应用行级锁,不然,?InnoDB?将应用表锁!这里讲的很清楚?http://blog.chinaunix.net/u2/69385/showart_1852286.html
因为作者没有写是mysql4,还是mysql5,于是本身在 Mysql5下测试了一把,发明还是如许。
Sql代码??
Session1:??
??
mysql>??set?autocommit=0;???//不主动提交??
??
Query?OK,?0?rows?affected?(0.00?sec)??
??
mysql>?SELECT?*?FROM?account_seller?t?where?issue_day?=?0?for?;??
??
4?rows?in?set?(0.00?sec)??
??
???
??
Session2:?//session2这里就守候了??
??
???????SELECT?*?FROM?account_seller?t?where?issue_day?=?300?for???
??
???????!Lock?wait?timeout?exceeded;?try?restarting?transaction??
三。varchar
CHAR?和VARCHAR?类型声明的长度默示你想要保存的最大字符数.
?
gbk定义的VARCHAR(5), 可以装下几许器材呢???
可以放下5个1 ""11111"",也可以放下‘我是个坏人’,然则绝对放不下""123456"".苏霍姆林斯基
--转自