一。not null vs DEAFUL value
在建表的时候,通常会要求给所有字段一个默认值,1来避免产生null字段,2来还可以在写代码的时候偷下懒。
case1: not null +default
于是这样的create 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
那么测试一下:
insert 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
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进行插入:
insert into admin (name,pwd) values(null,2)
得到的结果居然更恶心:default字段失效了!插入null居然直接赋值成null了
mysql> SELECT * FROM admin a;
+----------+-------+-------+
| admin_id | name | pwd |
+----------+-------+-------+
| 1 | NULL | 2 |
+----------+-------+-------+
case3: default /not null 其实都不能解决问题,最简单的办法就是全部not null + default, 对需要取默认值的字段,insert语句直接跳过该字段(类似case1,2中的admin_id),这样就会取到默认值了
二。行锁
InnoDB
行锁是通过给索引上的索引项加锁来实现的,这一点
MySQL
与
ORACLE
不同,后者是通过在数据块中对相应数据行加锁来实现的。
InnoDB
这种行锁实现特点意味着:只有通过索引条件检索数据,
InnoDB
才使用行级锁,否则,
InnoDB
将使用表锁!这里讲的很清楚
http://blog.chinaunix.net/u2/69385/showart_1852286.html
由于作者没有写是mysql4,还是mysql5,于是自己在 Mysql5下测试了一把,发现还是这样。
Session1:
mysql> set autocommit=0; //不自动提交
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM account_seller t where issue_day = 0 for update;
4 rows in set (0.00 sec)
Session2: //session2这里就等待了
SELECT * FROM account_seller t where issue_day = 300 for update
!Lock wait timeout exceeded; try restarting transaction
三。varchar
CHAR
和VARCHAR
类型声明的长度表示你想要保存的最大字符数.
gbk定义的VARCHAR(5), 可以装下多少东西呢???
可以放下5个1 '11111',也可以放下‘我是个坏人’,但是绝对放不下'123456'.
分享到:
相关推荐
`id` varchar(6) NOT NULL COMMENT '主键', `name` varchar(30) NOT NULL COMMENT '名称', `parent_id` int(11) NOT NULL COMMENT '归属ID', `short_name` varchar(30) NOT NULL COMMENT '简短名称', `level_...
java+mySQL进销存管理系统包括源码与mysql数据库 详情见压缩文件 其中摘出一个mysql表: create database njue; use njue; /*MySQL数据库运行脚本*/ CREATE TABLE tb_customer( id char(10) primary key, ...
CREATE TABLE BOOK( BOOKID VARCHAR(50) PRIMARY KEY NOT NULL, BOOKID VARCHAR(50) PRIMARY KEY NOT NULL, WRITER VARCHAR(50) NOT NULL, PRESS VARCHAR(50) NOT NULL, PUBTIME DATETIME NOT NULL, PUBNUM INT NOT...
`name` varchar(255) NOT NULL DEFAULT '', `parent_id` smallint(6) NOT NULL DEFAULT '0' COMMENT '上级', `english_name` varchar(255) NOT NULL DEFAULT '' COMMENT '英文名', `letter2` varchar(255) NOT NULL ...
主要介绍了Mysql中varchar长度设置方法的相关资料,本文还给大家带来了valar类型的变化及char()和varchar()的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下
数据库设计:库mydb 表events <br>EVENT_ID BIGINT(20) NOT NULL AUTOINC EVENT_DATE DATETIME NULL title VARCHAR(255) NULL <br> <br>2. 注意文件的位置 <br>3. tomcat中配jdbc就不用说了, ...
`name` varchar(255) NOT NULL DEFAULT '', `parent_id` smallint(6) NOT NULL DEFAULT '0' COMMENT '上级', `english_name` varchar(255) NOT NULL DEFAULT '' COMMENT '英文名', `letter2` varchar(255) NOT ...
book: 列名 数据类型 是否为空/性质 说明 book_id int not null / PK 唯一书籍序号 book_name varchar not null 书籍名称 book_author varchar not null 书籍作者 图书管理系统数据库设计-MYSQL实现全文共10页,当前...
在本篇文章中我们给大家分享了关于MySQL中int、char以及varchar的性能对比的相关内容,有兴趣的朋友们学习下。
ALTER TABLE `ecs_brand` ADD COLUMN `brand_banner` VARCHAR(80) NOT NULL COMMENT '商品品牌banner'; ALTER TABLE `ecs_goods` ADD COLUMN `sales_count` int(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `click_...
`name` varchar(16) NOT NULL default '无名老饕', `password` varchar(16) NOT NULL default '', `power` int(2) NOT NULL default '0', `image` varchar(100) default 'D:\\Code_Maker\\eclipse9.0\\test\\Web...
消息聊天系统MySQL表设计_消息系统数据库设计 1、新建platform_info表,此表存储调⽤消息平台⽅应⽤信息 CREATE TABLE IF NOT EXISTS `platform_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `platform_code` ...
not null NICK_NAME varchar(50) not null BIRTHDAY date not null 0000-00-00 MINISTRATION varchar(50) not null MATE varchar(50) not null CHILD varchar(50) not null DEPT_NAME varchar(50) not null ADD_DEPT...
`zi` varchar(6) NOT NULL DEFAULT '' COMMENT '汉字', `py` varchar(32) NOT NULL DEFAULT '' COMMENT '无声调拼音', `pinyin` varchar(64) NOT NULL DEFAULT '' COMMENT '有声调拼音', `bihua` tinyint(4) NOT...
列名 数据类型 是否为空/性质 说明 stu_id int not null /PK 标明学生唯一学号 stu_name varchar not null 学生姓名 stu_sex varchar not null 学生性别 stu_age int not null 学生年龄 stu_pro varchar not null ...
* 0 译者序 * 1 MySQL的一般的信息 ... # 7.3.7.1 CHAR和VARCHAR类型 # 7.3.7.2 BLOB和TEXT类型 # 7.3.7.3 ENUM类型 # 7.3.7.4 SET类型 + 7.3.8 为列选择正确的类型 + 7.3.9 列索引 + 7.3.10 多列索引 +...
Java小区物业管理系统 ... `password` varchar(50) NOT NULL, ) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; CREATE TABLE `charge` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`areaname` varchar(32) NOT NULL, `pid` int(11) NOT NULL, `shortname` varchar(8) NOT NULL, `level` int(11) NOT NULL, `position` varchar(64) NOT NULL, `sort` tinyint(4) NOT NULL, PRIMARY KEY (`id...
SQL NOT NULL 约束 在默认的情况下,表的列接受 NULL 值。 SQL NOT NULL 约束 NOT NULL 约束强制列不接受 NULL 值。 NOT NULL 约束强制字段始终包含值。... LastName varchar(255) NOT NULL, FirstName varchar(25
MovieID bigint(20) NOT NULL auto_increment, Name varchar(200) default NULL, Sort varchar(50) default NULL, Lang varchar(50) default NULL, Addr varchar(50) default NULL, Intro text, Pic varchar...