mysql查询一个列名都存在于哪些表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql查询一个列名都存在于哪些表相关的知识,希望对你有一定的参考价值。
mysql使用Describe命令判断字段是否存在 工作时需要取得MySQL中一个表的字段是否存在 于是就使用Describe命令来判断 mysql_connect(\'localhost\', \'root\', \'root\'); mysql_select_db(\'demo\'); $test = mysql_query(\'Describe cdb_posts first\'); $test = mysql_fetch_array($test); $test[0]返回的是该字段的名 工作时需要取得MySQL中一个表的字段是否存在 于是就使用Describe命令来判断 mysql_connect(\'localhost\', \'root\', \'root\'); mysql_select_db(\'demo\'); $test = mysql_query(\'Describe cdb_posts first\'); $test = mysql_fetch_array($test); $test[0]返回的是该字段的名称,比如我要查询first字段,返回的就是first 如果此字段不存在返回的就是NULL,通过这样可以判断一个字段是否存在 附加资料: describe命令 一、describe命令用于查看特定表的详细设计信息,例如为了查看guestbook表的设计信息,可用: describe guestbook 二、可通过”show comnus”来查看数据库中表的列名,有两种使用方式: show columns form 表名 from 数据库名 或者: show columns from 数据库名.表名 三、用describe命令查询具体列的信息 describe guestbook id 就是查询guestbook中id字段的列信息 DESCRIBE | DESC tbl_name [col_name | wild] DESCRIBE 是 SHOW COLUMNS FROM 的缩写。DESCRIBE 提供有关一个表的列信息。col_name 可以是一个列名或是一个包含 SQL 通配符字符 “%” 和“_” 的字符串。没有必要用引号包围字符串。 如果列类型不同于你所期望的基于一个 CREATE TABLE 语句建立的列,注意 MySQL 有时会更改列类型。 参考技术A举个例子,假设对于 age 这个列来说,你需要知道你的数据库里所有含有 age 的表是什么。
碰到这个问题的场景其实很多:
你的表过多,现在同事拿着一个列问你这个列的平均值,而你已经忘了这个列所在的表
查看各个表中,是否有名字重复的列
直接上链接,这篇文章详细解释了如何查询列名的问题。
《MySQL中如何找到包含某些字段的所有》
如果行的所有列条目不存在,则 MySQL 插入表
【中文标题】如果行的所有列条目不存在,则 MySQL 插入表【英文标题】:MySQL insert into table if all columns entry for a row does not exists 【发布时间】:2014-03-18 21:56:41 【问题描述】:所以我试图避免调用表,看看我是否有条目以便插入新行或更新它。我正在尝试以下查询,但出现语法错误。有人可以帮忙吗?
这是我的查询:
IF(
NOT EXISTS(
SELECT
*
FROM
ranking_rank_data
WHERE
rank = '1'
AND source_id = '1'
AND ranking_school_id = '2'
)
) THEN INSERT INTO
ranking_rank_data (rank, source_id, ranking_source_id VALUES ('1','2','3')
END IF;
【问题讨论】:
【参考方案1】:您可以使用 INSERT ... SELECT 查询,从虚拟表 DUAL 中选择并将 where 子句放在那里,如果条件为假,则不会插入任何行:
INSERT INTO ranking_rank_data (rank, source_id, ranking_source_id)
SELECT '1','2','3'
FROM dual
WHERE
NOT EXISTS(SELECT *
FROM ranking_rank_data
WHERE rank = '1' AND source_id = '1' AND ranking_school_id = '2')
请看小提琴here。
【讨论】:
【参考方案2】:您也可以通过在三个值上创建唯一索引来做到这一点:
create unique index on ranking_rank_data_rank_source_id_ranking_source_id on
ranking_rank_data(rank, source_id, ranking_source_id);
这将防止重复。然后你可以插入记录(或更新记录)确信没有重复。有两种方法(除了not exists
方法)可以做到这一点。第一个是insert ignore
:
INSERT IGNORE INTO ranking_rank_data (rank, source_id, ranking_source_id)
SELECT '1','2','3';
这会忽略所有错误,而不仅仅是重复错误,所以我更喜欢第二种方法,它使用on duplicate key update
:
INSERT IGNORE INTO ranking_rank_data(rank, source_id, ranking_source_id)
SELECT '1','2','3'
ON DUPLICATE KEY UPDATE rank = values(rank);
(update
语句是忽略错误的无操作。)
【讨论】:
【参考方案3】:为什么不使用INSERT ON DUPLICATE KEY UPDATE
语法并在rank
+ source_id
+ ranking_school_id
上设置唯一键?如果您没有任何要“真正”更新的内容,则可以更新虚拟字段。见https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
您也可以尝试插入它。它会在重复键上失败,但您可以在 MySQL 之上使用您使用的编程语言处理此错误。
【讨论】:
我确实试过了。但我只想要一个条件,如果所有三个都具有与插入值相同的值而不被插入,那么这些字段都不是唯一的。 我说的是在多个列上设置唯一键,而不是在每一列上。以上是关于mysql查询一个列名都存在于哪些表的主要内容,如果未能解决你的问题,请参考以下文章