数据表设计过程中很多时候会设定字段的默认值,那么向该表插入数据时会出现以下情况: 情况1:如果该字段为null类型,那么直接将null插入到该字段,字段值就自动变成了设定的默认值; 情况2:如果该字段为not null类型,那么直接将null插入到该字段的话,在
数据表设计过程中很多时候会设定字段的默认值,那么向该表插入数据时会出现以下情况:
情况1:如果该字段为null类型,那么直接将null插入到该字段,字段值就自动变成了设定的默认值;
情况2:如果该字段为not null类型,那么直接将null插入到该字段的话,在普通模式下该字段的值会变成默认值并发出警告,但是strict模式下会直接报错;
对于情况2的解决方法是:使用default关键词。
官方文档(地址)中对此有了说明:
说明1:insert的语法说明(注意加红色的关键字)insert [low_priority | delayed | high_priority] [ignore]
[into] tbl_name
[partition (partition_name,...)]
[(col_name,...)]
{values | value} ({expr | default},…),(…),…
[ on duplicate key update
col_name=expr
[, col_name=expr] … ]
说明2:使用default关键字的说明use the keyword default to set a column explicitly to its default value. this makes it easier to write insertstatements that assign values to all but a few columns, because it enables you to avoid writing an incompletevalues list that does not include a value for each column in the table. otherwise, you would have to write out the list of column names corresponding to each value in the values list.
翻译过来大致就是说,用关键字“default”可以显式的在insert的过程中将一个字段设定为它的默认值。
比如一条sql可以是这样的:insert into student(sno,sname,sage,class) values(1, ‘crazyant’, ’25′, default),这时候就直接将班级class的默认值插入进去了。
然而使用load data infile to db,即直接将文件导入到数据表时,却无法使用默认的default值,因为将该字段设定为”default”会被认为是个字符串,改成null(用\n)表示则又会出现将null插入到not null的错误。
?还有一种方法是程序自动取出数据表的默认值,然后在插入数据之前,自动将数据中的null值替换成数据表该字段的默认值,如下步骤所示:
插入数据前替换null为数据表默认值的方法步骤1: 使用show columns取出数据表字段的默认值mysql> show columns from city;+------------+----------+------+-----+---------+----------------+| field | type | null | key | default | extra |+------------+----------+------+-----+---------+----------------+| id | int(11) | no | pri | null | auto_increment || name | char(35) | no | | | || country | char(3) | no | uni | -1 | || district | char(20) | yes | mul | | || population | int(11) | no | | 0 | |+------------+----------+------+-----+---------+----------------+5 rows in set (0.00 sec)
如上所示,第5列”default”下的这一列就是数据表字段的默认值,我们可以取出第一列和第五列,放在一个数组或字典里面:
array[id]=null
array[name]=”
array[country]=-1
array[district]=”
array[population]=0
步骤2,插入数据前替换其中的null为字典存放的默认值在插入数据表之前,如果某个字段的值为null,就根据字段名从上述字典取出默认值,替换掉null,然后再插入数据。
这种方法在load data from file中可用,因为load data的效率比insert的效率高太多,所以值得这么做。
原文地址:mysql向数据表插入默认字段值的方法, 感谢原作者分享。
