`
sw1982
  • 浏览: 502913 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql那点事(行锁+not null + varchar)

阅读更多

一。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

CHARVARCHAR 类型声明的长度表示你想要保存的最大字符数.

 

gbk定义的VARCHAR(5), 可以装下多少东西呢???

可以放下5个1 '11111',也可以放下‘我是个坏人’,但是绝对放不下'123456'.

 

分享到:
评论
2 楼 sw1982 2009-08-17  
jianguang_qq 写道
insert into admin (pwd) values(2) 
这样应该就可以了吧

  不能为每个字段不同的查询都配一个sql把。呵呵。特别是insert写动态会比较麻烦
1 楼 jianguang_qq 2009-08-16  
insert into admin (pwd) values(2) 
这样应该就可以了吧

相关推荐

    最新全国省市县mysql表(2015)+百度地图定位

    `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进销存管理系统实例源码

    java+mySQL进销存管理系统包括源码与mysql数据库 详情见压缩文件 其中摘出一个mysql表: create database njue; use njue; /*MySQL数据库运行脚本*/ CREATE TABLE tb_customer( id char(10) primary key, ...

    【数据库MySQL】数据库网上书店管理系统.pdf

    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...

    MYSQL世界各洲包含国家英文、中文、简称、层级关系表-----------19

    `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长度设置方法

    主要介绍了Mysql中varchar长度设置方法的相关资料,本文还给大家带来了valar类型的变化及char()和varchar()的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    mysql+jdbc+jsp+Hibernate3.2+tomcattomcat5.028成功测试

    数据库设计:库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就不用说了, ...

    MYSQL世界各洲包含国家英文、中文、简称、层级关系表

    `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 ...

    图书管理系统数据库设计-MYSQL实现.docx

    book: 列名 数据类型 是否为空/性质 说明 book_id int not null / PK 唯一书籍序号 book_name varchar not null 书籍名称 book_author varchar not null 书籍作者 图书管理系统数据库设计-MYSQL实现全文共10页,当前...

    对比MySQL中int、char以及varchar的性能

    在本篇文章中我们给大家分享了关于MySQL中int、char以及varchar的性能对比的相关内容,有兴趣的朋友们学习下。

    ectouch企业版20150101整包,带微信通,微信支付

    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_...

    接着上次的论坛来的,部署在apache下的

    `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表设计-消息系统数据库设计.pdf

    消息聊天系统MySQL表设计_消息系统数据库设计 1、新建platform_info表,此表存储调⽤消息平台⽅应⽤信息 CREATE TABLE IF NOT EXISTS `platform_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `platform_code` ...

    OA办公系统数据库字典.pdf

    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...

    新华字典MySQL数据

    `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...

    图书管理系统数据库设计-MYSQL实现(1).docx

    列名 数据类型 是否为空/性质 说明 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 ...

    MySQL中文参考手册

    * 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小区物业管理系统框架 html + css + jquery + jsp + ssm + mysql

    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,

    mysql 地区数据

    `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 约束

    SQL NOT NULL 约束 在默认的情况下,表的列接受 NULL 值。 SQL NOT NULL 约束 NOT NULL 约束强制列不接受 NULL 值。 NOT NULL 约束强制字段始终包含值。... LastName varchar(255) NOT NULL, FirstName varchar(25

    JSP+MYSQL网上商城

    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...

Global site tag (gtag.js) - Google Analytics