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(),

MySQL表字段设置默认值(图文教程及注意细节) 
总结
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获取系统当前时间的函数
http://www.jb51.net/article/29124.htm

时间: 2013-01-24

MYSQL数据库中的现有表增加新字段(列)

复制代码 代码如下: ALTER TABLE `数据库名`.`表名` ADD COLUMN `PROCID` VARCHAR(6) DEFAULT '' AFTER `PPIDChanged`; --在MYSQL中,如果是表名,数据库名,列名,在你增加,修改,更新的时候都需要使用ESC键盘下的重音符号,才可以添加,相应的列名或者更新修改. 当然现在大多都是用phpmyadmin或mysql图形化操作工具,更方法,这样的是临时使用的,或没有图形界面的方法.大家可以使用上述的图形化工具操作. 下面推

MySql创建带解释的表及给表和字段加注释的实现代码

 1 创建带解释的表 CREATE TABLE groups( gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增', gname VARCHAR(200) COMMENT '列注释' ) COMMENT='表注释'; 2 修改现有列,加上解释 alter table test_data modify column test_desc int comment 'xxxx'; 3  修改现有表,加上解释 ALTER TABLE test_data

mysql千万级数据大表该如何优化?

1.数据的容量:1-3年内会大概多少条数据,每条数据大概多少字节: 2.数据项:是否有大字段,那些字段的值是否经常被更新: 3.数据查询SQL条件:哪些数据项的列名称经常出现在WHERE.GROUP BY.ORDER BY子句中等: 4.数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中: 5.SQL量的统计比,如:SELECT:UPDATE+DELETE:INSERT=多少? 6.预计大表及相关联的SQL,每天总的执行量在何数量级? 7.表中的数据:更新为主的

MySQL命令行中给表添加一个字段(字段名、是否为空、默认值)

先看一下最简单的例子,在test中,添加一个字段,字段名为birth,类型为date类型. mysql> alter table test add column birth date; Query OK, 0 rows affected (0.36 sec) Records: 0  Duplicates: 0  Warnings: 0 查询一下数据,看看结果: mysql> select * from test; +------+--------+-----------------------

MySQL 删除大表的性能问题解决方案

微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,现做一下简单总结: 当buffer_pool很大的时候(30G+),由于删除表时,会遍历整个buffer pool来清理数据,会导致MySQL hang住,解决的办法是: 1.当innodb_file_per_table=0的时候,以上不是问题,因为采用共享表空间的时候,该表所占用的空间不会被删除,buffer pool中的相关页不会 被discard. 2.当innodb_file_pe

MySQL中大数据表增加字段的实现思路

前言 增加字段相信大家应该都不陌生,随手就可以写出来,给 MySQL 一张表加字段执行如下 sql 就可以了: ALTER TABLE tbl_tpl ADD title(255) DEFAULT '' COMMENT '标题' AFTER id; 但是线上的一张表如果数据量很大呢,执行加字段操作就会锁表,这个过程可能需要很长时间甚至导致服务崩溃,那么这样操作就很有风险了. 那么,给 MySQL 大表加字段的思路如下: ① 创建一个临时的新表,首先复制旧表的结构(包含索引) create tab

mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法

需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: 复制代码 代码如下: UPDATE file_manager_folder f1LEFT OUTER JOIN file_manager_folder f2     ON f1.name = f2.name AND f2.parentId = 54SET f1.parentId = 54 WHERE f2.name IS NULL AND f1.id IN (1,2,3); 实现sql语句2: 复制代码 代码如下: upd

mysql中向表中某字段追加字符串的方法

Update `表名` SET title = CONCAT(title,'MV') where articleid=3487 and title not like '%v'

MySQL修改表一次添加多个列(字段)和索引的方法

MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetail varchar(50); MySQL修改表一次添加多个索引 ALTER TABLE  table_name ADD INDEX idx1 ( `func`), ADD INDEX idx2 ( `func`,`gene`), ADD INDEX idx3( `genedetail`); 以上这篇

MySQL大表中重复字段的高效率查询方法

MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考. 数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较.如果仅仅是查找数据库中name不重复的字段,很容易 复制代码 代码如下: SELECT min(`id`),`name` FROM `table` GROUP BY `name`; 但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值)查询哪些字段是重复的也容易  复制代码 代码如下: SELEC

Oracle表中重复数据去重的方法实例详解

Oracle表中重复数据去重的方法实例详解 我们在项目中肯定会遇到一种情况,就是表中没有主键 有重复数据 或者有主键 但是部分字段有重复数据 而我们需要过滤掉重复数据 下面是一种解决方法 delete from mytest ms where rowid in (select aa.rid from (select rowid as rid, row_number() over(partition by s.name order by s.id) as nu from mytest s) aa

c++获取sqlite3数据库表中所有字段的方法小结

常用方法: 1.使用sqlite3_get_table函数 2.获取sqlite创建表的sql语句字符串,然后进行解析获取到相应的字段 3.采用配置文件的方式,将所有字段名写入配置文件 下面针对这三个方法给大家逐一详细介绍. 方法1:使用sqlite3_get_table函数 代码: char *dbname = "test.db"; int rc = sqlite3_open(dbname, &db); if (rc == SQLITE_OK) { char sql[256]

mysql中使用instr进行模糊查询方法介绍

在mysql中使用内部函数instr,可代替传统的like方式查询,并且速度更快. instr 函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 例如,查询字段name中带"军"的名字,传统的方法是: select name from 用户表 where name like `%军%'; 用instr的方法: select name from 用户表 where instr('name','军'); 或: select name from 用

Mybatis动态调用表名和字段名的解决方法

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

php解决和避免form表单重复提交的几种方法

前言 为什么要避免form表单被重复提交呢?因为我们不想让我们的服务器重复处理没必要的数据,同时我们也是避免我们的数据库产生重复的数据,避免表单重复提交也是让我们的网站更安全的一种表现. 先看一下有哪些情况下回导致表单重复提交呢,知道哪些情况下可能会出现表单重复提交就可以从根源处理表单重复提交的情况了. 下面的情况就会导致表单重复提交: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. 使用浏览器历史记录重复提交表单. 浏览器重复的HTTP请求. 网页被恶

php 防止表单重复提交两种实现方法

php 防止表单重复提交 由于网络原因,经常出来点了提交按钮,网页没有反应,而进行再次点击.这样就导致后台收到两次提交,从而进行两次处理,本文章向大家介绍php 防止表单重复提交的几种方法 1.前端解决 方法一: 可以通过前端来解决.当用户点了提交按钮之后,先使用js进行有效性判断,没问题后,将提交按钮"禁用"掉.然后再提交! 方法二: 使用ajax提交表单.点了提交按钮后,禁用提将按钮,或者设置一个状态值,将其设为1,表示正在提交.再提交时判断如果正在提交,则不作处理.等ajax返回

java统计字符串中重复字符出现次数的方法

本文实例讲述了java统计字符串中重复字符出现次数的方法.分享给大家供大家参考,具体如下: package com; import org.junit.Test; /** * 统计一个字符串的重复字符出现的次数 * * @author zdw * */ public class StringTest { @Test public void test() { String s = "fdfaacceeeeeeeeeeeegghikkkkkoooo"; count(s); } public

MySQL 删除数据库中重复数据方法小结

刚开始,根据我的想法,这个很简单嘛,上sql语句 delete from zqzrdp where tel in (select min(dpxx_id) from zqzrdp group by tel having count(tel)>1); 执行,报错!!~!~ 异常意为:你不能指定目标表的更新在FROM子句.傻了,MySQL 这样写,不行,让人郁闷. 难倒只能分步操作,蛋疼 以下是网友写的,同样是坑爹的代码,我机器上运行不了. 1. 查询需要删除的记录,会保留一条记录. select