[英]Is there any way to set the default value of all columns in a mysql database at a time?
[英]Set default value to all columns in a database
我在PHP + MySQL应用程序中工作。 该应用程序对我来说工作正常。 但当我在另一台服务器上托管它时,我收到了一个MySQL错误:
错误代码:1364。字段“字段”没有默认值
我知道这是MySQL版本的问题,我们应该为所有列设置默认值。 但目前我有100多张桌子。 所以我需要为所有没有默认值的表中的所有列设置默认值为NULL
。
我无法使用strict mode
选项,因为服务器是共享服务器。 是否可以在一个步骤中设置而不是为每个表设置? 如果不可能告诉我最简单的设置方法。
任何帮助将不胜感激
我发现的另一个解决方案是: -
获取所有列名称将其放入数组中...现在按列数组中的值进行插入 - 对于我们没有值的所有数组,使用ZERO值。 例如:在一个表中,我们有列名称LASTNAME COMPNAME PHONO EMAIL ADDRESS ALTERPERSON ALTERPHONE ALTEREMAIL现在迁移后我们看到了
错误代码:1364。字段“字段”没有默认值
如果我们运行INSERT QUERY LIKE
mysqli_query($ con,'插入表(NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS)值(NAME,LASTNAME,COMPNAME,PHONO,EMAIL,ADDRESS)')
现在它会给出错误......
因此,只需将表格中的所有列值从DB.TABLE中获取,将其放入数组中,或者使用while循环或for循环逐个进行....
如果insert值等于ZERO或NULL,则检查每个列put条件的插入值,然后插入ZERO它将解决所有问题。
因为它适用于VARCHAR,TEXT,INT,BIGINT和许多数据类型,除了时间或日期函数和DATE / TIME数据类型默认情况下得到ZERO值...
运行一个PHP代码获取所有TABLE NAME然后为每个TABLE NAME获取所有COLUMN NAME
ALTER TABLE DB.TABLEnAME CHANGE
columnNAME_A
columnNAME_A
VARCHAR(100)CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;
=======================
它完成了
对于遇到此问题的其他人来说,需要一些编码才能自动执行,但以下是您将如何执行此操作:
首先运行以下查询:
SELECT table_schema,table_name,column_name,data_type FROM information_schema.columns WHERE IS_NULLABLE='NO' AND column_default is null AND column_key=''
接下来,对于从上面的查询返回的每一行,执行以下操作:
If data_type contains 'int' set default to 0
else if data_type='datetime' set default to '0000-00-00 00:00:00'
else if data_type='date' set default to '0000-00-00'
else if data_type='time' set default to '00:00:00'
else set default to ''
创建并运行以下查询,并将所有[[...]]变量替换为其正确的值:
ALTER TABLE `[[table_schema]]`.`[[table_name]]` ALTER COLUMN `[[column_name]]` SET DEFAULT '[[default]]'
这应该替换所有数据库的默认值,所有表,所有设置为NOT NULL且不是主键且没有设置默认值的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.