在mysql中字段名的空格之间添加破折号
我在mysql中有数据库,并维护3列,即ID、名称、slug Slug列和name列相同,但这里我把name列的组合放在这里。假设如果名字是米奇·梅塔,那么在《我想要的鼻涕虫》中,它应该显示米奇·梅塔。在slug中,我希望所有内容都是小写字母&如果是空格,那么应该用破折号代替。所有这一切,因为我想为我的网站搜索引擎优化友好的网址。现在我可以在添加新产品时使用该程序,但如果我可以直接使用mySQL,是否也可以这样做?我的意思是mySQL中有执行这种任务的函数吗?试试这个 范例-在mysql中字段名的空格之间添加破折号,mysql,sql,Mysql,Sql,我在mysql中有数据库,并维护3列,即ID、名称、slug Slug列和name列相同,但这里我把name列的组合放在这里。假设如果名字是米奇·梅塔,那么在《我想要的鼻涕虫》中,它应该显示米奇·梅塔。在slug中,我希望所有内容都是小写字母&如果是空格,那么应该用破折号代替。所有这一切,因为我想为我的网站搜索引擎优化友好的网址。现在我可以在添加新产品时使用该程序,但如果我可以直接使用mySQL,是否也可以这样做?我的意思是mySQL中有执行这种任务的函数吗?试试这个 范例- 您可以更新数据以适
您可以更新数据以适合您的方案:
UPDATE mytable SET slug = REPLACE(LOWER(name), ' ', '-');
如果希望在每次添加新行或更新现有行时自动执行,可以使用触发器:
CREATE TRIGGER SetSlugIns BEFORE INSERT ON mytable
FOR EACH ROW
SET NEW.slug = REPLACE(LOWER(NEW.name), ' ', '-');
CREATE TRIGGER SetSlugUpd BEFORE UPDATE ON mytable
FOR EACH ROW
SET NEW.slug = REPLACE(LOWER(NEW.name), ' ', '-');
CREATE TABLE mytable (
id INT PRIMARY KEY,
name VARCHAR(100),
slug VARCHAR(100) AS (REPLACE(LOWER(name), ' ', '-')
);
在MySQL 5.7中,它们现在有了,因此您可以在不编写触发器的情况下执行相同的操作:
CREATE TRIGGER SetSlugIns BEFORE INSERT ON mytable
FOR EACH ROW
SET NEW.slug = REPLACE(LOWER(NEW.name), ' ', '-');
CREATE TRIGGER SetSlugUpd BEFORE UPDATE ON mytable
FOR EACH ROW
SET NEW.slug = REPLACE(LOWER(NEW.name), ' ', '-');
CREATE TABLE mytable (
id INT PRIMARY KEY,
name VARCHAR(100),
slug VARCHAR(100) AS (REPLACE(LOWER(name), ' ', '-')
);
您也可以使用编程语言来实现这一点。如果您是用php编写代码,可以按如下方式进行 取一个新变量,比如说
$slug
$name='Jone Doe'; //the name value you getting from form or input
//convert string into lower. It will give you 'jon doe'
$nameInLower = strtolower($name);
// now replace space with hyphen.
$slug=str_replace(' ', '-',$nameInLower);
在数据库表中插入
$slug
变量以及name
列(考虑到id
是自动递增列)。谢谢比尔。这正是我想要的。通过执行此查询,它显示“您没有超级权限,并且启用了二进制日志记录。”(您可能希望使用不太安全的log\u bin\u trust\u函数\u creators变量)。我猜您正在使用Amazon RDS。默认情况下,这会禁用触发器的创建,但您可以更改配置选项以允许它。阅读:这是付费服务吗?Amazon RDS是付费服务,是的。更改RDS中的配置选项不会更改成本。如果您要替换所有列,则无需指定id。请参阅Bill Karwin's答案是因为它太棒了。