記事ディレクトリ
-
- 1. SQL ステートメントを作成して、存在する場合は更新するか、新しいデータを挿入したい場合、どうすれば解決できますか?
- 2. ファジークエリ + 大文字と小文字を区別しない
- 3. フィールドが複数の値の 1 つに属するかどうかをクエリするか、フィールドが複数の値の 1 つに等しい場合はフィルターで除外します。
- 4. 時間範囲クエリ
- 5. dbever を使用して Postgres データベースにフィールドをバッチ追加し、タイプを設定する方法
- 6. よく使用される Mysql の簡単なコマンド
- 追加される
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;
追加される
- 今日はここまでです~ 皆さん、( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ また明日お会いしましょう~~
- みんなも毎日幸せになろうね
記事の修正が必要な箇所はどなたでもご指摘ください~
学習には終わりがなく、協力は双方に利益をもたらします