web-dev-qa-db-ja.com

テーブルフィールドタイプごとにテーブルデータを取得または更新することはできますか?

フィールドタイプごとにテーブルデータを取得または更新することはできますか?可能であれば、サンプルコードを教えてください。

1
learner

はい、それを達成することは非常に可能ですが、独自のクエリでは不可能です!

まず、メタデータを探す場所を知る必要があります。この種の情報は、information_schemaと呼ばれる内部mysqlデータベースに格納されます。このデータベースは、データベースエンティティを含むあらゆる種類のクエリを実行するたびにMysqlによって内部的にのみ使用されます。 。ここには、データベースのすべてのテーブル、列、特権、ユーザー、トリガーに関するあらゆる種類のメタ情報があります。

show tables from information_schema;

あなたの問題について私が知っている解決策には、2つのクエリが含まれます。最初のものは、指定されたdata_typeを持つ列のリストを返します(データベースと、検索するテーブルも指定できます)。

select columns.column_name from
    information_schema.schemata
    ,information_schema.tables
    ,information_schema.columns
where 
    tables.table_schema = schemata.schema_name
    and tables.table_name =  columns.table_name
    and schemata.schema_name = 'your_database_name'
    and tables.table_name = 'your_table_name'   
    and columns.data_type = 'the_field's_data_type_you_want_to_filter'
    -- + any other filter you find useful

必要なプロパティ(特定の場合は特定のデータ型)を満たす列名のリストを使用すると、そのフィールドのリストからデータを選択または更新するための2次クエリを実行するだけで済みます。

MySqlのドキュメントを検索しましたが、残念ながら、SQLだけでフィールドの動的リストを選択または更新する方法がないため、2次生成クエリが必要です。

お役に立てれば。

2
marcio