如何在mysql中为文本类型设置默认值

6
CREATE TABLE IF NOT EXISTS `te` (
  `id` int(30) NOT NULL,
  `name` text NOT NULL,
  `address` text NOT NULL,
  `Aboutus` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这里的表'te'包含4个字段id、name、address和Aboutus,其中Aboutus是可选的,意味着我如何通过phpmyadmin sql将默认文本更新到数据库中的个人资料。


你想从网页上做同样的事情吗? - Ullas
网页上有一个字段,但是否有任何方法可以为该字段设置默认文本,就像为整数定义那样?@Ullas - papa.ramu
这意味着如果用户没有填写该字段,那么默认文本应该更新到数据库中,对吧? - Ullas
1
没有BLOB/TEXT列可以有默认值,您可能需要创建触发器。 - M Khalid Junaid
是的,就像@MKhalidJunaid所说的那样。在这里找到了答案:https://dev59.com/8nA75IYBdhLWcg3wH1JB - asprin
显示剩余2条评论
2个回答

10

我已经将“关于我们”字段的非空约束更改为可为空。

CREATE TABLE IF NOT EXISTS `te` (
  `id` int(30) NOT NULL,
  `name` text NOT NULL,
  `address` text NOT NULL,
  `Aboutus` text NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这是你的触发器 BEFORE INSERT

CREATE TRIGGER new_insert
BEFORE INSERT ON `te`
FOR EACH ROW 
SET NEW.`Aboutus` = CASE WHEN NEW.Aboutus IS NULL THEN 'Not Updated' ELSE NEW.Aboutus END
;

不使用Aboutus进行插入

INSERT INTO `te` (`id`, `name`, `address`) 
VALUES (1, 'name', 'address') ;

使用Aboutus进行插入操作

INSERT INTO `te` (`id`, `name`, `address`, `Aboutus`) 
VALUES (2, 'name', 'address', 'Aboutus') ;

通过传递 null 插入 Aboutus

INSERT INTO `te` (`id`, `name`, `address`, `Aboutus`) 
VALUES (3, 'name', 'address', null) ;

演示

编辑 正如@garethD指出的更新场景,你还需要另一个在BEFORE UPDATE触发器上的条件,这样如果更新时出现空值,则aboutus应该被更新为Not Updated

CREATE TRIGGER update_trigger
BEFORE UPDATE ON `te`
FOR EACH ROW 
SET NEW.`Aboutus` = CASE WHEN NEW.Aboutus IS NULL THEN 'Not Updated' ELSE NEW.Aboutus END
;

UPDATE te
SET AboutUs = NULL;

演示 2


1
+1,它还需要一个触发器来处理更新,以阻止某人运行UPDATE te SET AboutUs = NULL; - GarethD
1
@GarethD 感谢您指出这样的错误,我还没有考虑到更新方案,再次感谢。 - M Khalid Junaid

0

对于Ubuntu 16.04:

如何在MySQL 5.7中禁用严格模式:

编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf

如果mysql.cnf文件中存在以下行:

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后用新内容替换它

sql_mode='MYSQL40'

否则
只需在mysqld.cnf文件中添加以下行
sql_mode='MYSQL40'

这个问题已解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接