MySQLスタディノート04 [データベースクエリ操作、今日のコンテンツ、テーブルの制約]

  • MySQLドキュメント-DarkHorse Programmer(Tencent Weiyun):https//share.weiyun.com/RaCdIwas
  • 1-MySQL Foundation.pdf、2-MySQL制約とdesign.pdf、3-MySQLマルチテーブルクエリとトランザクションoperation.pdf
  1. MySQL研究ノート01 [データベースの概念、MySQLのインストールと使用] [day01]
  2. MySQLスタディノート02 [SQLの基本概念と一般的な文法、データベースのCRUD操作] [day01]
  3. MySQLスタディノート03 [データベーステーブルのCRUD操作、データベーステーブルに記録された基本操作、クライアント側のグラフィカルインターフェイスツールSQLyog] [day01]

  4. MySQLスタディノート04 [データベースクエリ操作、テーブル制約] [day01、day02]

  5. MySQLスタディノート05 [マルチテーブル操作、3つのパラダイム、データベースのバックアップと復元] [day02]

  6. MySQLスタディノート06 [マルチテーブルクエリ、サブクエリ、マルチテーブルクエリの演習] [day03]

  7. MySQLスタディノート07 [トランザクション、ユーザー管理、および権限管理] [day03]

目次

データベース端末操作エラー

07データベースクエリ操作

DQL_Basicクエリ

重複する結果セットを削除する

スコアの合計を計算する

エイリアス

DQL_conditionクエリ

DQL_Basicquery_Fuzzyクエリ

今日のコンテンツ

DQL_sortクエリ

DQL_aggregate関数

DQL_Groupクエリ

DQL_Pagingクエリ

08テーブルの制約

Constraints_Overview

Constraint_non-empty制約

Constraint_Unique制約

Constraint_primaryキー制約

Constraint_Primary Key Constraint_Auto Growth

Constraints_Foreign Key Constraints

外部キーの制約-欠陥の例

外部キー制約に関連する概念

Constraint_Foreign KeyConstraint_Cascade操作

カスケード更新

カスケード削除


データベース端末操作エラー

エラーを報告したコマンド:ERROR 1366(HY000):文字列値が正しくありません:列 'nの' \ xC3 \ xFB \ xD7 \ xD6 '

解決策(元のテキストへのリンク):https//blog.csdn.net/u013317172/article/details/82778785

Mysqlデータベースをインストールした後、中国語のデータをテーブルに挿入すると、多くの人がこのエラーを受け取ります。
エラー1366(HY000):文字列値が正しくありません:行1の列「NAME」の「\ xD5 \ xC5 \ xD0 \ xA1 \ xC3 \ xF7」
ここに画像の説明を挿入

解決:

1.まず、以下に示すように、Mysqlデータベースのインストールパスを見つけます。

ここに画像の説明を挿入

2.このフォルダーでmy.iniファイルを見つけ、その中の「default-character-set = utf8」を見つけて、uft8をgbkに変更します。

ここに画像の説明を挿入

mysqlデータベースに再度ログインして、中国語のデータを追加します。

07データベースクエリ操作

DQL_Basicクエリ

1.複数のフィールドのクエリ

  • テーブル名からフィールド名1、フィールド名2 ...を選択します。
  • 注:すべてのフィールドを照会する場合は、*を使用してフィールドリストを置き換えることができます。

2.重複を削除します。

  • 明確な

3.計算列

  • 一般に、4つの算術計算を使用して、一連の値を計算できます(通常は数値計算のみ)。
  • ifnull(expression1、expression2):null参加の計算結果はnullです。
    • 式1:nullかどうかを判断する必要があるフィールド
    • フィールドがnullの場合、置換値。

4.エイリアスを作成します。

  • as:asは省略できます。
CREATE TABLE student (
  id INT,
  -- 编号
  NAME VARCHAR (20),
  -- 姓名
  age INT,
  -- 年龄
  sex VARCHAR (5),
  -- 性别
  address VARCHAR (100),
  -- 地址
  math INT,
  -- 数学
  english INT-- 英语
) ;

INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES 
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);

SELECT * FROM student;

   

重複する結果セットを削除する

スコアの合計を計算する

エイリアス

DQL_conditionクエリ

1.where句とそれに続く条件

2.オペレーター

  • >、<、<=、> =、=、<>
  • 間...そして  
  • IN(コレクション) 
  • いいね:ファジークエリ
    • プレースホルダー:
      • _:任意の1文字
      • %:複数の任意の文字
  • 無効です  
  • およびまたは&&
  • またはまたは|| 
  • そうではない!
-- 查询年龄大于20岁
SELECT 
  * 
FROM
  student 
WHERE age > 20 ;
SELECT * FROM student WHERE age >= 20;

-- 查询年龄等于20岁
SELECT * FROM student WHERE age = 20;

-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;

-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >= 20 &&  age <=30;
SELECT * FROM student WHERE age >= 20 AND  age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 闭区间[20, 30]

-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);

-- 查询英语成绩为null
SELECT * FROM student WHERE english = NULL; -- 错误!null值不能使用 = (!=) 判断

SELECT * FROM student WHERE english IS NULL;

-- 查询英语成绩不为null
SELECT * FROM student WHERE english  IS NOT NULL;

DQL_Basicquery_Fuzzyクエリ

いいね:ファジークエリ

  • プレースホルダー:
    • _:任意の1文字
    • %:複数の任意の文字
-- 查询姓马的有哪些? like
SELECT 
  * 
FROM
  student 
WHERE NAME LIKE '马%' ;

-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";

-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';

-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';

今日のコンテンツ

  1. DQL:クエリステートメント
    1. クエリの並べ替え
    2. 集計関数
    3. グループクエリ
    4. ページングクエリ
  2. 制約
  3. 複数のテーブル間の関係
  4. パラダイム
  5. データベースのバックアップと復元

DQL_sortクエリ

1.クエリの並べ替え

  • 構文:orderby句
    • 並べ替えフィールド1の並べ替え方法1、並べ替えフィールド2の並べ替え方法2 ..
  • 並び替え:
    • ASC:昇順(デフォルト)。
    • DESC:降順。
  • 注意:
    • ソート条件が複数ある場合、現在側の条件値が同じであれば、2番目の条件が判断されます。

DQL_aggregate関数

2.集計関数:データの列全体を取得し、垂直方向の計算を実行します。

  1. カウント:数を数える
    1. 通常、空でない列を選択します:主キー
    2. カウント(*)
  2. max:最大値を計算します
  3. 最小:最小値を計算します
  4. 合計:合計を計算します
  5. 平均:平均を計算する

注:集計関数の計算では、null値は除外されます。

解決策:1。計算用に空でない列を含まない列を選択します。2。IFNULL関数。

  

DQL_Groupクエリ

3.グループクエリ:

  1. 構文:group bygroupフィールド。
  2. 注意:
    1. グループ化後にクエリされるフィールド:グループ化フィールド、集計関数
    2. どこと持っているの違いは?
      1. グループ化の前に定義されている場合、条件が満たされない場合、グループ化に参加しません。グループ化後に制限されているため、結果が満たされない場合はクエリされません
      2. 集約関数はどこ以降でも追跡できず、集約関数があるかどうかを判断できます。
-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
		
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math), COUNT(id) FROM student GROUP BY sex;
		
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex;

-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math), COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math), COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

DQL_Pagingクエリ

4.ページングクエリ

  1. 構文:limitで始まるインデックス、ページあたりのクエリ数。
  2. 式:開始インデックス=(現在のページ番号-1)*各ページに表示されるアイテムの数
    1. 1ページあたり3レコード 
    2. SELECT * FROM student LIMIT 0,3;-ページ1:0からチェック、3レコードをチェック
    3. SELECT * FROM student LIMIT 3,3;-ページ2:3からチェック、3レコードをチェック
    4. SELECT * FROM student LIMIT 6,3;-ページ3:
  3. 制限はMySQLの「方言」です

08テーブルの制約

Constraints_Overview

概念:データの正確性、有効性、完全性を確保するために、テーブル内のデータを制限します。    

分類:

  1. 主キーの制約:主キー
  2. 空でない制約:nullではない
  3. 唯一の制約:一意
  4. 外部キー制約:外部キー

Constraint_non-empty制約

空でない制約:nullではなく、値をnulにすることはできません

    1.テーブルを作成するときに、制約を追加します
        。CREATETABLE stu(
            id INT、
            NAME VARCHAR(20)NOT NULL-name is not empty
        );
    2.テーブルを作成した後、空でない制約を追加します。ALTERTABLE stu MODIFY NAME VARCHAR(20)NOT NULL ;

    3.名前の空でない制約を削除します。ALTERTABLEstuMODIFY NAME VARCHAR(20);

  

Constraint_Unique制約

一意性制約:一意性。値を繰り返すことはできません。

    1.テーブルを作成するときに、一意の制約を追加します
        CREATE TABLE stu(
            id INT、
            phone_number VARCHAR(20)UNIQUE-一意の制約が追加されます
        );
        * mysqlでは、一意の制約によって制限される列の値に複数のnull。

    2.一意の制約を削除します。ALTERTABLEstuDROP INDEX phone_number;

    3.テーブルを作成した後、一意の制約を追加します。ALTERTABLE stu MODIFY phone_number VARCHAR(20)UNIQUE;

Constraint_primaryキー制約

主キーの制約:主キー

    1.注:
        1。意味:空で
        はなく一意2.テーブルは主キーとして1つのフィールドのみを持つことができます
        3.主キーはテーブル内のレコードの一意の識別子です

    2.テーブルを作成するときに、主キー制約を追加
        します。createtable stu(
            id int primary key、-主キー制約
            名varchar(20)
        )をidに追加します。

    3.主キーを削除します
        -エラーaltertable stu modify id int;
        ALTER TABLE stu DROP PRIMARY KEY;

    4.テーブルを作成した後、主キー
        ALTER TABLE stu MODIFY id INT PRIMARYKEYを追加します。

Constraint_Primary Key Constraint_Auto Growth

    5.自動
        拡張 1。概念:列が数値型の場合は、auto_incrementを使用して自動拡張を完了します

        2.テーブルを作成するときに、主キー制約を追加し、主キーの自己成長を完了し             ます。createtable stu
        (
id int primary key auto_increment、-主キー制約
            名varchar(20)を追加
        )をidに追加します。

        3.自動拡張を削除します。ALTERTABLEstuMODIFY id INT;

        4.自動拡張を追加します。ALTERTABLEstuMODIFY id INT AUTO_INCREMENT;

Constraints_Foreign Key Constraints

外部キーの制約-欠陥の例

CREATE TABLE emp ( -- 创建employe表
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(30),
	age INT,
	dep_name VARCHAR(30), -- 部门名称
	dep_location VARCHAR(30) -- 部门地址
);

-- 添加数据
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('张三', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研发部', '广州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '销售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '销售部', '深圳');

-- 解决方案:分成 2 张表

-- 创建部门表(id,dep_name,dep_location)
-- 一方,主表
CREATE TABLE department(
	id INT PRIMARY KEY AUTO_INCREMENT,
	dep_name VARCHAR(20),
	dep_location VARCHAR(20)
);

-- 创建员工表(id,name,age,dep_id)
-- 多方,从表
CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20),
	age INT,
	dep_id INT -- 外键对应主表的主键
);

-- 添加 2 个部门
INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL, '销售部', '深圳');
SELECT * FROM department;

-- 添加员工,dep_id 表示员工所在的部门
INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);

SELECT * FROM employee;
SELECT * FROM department;

外部キー制約に関連する概念

*外部キー制約:外部キー。データの正確性を確保するために、テーブルとテーブルに関係を持たせます。

    1.テーブルを作成するときに、外部キーを追加できます
        *構文:
            create table table name(
                ...
                外部キー列
                制約外部キー名外部キー(外部キー列名)はメインテーブル名(メインテーブル列名)を参照します
            ) ;

    2.外部キー
        ALTERTABLEテーブル名DROPFOREIGNKEY外部キー名を削除します。

    3.テーブルが作成され
        たら、外部キーを追加します。ALTERTABLEテーブル名ADDCONSTRAINT外部キー名FOREIGNKEY(外部キーフィールド名)REFERENCESメインテーブル名(メインテーブル列名); //主キー列、一意の制約列

CREATE TABLE employee(
    id INT PRIMARY KEY AUTO_INCREMENT、
    NAME VARCHAR(20)、
    age INT、
    dep_id INT、-外部キーはプライマリテーブルの
    キーに対応しますCONSTRAINT emp_dept_fk FOREIGN KEY(dep_id)REFERENCES department(id)-外部キー制約
);

 

Constraint_Foreign KeyConstraint_Cascade操作

4.カスケード操作
    1.カスケード操作
        構文の追加:ALTERTABLEテーブル名ADDCONSTRAINT外部キー名 
                    FOREIGNKEY(外部キーフィールド名)REFERENCESメインテーブル名(メインテーブル列名)ON UPDATE CASCADE ON DELETE CASCADE;
    2.分類:
        1 。カスケード更新:ON UPDATE CASCADE 
        2.カスケード削除:ON DELETE CASCADE 

カスケード更新

カスケード削除

春の始まりは何ですか?あなたの視野を開き、あなたの心を開き、あなたの知恵を開き、パターンを開いてください!

立春、それはなんですか?人類、義、忠誠、誠実、そして精神に頼りなさい!

おすすめ

転載: blog.csdn.net/weixin_44949135/article/details/113631792