今天宠物迷的小编给各位宠物饲养爱好者分享mysql 默认时间设置的宠物知识,其中也会对mysql 中怎么设置默认值为系统日期进行专业的解释,如果能碰巧解决你现在面临的宠物相关问题,别忘了关注本站哦,现在我们开始吧!
-- 方法一:
由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用TIMESTAMP类型代替DATETIME类型。
TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
1.列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
2.列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
3.你明确地设定TIMESTAMP列为NULL.
4.除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。
所以把日期类型 选择成timestamp 允许空就可以了
CREATE TABLE test (
uname varchar(50) NOT NULL,
updatetime timestamp NULL DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果要在navicat下操作的话,将字段设置为timestamp,然后默认值写上CURRENT_TIMESTAMP即可
-- 方法一:
由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用TIMESTAMP类型代替DATETIME类型。
TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
1.列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
2.列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
3.你明确地设定TIMESTAMP列为NULL.
4.除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。
所以把日期类型 选择成timestamp 允许空就可以了
CREATE TABLE test (
uname varchar(50) NOT NULL,
updatetime timestamp NULL DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果要在navicat下操作的话,将字段设置为timestamp,然后默认值写上CURRENT_TIMESTAMP即可
方法/步骤 右键点击要打开的表,点击设计视图。 请点击输入图片描述 打开后,点击选中要设置的日期字段。 请点击输入图片描述 点击选中默认值。 请点击输入图片描述 选中后,点击右边的小圆点图标。 请点击输入图片描述 在弹出的窗口上,输入函数Now(),点击确定按钮。 请点击输入图片描述 成功设置了字段的默认值。 请点击输入图片描述 在新建数据行时,日期就会默认使用当前日期了。 请点击输入图片描述 总结: 1. 右键点击表,点击设计视图。 2. 点击要设置的字段。 3. 点击选中默认值。 4. 点击小圆点。 5. 输入Now(),点击确定。
问题:MySQL datetime数据类型设置当前时间为默认值解决:-- 方法一:由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用TIMESTAMP类型代替DATETIME类型。TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。自动更新第一个TIMESTAMP列在下列任何条件下发生:1.列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。2.列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)3.你明确地设定TIMESTAMP列为NULL.4.除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。所以把日期类型 选择成timestamp 允许空就可以了CREATE TABLE test ( uname varchar(50) NOT NULL, updatetime timestamp NULL DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 如果要在navicat下操作的话,将字段设置为timestamp,然后默认值写上CURRENT_TIMESTAMP即可-- 方法二:在MySQL5.0以上版本中也可以使用trigger来实现此功能。create table test_time ( idint(11), create_time datetime ); delimiter | create trigger default_datetime beforeinsert on test_time foreach row if new.create_time is null then set new.create_time = now(); end if;| delimiter ;-- 方法三:create table test(name varchar(10),registerTime datetime default getdate());create table test(name varchar(10),registerTime datetime default '0000-00-00');
修改日期类型为timestamp 并允许空,如下: CREATE TABLE `test` (`aaaa` varchar(50) NOT NULL,`createday` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8; 如果是在navicat下操作的话,设置字段的类型为timestamp,默认值写上CURRENT_TIMESTAMP 扩展资料 mysql中的时间类型: mysql中我们用的时间类型有DATE DATETIME TIME TIMESTAMP四种: 1、DATE只表示日期,检索以YYYY-MM-DD的格式显示,范围是1000-01-01到9999-12-31。 2、TIME只表示时间,检索以HH:MM:SS格式显示,范围是00:00:00到23:59:59。 3、DATETIME表示了日期和时间,检索以YYYY-MM-DD HH:MM:SS格式显示。 4、TIMESTAMP和DATETIME表示格式一样两者的不同点如下: 当使用timestamp的时候,数据有更新的时候这个字段自动更新为当前时间,所以可以作为lastmodify使用,这个变化是默认设置,如果想使时间不更新可以设置DEFAULT CURRENT_TIMESTAMP timestamp的范围不能早于1970或者晚于2037,超过这个时间范围的话为0。 timestamp存储的时候是转为UTC存储的,获取的时候根据客户端所在时区进行展示。 timestamp占4个字节,datetime占8个字节。
MySQL 里面.
默认值, 不允许使用 函数
下面是 例子
mysql> CREATE TABLE test_wang (
-> ID INT,
-> date1 VARCHAR(20),
-> date2 VARCHAR(20)
-> );
Query OK, 0 rows affected (0.01 sec)
-- 对列插入 随机数. 确认 数据是可以存储的.
mysql> insert into test_wang values (1, rand(), rand());
Query OK, 1 row affected (0.00 sec)
mysql> select * from test_wang;
+------+-------------------+-------------------+
| ID | date1 | date2 |
+------+-------------------+-------------------+
| 1 | 0.770875269333716 | 0.351427750989262 |
+------+-------------------+-------------------+
1 row in set (0.00 sec)
-- 这里尝试 设置 列 默认值 为 随机数, 结果失败了.
mysql> ALTER TABLE test_wang
-> MODIFY COLUMN date1
-> VARCHAR(20)
-> DEFAULT RAND() ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'RAND()' at line 4
-- 设置默认值 为 固定值, 是成功的.
mysql> ALTER TABLE test_wang
-> MODIFY COLUMN date1
-> VARCHAR(20)
-> DEFAULT '123' ;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
DROP TABLE test_wang;
-- 如果是 日期的话, 尝试使用 TIMESTAMP 数据类型
-- 来实现这个功能.
mysql> CREATE TABLE test_wang (
-> id INT UNSIGNED AUTO_INCREMENT,
-> date1 TIMESTAMP,
-> date2 TIMESTAMP,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into test_wang(date1) VALUES (null);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test_wang;
+----+---------------------+---------------------+
| id | date1 | date2 |
+----+---------------------+---------------------+
| 1 | 2011-10-12 11:30:26 | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)
MySQL目前不支持列的Default 为函数的形式,
如达到你某列的默认值为当前更新日期与时间的功能,
你可以使用TIMESTAMP列类型
下面就详细说明TIMESTAMP列类型
TIMESTAMP列类型
TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。
TIMESTAMP值显示尺寸的格式如下表所示:
:
+---------------+----------------+
| 列类型 | 显示格式 |
| TIMESTAMP(14) | YYYYMMDDHHMMSS |
| TIMESTAMP(12) | YYMMDDHHMMSS |
| TIMESTAMP(10) | YYMMDDHHMM |
| TIMESTAMP(8) | YYYYMMDD |
| TIMESTAMP(6) | YYMMDD |
| TIMESTAMP(4) | YYMM |
| TIMESTAMP(2) | YY |
+---------------+----------------+
“完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸创造
最常见的显示尺寸是6、8、12、和14。
你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14。
列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数。
列如:
定义字段长度 强制字段长度
TIMESTAMP(0) -> TIMESTAMP(14)
TIMESTAMP(15)-> TIMESTAMP(14)
TIMESTAMP(1) -> TIMESTAMP(2)
TIMESTAMP(5) -> TIMESTAMP(6)
所有的TIMESTAMP列都有同样的存储大小,
使用被指定的时期时间值的完整精度(14位)存储合法的值不考虑显示尺寸。
不合法的日期,将会被强制为0存储
这有几个含意:
1、虽然你建表时定义了列TIMESTAMP(8),但在你进行数据插入与更新时TIMESTAMP列
实际上保存了14位的数据(包括年月日时分秒),
只不过在你进行查询时MySQL返回给你的是8位的年月日数据。
如果你使用ALTER TABLE拓宽一个狭窄的TIMESTAMP列,以前被“隐蔽”的信息将被显示。
2、同样,缩小一个TIMESTAMP列不会导致信息失去,除了感觉上值在显示时,较少的信息被显示出。
3、尽管TIMESTAMP值被存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP();
由于MySQL返回TIMESTAMP列的列值是进过格式化后的检索的值,
这意味着你可能不能使用某些函数来操作TIMESTAMP列(例如HOUR()或SECOND()),
除非TIMESTAMP值的相关部分被包含在格式化的值中。
例如,一个TIMESTAMP列只有被定义为TIMESTAMP(10)以上时,TIMESTAMP列的HH部分才会被显示,
因此在更短的TIMESTAMP值上使用HOUR()会产生一个不可预知的结果。
4、不合法TIMESTAMP值被变换到适当类型的“零”值(00000000000000)。(DATETIME,DATE亦然)
你可以使用下列语句来验证:
CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCREMENT, 'date1' TIMESTAMP (8) PRIMARY KEY('id'));
INSERT INTO test SET id = 1;
SELECT * FROM test;
+----+----------------+
| id | date1 |
+----+----------------+
| 1 | 20021114 |
+----+----------------+
ALTER TABLE test CHANGE 'date1' 'date1' TIMESTAMP(14);
SELECT * FROM test;
+----+----------------+
| id | date1 |
+----+----------------+
| 1 | 20021114093723 |
+----+----------------+
你可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。
如果你有多个TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
1、列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
2、列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。
(注意一个UPDATE设置一个列为它已经有的值,
这将不引起TIMESTAMP列被更新,
因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
3、你明确地设定TIMESTAMP列为NULL.
4、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。
CREATE TABLE test (
'id' INT (3) UNSIGNED AUTO_INCREMENT,
'date1' TIMESTAMP (14),
'date2' TIMESTAMP (14),
PRIMARY KEY('id')
);
INSERT INTO test (id, date1, date2) VALUES (1, NULL, NULL);
INSERT INTO test SET id= 2;
+----+----------------+----------------+
| id | date1 | date2 |
+----+----------------+----------------+
| 1 | 20021114093723 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+----+----------------+----------------+
->第一条指令因设date1、date2为NULL,所以date1、date2值均为当前时间
第二条指令因没有设date1、date2列值,第一个TIMESTAMP列date1为更新为当前时间,
而二个TIMESTAMP列date2因日期不合法而变为“00000000000000” 字串3
UPDATE test SET id= 3 WHERE id=1;
+----+----------------+----------------+
| id | date1 | date2 |
+----+----------------+----------------+
| 3 | 20021114094009 | 20021114093723 |
| 2 | 20021114093724 | 00000000000000 |
+----+----------------+----------------+
->这条指令没有明确地设定date2的列值,所以第一个TIMESTAMP列date1将被更新为当前时间
UPDATE test SET id= 1,date1=date1,date2=NOW() WHERE id=3;
+----+----------------+----------------+
| id | date1 | date2 |
+----+----------------+----------------+
| 1 | 20021114094009 | 20021114094320 |
| 2 | 20021114093724 | 00000000000000 |
+----+----------------+----------------+
->这条指令因设定date1=date1,所以在更新数据时date1列值并不会发生改变
而因设定date2=NOW(),所以在更新数据时date2列值会被更新为当前时间
此指令等效为 UPDATE test SET id= 1,date1=date1,date2=NULL WHERE id=3;
因MySQL返回的 TIMESTAMP 列为数字显示形式,
你可以用DATE_FROMAT()函数来格式化 TIMESTAMP 列
SELECT id,DATE_FORMAT(date1,'%Y-%m-%d %H:%i:%s') As date1,
DATE_FORMAT(date2,'%Y-%m-%d %H:%i:%s') As date2 FROM test;
+----+---------------------+---------------------+
| id | date1 | date2 |
+----+---------------------+---------------------+
| 1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |
| 2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+
SELECT id,DATE_FORMAT(date1,'%Y-%m-%d') As date1,
DATE_FORMAT(date2,'%Y-%m-%d') As date2 FROM test;
+----+-------------+-------------+
| id | date1 | date2 |
+----+-------------+-------------+
| 1 | 2002-11-14 | 2002-11-14 |
| 2 | 2002-11-14 | 0000-00-00 |
+----+-------------+-------------+
在某种程度上,你可以把一种日期类型的值赋给一个不同的日期类型的对象。
然而,而尤其注意的是:值有可能发生一些改变或信息的损失:
1、如果你将一个DATE值赋给一个DATETIME或TIMESTAMP对象,
结果值的时间部分被设置为'00:00:00',
因为DATE值中不包含有时间信息。
2、如果你将一个DATETIME或TIMESTAMP值赋给一个DATE对象,
结果值的时间部分被删除,因为DATE类型不存储时间信息。
3、尽管DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,
但所有类型不都有同样的值范围。
例如,TIMESTAMP值不能比1970早,也不能比2037晚,
这意味着,一个日期例如'1968-01-01',当作为一个DATETIME或DATE值时它是合法的,
但它不是一个正确TIMESTAMP值!并且如果将这样的一个对象赋值给TIMESTAMP列,它将被变换为0。
把字段的类型设置为 timestamp 类型,每次添加数据时不用手动添加,自动设为当前时间
MySQL的字段默认值不可以是函数。除 TIMESTAMP字段可以用CURRENT_TIMESTAMP外。其它都使用常数为默认值。
下面的例子是:在名字为database的表中插入一个名为addTime的字节,并且默认值为当前时间。
alter table `database`add addTime timestamp not null DEFAULT CURRENT_TIMESTAMP() ;
database是表名,
addtime是字段名,
timestamp是类型,
not null表明不能为空,
default current_timestamp()默认时间为当前时间。
-- 方法一:
由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用TIMESTAMP类型代替DATETIME类型。
TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
1.列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
2.列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
3.你明确地设定TIMESTAMP列为NULL.
4.除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。
所以把日期类型 选择成timestamp 允许空就可以了
CREATE TABLE test (
uname varchar(50) NOT NULL,
updatetime timestamp NULL DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果要在navicat下操作的话,将字段设置为timestamp,然后默认值写上CURRENT_TIMESTAMP即可
本文由宠物迷 百科常识栏目发布,非常欢迎各位朋友分享到个人朋友圈,但转载请说明文章出处“mysql 中怎么设置默认值为系统日期”
上一篇
亚马逊是未删减版书吗?
下一篇
喂养十大误区(一)