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查询一个列名都存在于哪些表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL增删改查之多表联合查询

mysql视图

MYSQL

MYSQL

如何在mysql中查询所有表是不是包含某个字段

Mysql视图