MySql怎么给列设置默认值 mysqlmysql 修改表默认值默认值

Mysql中IFNULL与IN操作 遍历查询结果 设置默认值-android100学习网
Mysql中IFNULL与IN操作 遍历查询结果 设置默认值
Mysql IFNULL操作  项目中用到的,当SQL查询某个字段为空的时候,查询结果中设置其值为默认值。最笨的方法当然是对查询结果进行处理了,遍历查询结果,当为空的时候,设置其值:代码如下
$len=count($resu
Mysql IFNULL操作
  项目中用到的,当SQL查询某个字段为空的时候,查询结果中设置其值为默认值。最笨的方法当然是对查询结果进行处理了,遍历查询结果,当为空的时候,设置其值:
$len=count($result);
for($i=0;$i&$$i++){
& & $var = $result[$i]['name'];
&if(!$var){
& $result[$i]['name']='default_name';
  如上办法,不仅费时,还??隆H绻?茉?ql语句中直接解决多好啊。
  SQL中有ISNULL方法,介绍如下:
  ISNULL
  使用指定的替换值替换 NULL。
  ISNULL ( check_expression , replacement_value )
  check_expression
  将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。
  replacement_value
  在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。
  但在Mysql中,isnull只是用来判断是否为空,不能实现替换功能,照上面写的话,会直接报错(Incorrect parameter count in the call to native function 'isnull' Errornumber:1582 )。
  那么Mysql中如何实现SQL中的ISNULL方法呢?
  IFNULL( check_expression , replacement_value ),实现了SQL中的ISNULL方法。
  见下sql语句
mysql& SELECT IFNULL(1,0);
+-------------+
| IFNULL(1,0) |
+-------------+
| & & & & & 1 |
+-------------+
1 row in set
  由于 expr1 是 1,不为 NULL,所以函数返回 1. 我们可以再试下,如果让 expr1 为 NULL,是否能返回第二个参数呢? 不妨让 expr1 = 1/0, 由于除数为0,结果就为 NULL 了。
mysql& SELECT IFNULL(1/0,'NowaMagic');
+-------------------------+
| IFNULL(1/0,'NowaMagic') |
+-------------------------+
| www.111cn.net & & & & & & & |
+-------------------------+
1 row in set
  前面的参数为 NULL,就返回第二个参数 www.111cn.net 了。
  这个函数不难理解,为什么要介绍这个函数呢?这是为了后面讲述 MySQL 下的高级黑客技术做的基础知识准备,你可以先试着理解这么一句 hack SQL
UPDATE table SET views = '1' WHERE id = -2441 OR (ORD(MID((SELECT IFNULL(CAST(FirstName AS CHAR),0x20) FROM nowamagic.`tb2` ORDER BY id LIMIT 1,1),2,1))&112)#
  Mysql的IN操作
  见如下SQL语句
select product
from ProductParameter
where val = 19116 OR val = 19127 OR val = 19128 OR val = 19119
  OR了很多是不是觉得很繁琐呀?用IN就解决了:
select product
from ProductParameter
where val in (1, 1))<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&博客访问: 1300686
博文数量: 290
博客积分: 5485
博客等级: 大校
技术积分: 3687
注册时间:
多读书,多做事,广交朋友,趣味丛生
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Mysql/postgreSQL
CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段不会改变。
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP :当我更新这条记录的时候,这条记录的这个字段将会改变。即时间变为了更新时候的时间。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
如果有多个TIMESTAMP列,只有第一个自动更新。
#1创建一个有两个timestamp字段的表dj1。root@localhost:test >create table dj1 (a char(1), b timestamp ,c timestamp); Query OK, 0 rows affected (0.01 sec)#2插入两行数据,仅赋值于列Aroot@localhost:test >insert into dj1 values (1,null,null);Query OK, 1 row affected (0.00 sec)root@localhost:test >insert into dj1 values (2,null,null); Query OK, 1 row affected (0.00 sec)#3查询插入数据,b,c两列都使用current timestamp作为默认值。root@localhost:test >select * from dj1;+------+---------------------+---------------------+| a | b | c |+------+---------------------+---------------------+| 1 |
13:48:40 |
13:48:40 | | 2 |
13:48:44 |
13:48:44 | +------+---------------------+---------------------+2 rows in set (0.00 sec)#4更新一行数据,发现b列timestamp被自动更新,而c列保持不变。root@localhost:test >update dj1 set a=9 where a=1; Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0root@localhost:test >select * from dj1;+------+---------------------+---------------------+| a | b | c |+------+---------------------+---------------------+| 9 |
13:49:08 |
13:48:40 | | 2 |
13:48:44 |
13:48:44 | +------+---------------------+---------------------+2 rows in set (0.00 sec)#5再更新一列,仍然如#4root@localhost:test >update dj1 set a=8 where a=2; Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0root@localhost:test >select * from dj1;+------+---------------------+---------------------+| a | b | c |+------+---------------------+---------------------+| 9 |
13:49:08 |
13:48:40 | | 8 |
13:49:36 |
13:48:44 | +------+---------------------+---------------------+2 rows in set (0.00 sec)#6在b列上创建唯一索引root@localhost:test >create unique index dj1_idx_u1 on dj1(b);Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0#7更新所有行a列,报唯一性冲突。root@localhost:test >update dj1 set a=1;ERROR ): Duplicate entry ' 13:54:45' for key 'dj1_idx_u1'#8查看表定义,可以看到b列有个属性ON UPDATE CURRENT_TIMESTAMP,导致更新数据时,即便未涉及到该列,该列数据也被自动更新。另一方面,c列默认值是' 00:00:00',实际插入已经被自动赋值为current_timestamp。root@localhost:test >show create table dj1\G*************************** 1. row ***************************Table: dj1Create Table: CREATE TABLE `dj1` (`a` char(1) COLLATE utf8_bin DEFAULT NULL,`b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`c` timestamp NOT NULL DEFAULT ' 00:00:00',UNIQUE KEY `dj1_idx_u1` (`b`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin1 row in set (0.00 sec)#9创建表dj2,列b不带自动更新属性。root@localhost:test >CREATE TABLE `dj2` (-> `a` char(1) COLLATE utf8_bin DEFAULT NULL,-> `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,-> `c` timestamp NOT NULL DEFAULT ' 00:00:00',-> UNIQUE KEY `dj1_idx_u1` (`b`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_Query OK, 0 rows affected (0.01 sec)#10插入dj2测试数据root@localhost:test >insert into dj2 values (1,null,null); Query OK, 1 row affected (0.00 sec)root@localhost:test >insert into dj2 values (2,null,null); Query OK, 1 row affected (0.00 sec)#11查看dj2数据root@localhost:test >select * from dj2;+------+---------------------+---------------------+| a | b | c |+------+---------------------+---------------------+| 1 |
14:02:55 |
14:02:55 | | 2 |
14:03:00 |
14:03:00 | +------+---------------------+---------------------+2 rows in set (0.00 sec)#12dj2上创建唯一索引root@localhost:test >create unique index dj2_idx_u1 on dj2(b);Query OK, 2 rows affected (0.02 sec)Records: 2 Duplicates: 0 Warnings: 0#更新数据成功root@localhost:test >update dj2 set a=9;Query OK, 2 rows affected (0.00 sec)Rows matched: 2 Changed: 2 Warnings: 0root@localhost:test >select * from dj2;+------+---------------------+---------------------+| a | b | c |+------+---------------------+---------------------+| 9 |
14:02:55 |
14:02:55 | | 9 |
14:03:00 |
14:03:00 | +------+---------------------+---------------------+2 rows in set (0.00 sec)#13创建表dj3,b列默认值为CURRENT_TIMESTAMP,c列默认值为CURRENT_TIMESTAMP带自动更新属性,报错,不允许行为。root@localhost:test >CREATE TABLE `dj3` (-> `a` char(1) COLLATE utf8_bin DEFAULT NULL,-> `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,-> `c` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,-> UNIQUE KEY `dj1_idx_u1` (`b`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_ERROR 1293 (HY000): Incorr there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause#14创建表dj4,b列默认值为CURRENT_TIMESTAMP,c列默认值为' 00:00:00'带自动更新属性,报错,不允许行为。root@localhost:test >CREATE TABLE `dj4` (-> `a` char(1) COLLATE utf8_bin DEFAULT NULL,-> `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,-> `c` timestamp NOT NULL DEFAULT ' 00:00:00' ON UPDATE CURRENT_TIMESTAMP,-> UNIQUE KEY `dj1_idx_u1` (`b`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_ERROR 1293 (HY000): Incorr there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause#15创建表dj5,b列默认值为CURRENT_TIMESTAMP带自动更新属性,c列默认值为CURRENT_TIMESTAMP,报错,不允许行为。root@localhost:test >CREATE TABLE `dj5` (-> `a` char(1) COLLATE utf8_bin DEFAULT NULL,-> `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,-> `c` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,-> UNIQUE KEY `dj1_idx_u1` (`b`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_ERROR 1293 (HY000): Incorr there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clauseconclusion:1.MySQL默认表的第一个timestamp字段为NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP属性,必须显式定义改变这种行为。2.MySQL只允许一个timestamp字段拥有[DEFAULT CURRENT_TIMESTAMP |ON UPDATE CURRENT_TIMESTAMP]属性。 我的理解为要么都是DEFAULT CURRENT_TIMESTAMP 要么都是DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
3.修改字段属性值
show create table tbl_
alter table tbl_ledgerrecord change intoStorageDate& intoStorageDate timestamp DEFAULT CURRENT_TIMESTAMP;
阅读(23864) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。后使用快捷导航没有帐号?
只需一步,快速开始
查看: 6538|回复: 3
Mysql怎么设定数据默认值为当前系统时间?
UID85352在线时间 小时积分3880帖子离线16993 天注册时间
金牌会员, 积分 3880, 距离下一级还需 1120 积分
Mysql怎么设定数据默认值为当前系统时间?
在mssql 我用 default (getdate())
mysql 好像不行,大家是怎么做的?
UID44970在线时间 小时积分51958帖子离线16993 天注册时间
mysql是now吧。
UID85352在线时间 小时积分3880帖子离线16993 天注册时间
金牌会员, 积分 3880, 距离下一级还需 1120 积分
恩 谢谢青蛙,问题解决。
DEFAULT CURRENT_TIMESTAMP
UID207382在线时间 小时积分19605帖子离线16993 天注册时间
mysql&&& NOW()
Powered byMySQL表字段设置默认值(图文教程及注意细节)
字体:[ ] 类型:转载 时间:
默认值的设置很重要,比如在插入的时候一些字段是可以省略的,这会带来很多的方便,接下来将要介绍MySQL表字段设置默认值感兴趣的你可以千万不要走开啊,希望本文对你有所帮助
环境 MySQL 5.1 + 命令行工具 问题 MySQL表字段设置默认值 解决
代码如下: --SQL: CREATE TABLE test( i_a int NOT NULL DEFAULT 1, ts_b timestamp NOT NULL DEFAULT NOW(), c_c char(2) NOT NULL DEFAULT '1' ); --以下SQL不合法 --time_d time NOT NULL DEFAULT CURTIME(), --date_e date NOT NULL DEFAULT CURDATE(), --datetime_f datetime NOT NULL DEFAULT NOW(),
&总结 int类型:默认值也得是整型,并且default后边不要()括号。 char类型:默认值使用单引号。DATETIME类型:NOW()函数以'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。不支持使用系统默认值。 DATE类型:CURDATE()以'YYYY-MM-DD'的格式返回今天的日期,可以直接存到DATE字段中。不支持使用系统默认值。 TIME类型:CURTIME()以'HH:MM:SS'的格式返回当前的时间,可以直接存到TIME字段中。不支持使用系统默认值。 参考资料 mysql表字段默认值 用sql语句创建表时,给表字段默认值出错。 比如:mssql中
代码如下: CREATE TABLE dnt_forums( aa int NOT NULL DEFAULT (''), bb date NOT NULL DEFAULT (getdate()), cc char(50) NOT NULL DEFAULT (null) }
请问上述的sql语句要如何修改在mysql中才能使用 aa 是 int 类型,默认值也得是整型,并且default后边不要()括号 bb date类型不支持使用系统默认值,改成timestamp,能过now()取系统时间 cc 已经不允许为空(not null)所以不能默认为 null ,可以改成空字符串
代码如下: CREATE TABLE dnt_forums( aa int NOT NULL DEFAULT 2, bb timestamp NOT NULL DEFAULT now(), cc char(50) NOT NULL DEFAULT '' ); MySQL获取系统当前时间的函数
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 mysql 设置默认值 的文章

 

随机推荐