sql >> データベース >  >> RDS >> Mysql

データベースバックアップSQLクエリ

    データベース全体のデータを取得するには-SqlFiddleデモ

    1つのテーブルのみのデータを取得するには---SqlFiddleデモ

    私は複雑ですが許容できる解決策を作りました。 しかし改善が必要

    これは複雑なコーディングを伴う複雑な手順であり、特にgroup_concatによってすべての列のすべての行を単一の結果にフェッチするクエリです。 複雑な連結のフォーマット。

    簡素化され、効率的で、すべてのシナリオで機能する必要があります。

    私のソリューションの詳細 :以下は重要な部分です、他はただの条件/ループです(私はドキュメントが手元になく、時間と提案が必要です、誰かがそのフォーマットと改善で私を助けるかもしれません、ご不便をおかけして申し訳ありませんが、私はどんな助けでも喜んでいますあなたと私から)

    注:group_concat(yourColumn Separ'--anySeparator--')は、行が--anySeparator-

    で区切られるように、列のすべての行を1つにマージします。
    select group_concat(column_name separator '`,`') into @cns1 from
    information_schema.columns where table_schema=dn and [email protected];
    

    1:column_namesは、

    で区切られた単一の値として取得されます
    `,` => @cs1 = id`,`ename`,`did
    
    select group_concat(column_name separator '`,"\',\'",`') into @cns2
    from information_schema.columns where table_schema=dn and [email protected];
    

    2:column_namesは、

    で区切られた単一の値として取得されます
    `','` => @cn2  = id`','`ename`','`did
    
    set @cns1=concat("`",@cns1,"`");    set @cns2=concat("`",@cns2,"`");
    

    3:欠落している文字( `)が列名の最初と最後に配置されます

    set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");
    

    4:res= " insert into emp(に挿入するだけです `id` , `ename` , `did` ) values(" ここで、なぜセパレーターを配置したのかがわかります(MySqlフォーマットが実現されています)

    set @temp := '';
    set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
     from ",dn,".",@tn, " into @temp");
    

    上記は最も重要なステートメントです テーブルからすべてのデータ行を単一の列の行として取得し、さらにこれらの行は'),('で区切られてマージされます

    5.1 concat(",@cns2,") 1つの列のすべての列の値を取得します。

    5.2最も外側の連結後、@qは

     @q = "select group_concat(`id`','`ename`','`,did` separator '),(' from 
    mydb.emp into @temp";
    

    5.3:group_concatは、結合された列のすべての行を1つの値にマージします。列の値は@ cns2に存在するセパレーターを介して結合され、行レベルの結合は'),('で行われます。

    prepare s1 from @q;
    execute s1;deallocate prepare s1;
    set @res = concat(@res,@temp,");");    
    

    @qが実行されます

    set @res = concat(@res,@temp,");");
    

    6:そして

    として結果を取得します
     res was = insert into emp(`id`,`ename`,`did`) values ('
    @temp = 1','e1','4'),('2','e2','4'),
    ('3','e3','2'),('4','e4','4'),('5','e5','3
    

    そして@res = concat(@res,@temp,");");の後 取得します

     insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
    ('3','e3','2'),('4','e4','4'),('5','e5','3);
    


    1. PHPを使用してMySQLデータベースに保存するIPアドレス

    2. 初期化されていない定数Mysql2::Client ::SECURE_CONNECTION

    3. 単一のSQLクエリを介して同じデータベーステーブル内の共通レコードを取得するにはどうすればよいですか?

    4. OPENROWSETエラーを使用してAccess2007データをクエリするSQLServer2012