MySQL 中怎么把数据库表的一列置空?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 中怎么把数据库表的一列置空?相关的知识,希望对你有一定的参考价值。

我有数据库表(table_group)中有两列,id 和 name;
我想做的是 修改表中的记录;当 id=12的时候,我想把该记录的name置为null.
那么,这update 语句怎么写?

update table_group set name=NULL where id = 12; 参考技术A 如果要将数据库表的一列置空,首先需要该列支持为NULL,因此第一步需要检查该项,如果该项不允许为空,则需要执行如下调整:
alter table tableName modify columnname varchar(2) null;

然后再对该列进行置空操作
update tableName set columnname =null
执行完成后,columnname 该列内容将为空。
参考技术B update table set column=null,假如这个列没有约束,并且 不是not null的话,就可以了 参考技术C update table_group set name="" where id = 12;

Mysql-如果我同时在表的一列中插入多个值,值的插入顺序是不是可能会改变?

【中文标题】Mysql-如果我同时在表的一列中插入多个值,值的插入顺序是不是可能会改变?【英文标题】:Mysql-If I insert multiple values in a column of a table simultaneously ,is it possible that the inserting orders of values get change?Mysql-如果我同时在表的一列中插入多个值,值的插入顺序是否可能会改变? 【发布时间】:2014-02-12 07:11:07 【问题描述】:

我正在做这些:

insert into table_name(maxdate) values 
((select max(date1) from table1)), -- goes in row1
((select max(date2) from table2)), -- goes in row2
.
.
.
((select max(date500) from table500));--goes in row500

是否有可能在插入时,插入顺序可能会改变?例如我什么时候做

select maxdate from table_name limit 500;

我会得到这些 日期 1 日期 2 。 . date253 date191 ...date500

【问题讨论】:

不,但为什么不使用自动增量字段? 是的,这是一个不错的选择。但是我已经应用了这个没有自动增量字段,没有考虑改变顺序的情况。感谢您的回答。 @aconrad :这是否意味着,无论需要多少时间来计算(从 table'n' 中选择 max(date'n'),下一个插入值(即 select max(date'n+ 1') from table'n+1') 不会被计算? 【参考方案1】:

简答:

不,不可能。

如果你想仔细检查:

mysql> create table letest (f1 varchar(50), f2 varchar(50));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into letest (f1,f2) values 
( (SELECT SLEEP(5)), 'first'), 
( (SELECT SLEEP(1)), 'second');
Query OK, 2 rows affected, 1 warning (6.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from letest;
+------+--------+
| f1   | f2     |
+------+--------+
| 0    | first  |
| 0    | second |
+------+--------+
2 rows in set (0.00 sec)

mysql>

SLEEP(5) 是在 5 秒后插入的第一行,

SLEEP(1) 是 5+1 秒后要插入的第二行

这就是查询需要 6 秒的原因。

您看到的警告是

mysql> show warnings;
+-------+------+-------------------------------------------------------+
| Level | Code | Message                                               |
+-------+------+-------------------------------------------------------+
| Note  | 1592 | Statement may not be safe to log in statement format. |
+-------+------+-------------------------------------------------------+
1 row in set (0.00 sec)

这只会在您使用主从设置时影响您,因为复制 binlog 将不安全。有关此http://dev.mysql.com/doc/refman/5.1/en/replication-rbr-safe-unsafe.html 的更多信息

稍后编辑:如果您发现此答案无用,请考虑发表评论。

【讨论】:

【参考方案2】:

是的,很有可能。

您应该考虑一个无序的数据库表,以及一个没有 ORDER 子句的 SELECT 语句。每个 DBMS 都可以选择如何实现表(通常甚至取决于存储引擎)并返回行。当然,许多 DBMS 碰巧按照您插入的顺序返回您的数据,但永远不要依赖它

检索数据的顺序可能取决于执行计划,甚至在多次运行同一个查询时可能会有所不同。尤其是仅检索部分数据(TOP/LIMIT)时。

如果您想强加一个顺序,请添加一个对您的数据进行排序的字段。是的,在许多情况下,自动增量主键就足够了。如果您认为有一天您会想要更改订单,请添加另一个字段。

【讨论】:

以上是关于MySQL 中怎么把数据库表的一列置空?的主要内容,如果未能解决你的问题,请参考以下文章

mysql怎样将一张表里一列的数据更新到另一个表的一列上

MySQL:尝试将数据填充到另一表的一列中

oracle查询怎么多个表的第一列

DB2如何把列 修改为 "可空"?

sql 把一个用逗号分隔的多个数据字符串变成一个表的一列

oracle数据库产生误操作,将一个字段置空了,恢复数据