データベース操作シリーズ - Mysql、Postgresでよく使うSQL文まとめ

記事ディレクトリ

1. SQL ステートメントを作成して、存在する場合は更新するか、新しいデータを挿入したい場合、どうすれば解決できますか?

MySQL データベース実装スキーム: ON DUPLICATE KEY UPDATE

MySQL データベースでは、ON DUPLICATE KEY UPDATE 句の後に挿入ステートメントが続き、挿入される行の
一意のインデックスまたはテーブル内の既存のレコードの主キーに重複した値がある場合、古いレコードの更新が行われます。挿入された行データ
が既存のテーブルに記録されている一意のインデックスまたは主キーと同じでない場合、新しいレコードが挿入されます。
つまり、データが存在する場合は更新し、存在しない場合は作成します。

言葉遣い


INSERT INTO 表名 
	(字段名1, 字段名2 ) 
VALUES 
	(字段值1, 字段值2) 
ON DUPLICATE KEY UPDATE 
	字段名1 = VALUES(字段名1), 
	字段名2 = VALUES(字段名2)

Postgres データベースの実装スキーム:

予防:

  • ON CONFLICT は PostgreSQL 9.5 以降でのみ使用できます。
  • 判定対象のフィールドにはインデックス制約が必要です。たとえば、制約としての一意のユニークなインデックス

プラン1:

このアプリテーブルがある場合は、列名の 1 つを一意に設定します。

ALTER TABLE public.applications ADD CONSTRAINT applications_un UNIQUE (name);

次に、次のステートメントのコードを書きます

。 データが存在する場合、何もしません (DO NOTING)


const insertApp = await client.query(`INSERT INTO applications 
              (app_name, details ) 
              VALUES 
              ('${appName}', '${appDetail}') 
              ON CONFLICT ON CONSTRAINT applications_un  
              DO NOTHING;
              `);

シナリオ 2:

次のステートメントは同じ効果がありますが、制約の名前の代わりに名前フィールドが使用される点が異なります。


INSERT INTO customers (app_name, details)
VALUES
 (
 'AAA',
 'BBBBBB'
 ) 
ON CONFLICT (name) 
DO NOTHING;

更新について: app_name データが存在する場合、詳細を更新するにはどうすればよいですか? ?


INSERT INTO customers (app_name, details)
VALUES
 (
 'AAA',
 'BBBBBB'
 ) 
ON CONFLICT (name) 
DO
 UPDATE
   SET email = 'CCCCCCCC';
upsert

同じ変数を使用してこのロジックを複数回実行すると、1 つだけ作成されることがわかり、成功です~~~

2. ファジークエリ + 大文字と小文字を区別しない

栗を取る: 'xiaojin' という文字を含む users テーブルから詳細情報と user_name 情報をクエリします。

select * from users where lower(details) like '%xiaojin%' or lower(user_name) like '%xiaojin%' 

3. フィールドが複数の値の 1 つに属するかどうかをクエリするか、フィールドが複数の値の 1 つに等しい場合はフィルターで除外します。

栗を採る: ユーザーテーブルから管理者またはスーパー管理者としてタイプタイプをクエリします。

select * from users where "type" in ('Admin', 'Super Admin') 

4. 時間範囲クエリ

例: users テーブルの created_at フィールドのデータを 2023-08-01 00:00:00.000 から 2023-08-10 00:00:00.000 までクエリしたいとします。

select * from users where created_at between '2023-08-01 00:00:00.000' and '2023-08-10 00:00:00.000'

5. dbever を使用して Postgres データベースにフィールドをバッチ追加し、タイプを設定する方法

1. 新しいテーブルを作成する


2.SQLエディタを開きます

3. SQL ステートメントを作成します。ここにいくつかの参考文があります。

ALTER TABLE public.users ADD id serial4 NOT NULL;

ALTER TABLE public.users ADD "user_name" varchar(255) NULL;

ALTER TABLE public.users ADD description varchar(255) NULL;

ALTER TABLE public.users ADD "type" varchar(255) NULL;

ALTER TABLE public.users ADD created_at timestamp(6) NULL;

ALTER TABLE public.users ADD updated_at timestamp(6) NULL;

ALTER TABLE public.users ADD created_by varchar(255) NULL;

ALTER TABLE public.users ADD updated_by varchar(255) NULL;


4. ステートメントの実行

5. テーブルが正常に作成されました


6. よく使用される Mysql の簡単なコマンド

指定したデータベースが存在する場合は削除します

DROP DATABASE IF EXISTS tangdoudou;

新しいデータベースを作成する

CREATE DATABASE tangdoudou;

データベースに入る

    USE tangdoudou;

テーブルを作成する

CREATE TABLE student (
  sid INT, # integer 整形

  name VARCHAR(8), # variable character可变字符

  sex  VARCHAR(1), # m->男 f->女

  score INT

);

テーブルにデータを挿入する

INSERT INTO student VALUES('1','tom','F','95');

テーブル内のすべてのデータをクエリする

SELECT * FROM student;

データを変更する

UPDATE student SET name='lucy',score='100' WHERE sid='2';

データを削除する

DELETE FROM student WHERE sid='3';

よく使われる栗の例:

指定されたデータベース tangdoudou が存在する場合は破棄します。

DROP DATABASE IF EXISTS tangdoudou;

 

新しいデータベースを作成する

CREATE DATABASE tangdoudou;

DROP DATABASE IF EXISTS tangdoudou;

データベースに入る

USE tangdoudou;

生徒のデータ (番号、名前、性別、得点) を保持するテーブルを作成します。

DROP TABLE IF EXISTS student;

CREATE TABLE student (

  sid INT, # integer 整形

  name VARCHAR(8), # variable character可变字符

  sex  VARCHAR(1),# m->男 f->女

  score INT

);

学生テーブルにデータを挿入する

INSERT INTO student VALUES('1','tom','m','85');

INSERT INTO student VALUES('2','kate','f','92');

INSERT INTO student VALUES('3','king','m','74');

番号 2 の生徒のスコアを 100 に変更します。名前はルーシーです。


UPDATE student SET name='lucy' WHERE sid='2';

UPDATE student SET score='100' WHERE sid='2';

生徒データ番号3を削除する


DELETE FROM student WHERE sid='3';

Student テーブルの内容をクエリする

SELECT * FROM student;

追加される

  • 今日はここまでです~ 皆さん、( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ また明日お会いしましょう~~
  • みんなも毎日幸せになろうね

記事の修正が必要な箇所はどなたでもご指摘ください~
学習には終わりがなく、協力は双方に利益をもたらします

ここに画像の説明を挿入

より良い意見を提案するために通り過ぎる小さな兄弟姉妹を歓迎します~~

おすすめ

転載: blog.csdn.net/tangdou369098655/article/details/132126689
おすすめ