繁体   English   中英

SQL ALTER TABLE DEFAULT NULL仍插入0

[英]SQL ALTER TABLE DEFAULT NULL still inserts 0

我的php文件中有一个ALTER TABLE查询,其中表的名称基于$ name变量。

例如, $table = "Scores: ".$name;

我已经将$table变量替换为我的INSERT语句,并验证它确实有效。

scores_name表由整数字段(smallint)组成,当$POST值为空时,插入表中的数字为0(默认情况下显然是)。

但是,当满足特定条件时(在非空字段中),该特定行的值有意设置为0。

有时候$POST值应该为空,因此我希望该特定行为空白,因此当它插入为0而不是0时,这会引起明显的混乱。

以下是我的alter语句,有5个游戏行,因此当该特定游戏的列为空时会触发此alter查询:

if($game1(empty))
{
   $query = "ALTER TABLE `$table` MODIFY COLUMN `game1` SMALLINT DEFAULT NULL";
   $result = mysql_query($query) or die (' ' . mysql_error() );
}

没有返回mysql错误,因此,我假设ALTER语句正确完成,但是尽管将其修改为默认值为NULL,为什么仍插入0?

真的没有办法在基于整数的表中存储空白值吗?

考虑以下...

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRiMARY KEY,x INT DEFAULT NULL);

INSERT INTO my_table (x) VALUES (0),(''),(' '),(NULL);

INSERT INTO my_table (id) VALUES (0),(''),(' '),(NULL);

INSERT INTO my_table VALUES (DEFAULT,DEFAULT);

SELECT * FROM my_table;
+----+------+
| id | x    |
+----+------+
|  1 |    0 |
|  2 |    0 |
|  3 |    0 |
|  4 | NULL |
|  5 | NULL |
|  6 | NULL |
|  7 | NULL |
|  8 | NULL |   
|  9 | NULL |
+----+------+
9 rows in set (0.00 sec)

有时候$ POST值应该为空,因此我希望该特定行为空白,因此当它插入为0而不是0时,这会引起明显的混乱。

通过该语句,我了解到您不想将值填充到列中,而是要在创建列时定义default值。

default值插入列的可能方法是:

  1. INSERT不要在查询中使用该列。
  2. IF满足条件,则使用DEFAULT代替所讨论列的值。

范例
假设您的表格定义如下:

create table tbl_so_q23869976( si smallint default null, col2 varchar(10) );

让我们看看如何将默认值设置为si列。

情况1 :一切都很好,然后:

$sql = "insert into tbl_so_q23869976( si, col2 ) values ( ?, ? )";
$stmt = $mysqli->prepare( @sql );
$stmt->bind_param( 'ds', 6, 'Ravin' ); // use proper variables in place of values

情况2.1 :如果不匹配,则:

/* use with 'default' to insert defaults */
$sql = "insert into tbl_so_q23869976( si, col2 ) values ( default, ? )";
$stmt = $mysqli->prepare( @sql );
$stmt->bind_param( 's', 'Ravin' ); // use proper variables in place of values

情况2.2 :如果不匹配,则:

/*just omit the column name into which you want to insert defaults */
$sql = "insert into tbl_so_q23869976( col2 )  values ( ? )";
$stmt = $mysqli->prepare( @sql );
$stmt->bind_param( 's', 'Ravin' ); // use proper variables in place of values

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM