MySQL DMLアドバンスト、ページング検索、SQL制約、マルチテーブル操作学習

  • Xiaojieのmysqlデータベース学習エッセイ、要約、および続編が近づいています。
  • Xiaojieはmysqlの新機能です。不適切な表現や間違ったビューが多数ある場合は、読者の方から訂正をいただければ幸いです。また、Xiaojieをさらにサポートしていただければ幸いです。
  • 誰もが相互学習と共通の進歩の精神で一緒に学び、進歩します。 

前回の記事は素晴らしいです

  • 初めてMySQLに入る

MYSQLデータベースの最初の一瞥、SQLステートメントの熟練した使用、および効率を改善するためのグラフィカルインターフェイス

  • MySQLの詳細な知識とさまざまなクエリ操作が洗練されています

データベースステートメント実行プロセスの理解、ストレージエンジンの学習、文字セットの理解、およびさまざまなSQLデータタイプの理解の概要とさまざまなSQLデータクエリの分析とトピックの実践さまざまなSQLデータタイプの理解とさまざまなSQLデータクエリの分析とトピックの実践のhttps:// blog.csdn.net/weixin_53695360/article/details/123571592

1. DMLとは何ですか、DMLの基本操作、テーブルの列と行の更新操作

  • 列の編集操作

#首先简单的创建一个student表为后序操作做准备
use test;
create table student (
	id int,
	name varchar(8),
	age tinyint
) engine = innodb default charset = utf8mb4;
desc student;
  • 新しい列の追加、形式:テーブルテーブル名の変更新しい列名のデータ型(長さ)を追加します。
alter table student add addr varchar(20);
#新增一个addr列出来
  • 列のデータ型(長さ)を変更します。形式は次のとおりです。テーブルテーブル名の変更列名の変更変更されたデータ型(長さ)。
alter table student modify addr varchar(15);
#修改student表中addr列的数据类型 (长度修改)
alter table student modify addr char(20);
#修改student表中addr列的数据类型 (类型修改为char(20))
  • 列の名前を変更します。形式は次のとおりです。テーブルテーブル名の変更列名の変更新しい列名新しい列名のデータ型(長さ)。
alter table student change addr stu_addr varchar(20);
# change 相比 modify 而言功能更加强大可以修改列名字. 
# modify不可以修改列名
  • 。指定された列を削除します。形式:alter table table name drop column name;
alter table student drop stu_addr;
# 删除student表中的stu_addr列
  • 多くの企業のデータベースは非常に大きく、データの列を変更することは簡単なことではないため、テーブルの列構造に上記の変更操作を使用することはお勧めしません。変更が適切でない場合は、データが失われた場合は悪い。
  • テーブル行およびテーブルレコードに対するさまざまな操作(追加、削除、変更、チェック)

テーブルレコードを挿入

  • メソッド1、指定されたフィールドに挿入、形式:テーブル名に挿入(フィールド1、フィールド2、...)値(値1、値2、...);             私はこのメソッドを挿入と呼びます指定されたフィールド操作、フィールド、および割り当ては1対1で対応している必要があります
insert into student(id, name, age) values(1000, '张三', 18);
# 向student表中插入一条id 为1000 name 为张三, age 18的记录
insert into student(id, name, age)
values(1001, '李四', 20),
(1002, '王五', 22),
(1003, '胖子', 25);
#还可以支持values后面跟上多条记录
#每条记录之间使用,隔开

  •  方法2、すべてのフィールドに値を挿入し、フォーマット:テーブル名に挿入values(value 1、value 2、...);
  • つまり、デフォルトでは、すべてのフィールドが順番に挿入されるため、フィールドを書き込む必要はありません。
insert into student
values(1004, '李四他爸', 47),
(1005, '王五它妈', 40),
(1006, '胖子它老特', 20);
#可以向这样不指定任何字段,默认顺序插入所有字段

 挿入操作の注意事項の概要:

  1. 値とフィールドは同じ番号とタイプに対応している必要があります
  2. 値のデータサイズは、フィールドの指定された長さの範囲内である必要があります
  3. 整数/小数タイプを除いて、他のフィールドタイプの値は引用符で囲む必要があります(一重引用符をお勧めします)
  4.  null値を挿入する場合は、フィールドを空白のままにするか、nullを挿入できます。

テーブルレコードの更新

  • 構文形式:テーブル名の更新セットフィールド1 =値、フィールド2=値...ここで条件;     
update student set name = '胖子他爹' where id = 1005;
# 跟新student表中id = 1005这条记录的name为胖子他爹

update student set name = '我是你爸', age = 100 where id = 1005;
# 跟新student表中id = 1005这条记录的name为我是你爸, age为100

 要約および新規記録操作の注意事項:

  1. 列名のタイプは、変更された値と一致している必要があります
  2. 値を変更するとき、値はフィールドの長さの範囲を超えることはできません
  3. integer \ 10進数タイプを除き、他のフィールドタイプの値は引用符で囲む必要があります

テーブルレコードを削除する

  • 構文形式:テーブル名から削除where条件;
delete from student where id = 1005;
# 从student 表中删除id=1005这条记录
delete from student where name = '胖子'
# 从student 表中删除name=胖子这条记录

データベース内の特定のレコードの変更、削除、追加などの操作は非常に一般的であるため、レコードの追加、削除、変更、およびチェックの操作を練習する必要があります。

2.前の記事に残っているページング検索の問題を解決します

  •  上記のことは何ですか?検索レコードや買い物が好きな人は誰もが不慣れではないと思います。このレコードの表示方法は、ページにレコードを表示することです(ページ検索)。
  • ページングクエリ形式:select * from table name limit startRow、pageSize;
#模拟这样一个场景, 每一页5条数据
select * from student limit 0, 5;  # 第一页
select * from student limit 5, 5;  # 第二页
select * from student limit 10, 5; # 第三页
  • 質問を投げると、現時点では、各ページのデータバーの数がわかっており、ページサイズは固定されています。問題は、startRowを決定するとどうなるかということです。
-- 后台计算出页码、页数(页大小)
-- 分页需要的相关数据结果分析如下,
-- 注意:下列是伪代码不用于执行
int curPage = 2; -- 当前页数
int pageSize = 5; -- 每页显示数量
int startRow = (curPage - 1) * pageSize; -- 当前页, 记录开始的位置(行数)计算
  • 実際、startRowを知るには、現在のページ数(ページ数-1)*pageSizeを知る必要があります。

3.SQL制約の詳細な説明

  • 制約の定義

  • 実際に制約について学ぶ必要があります。まず、制約とは何かを理解しましょう。実際、それは非常に単純です。制約は一種の制限であるため、この制御範囲を超えることはできません。
  • データベースの制約は、テーブルのデータコンテンツをランダムに入力できないことを意味し、要件に従って入力する必要があります。データの整合性とセキュリティを確保するため

  • PRIMARYKEY制約   

  • 主キー制約とは:nullではない一意性制約主キー制約はNULLではなく、レコードを一意に識別します。ほとんどすべてのテーブルにそのような制約が必要です。

主キー制約を追加する

  • 方法1:テーブルを作成するときに、フィールドの説明で、指定されたフィールドを主キーとして宣言します。
  • 形式:フィールド名データ型[長さ]主キー。
create table user_table(
	id int primary key, #添加主键约束
	name varchar(10),
	age tinyint
) engine = innodb charset = utf8mb4;
  • 主キー制約はレコードを一意に識別し、空にすることはできません
insert into user_table
values(1001, '翠花', 18);
#插入第一条记录翠花是没有问题的
insert into user_table
values(1001, '王五', 20);
#插入这条记录应当是报错, 重复插入主键了
# [Err] 1062 - Duplicate entry '1001' for key 'PRIMARY'
# 重复加入1001 作为主键

  • 主キー制約をnullにすることはできません(一意の主キーとは異なります) 。
insert into user_table
values(null, '大胖', 30);
# 区别唯一约束, 主键约束不可以为null
#[Err] 1048 - Column 'id' cannot be null
  • 方法2:テーブルを作成するときに、制約領域で、指定されたフィールドを主キーとして宣言します
  • 構文形式:    [制約名]主キー(フィールドリスト)
  • 外観の必要性は何ですか?この方法の必要性は、ジョイント主キーを追加することです。特定のジョイント主キーの使用は、以下の中間表に適用されます。ここでは、最初に作成方法を学習します。
create table persons (
	pid int,
	lastname varchar(255),
	firstname varchar(255),
	address varchar(255),
	constraint persons_pk primary key(lastname, firstname) 
	#通过constraint 增添联合主键
) engine = innodb default charset = utf8mb4;
  • 共同主キーの制約が必要な理由を考えてください。主キーはさまざまなレコードを識別するために使用する必要があります。このような状況で    は、 名前と性別を使用して同じオブジェクトを識別する必要があります    (残念ながら男の子がいます)とWangYujieという名前の女の子この場合、名前だけを区別することはできません。この場合、主キーを他のフィールドと組み合わせて、識別を制限することができます)
  • 方法3:テーブルを作成した後、テーブル構造を変更して、指定したフィールドを主キーとして宣言します。
  • 形式:変更可能なテーブル名add [制約名]主キー(フィールドリスト)
alter table user_table 
add constraint name_id_pk primary key(name, id);
# 向user_table表中增加一个name + id的联合主键

主キー制約を削除します

  • 形式:テーブルテーブル名の変更主キーの削除。
alter table user_table drop primary key;
# 删除user_table表中的主键约束

自動インクリメント列(主キー制約を列から分離する方法を紹介します)

  • 通常、新しいレコードが挿入されるたびに、データベースがフィールドの値を自動的に生成するようにします。
  • 特に主キーフィールドは、マークされたレコードとしてのみ使用される場合、値を設定する必要はまったくありません。
  • テーブルでauto_increment(auto-increment column)キーワードを使用できます。auto-increment列のタイプは整数である必要があり、auto-increment列はキー(通常は主キー)である必要があります。

形式:フィールド名整数型[長さ][制約]auto_increment

create table test(
	id int primary key auto_increment,
	# 添加一个主键约束, 设置自动增长. 默认增长为1
	age tinyint,
	name varchar(20)
) engine = innodb default charset = utf8mb4;

insert into test values(null, 18, '小呼噜');
# 我们设置了主键自动递增可以不再需要传入主键字段
# 或者主键传入null 他会自动设置从1开始默认增量1

  • または、に挿入するときは、何も渡さなくてもかまいません。また、nullを渡すこともできます。

  • ただし、上記と同じものを使用する場合は、挿入するフィールドの指定に注意する必要があります。そうでない場合、デフォルトでは3つの値が指定されます。挿入フィールドを指定する場合、IDを指定する必要はありません。これ   はデフォルト値に少し似ています。
  • ヌル制約ではありません

  • NOT NULL制約:列はNULL値を受け入れません。フィールドには常に値が含まれている必要があります。つまり、フィールドに値を追加せずに、新しいレコードを挿入したり、レコードを更新したりすることはできません。

null以外の制約を追加します

  • 形式:フィールド名データ型[長さ] NOT NULL
drop table test;
create table test(
	id int primary key auto_increment,
	name varchar(10) not null,#设置非null 插入数据不能传入null
	age tinyint
) engine = innodb auto_increment = 10 default charset = utf8mb4;
# 我们还可以向这般指定auto_increment的值
insert test values(null, null, 28);
# 会出错, 第二个字段增加了not null 约束
# 传空会报错[Err] 1048 - Column 'name' cannot be null

非ヌル制約を削除します   

  • 形式:テーブルテーブル名の変更フィールド名のデータ型の変更[長さ]
alter table test modify name varchar(10);
# 非常简单的方式, 直接更改数据类型的不加null约束即可
desc test;

  • 一意性制約

  • 一意性制約:指定された列の値を繰り返すことはできません。

知らせ: 

  1. UNIQUE制約とPRIMARYKEY制約はどちらも、列に固有の保証を提供します。PRIMARY KEYは、自動的に定義されたUNIQUE制約です。
  2.  各テーブルには複数のUNIQUE制約を含めることができますが、各テーブルに含めることができるPRIMARYKEY制約は1つだけです。
  3.  UNIQUEはnull値の出現回数を制限しません

一意の制約を追加する

  • 主キーを追加するのと同じように、3つのタイプがあります。ここでいくつかの例を示します。
drop table test;
create table test (
	id int unique,	# 添加一个唯一约束
	name varchar(20) not null,
	age tinyint
) engine = innodb default charset = utf8mb4;
desc test;
insert into test values(null, '张三', 19);
# 允许传入null  区别primary key
insert into test 
values(1, '李四', 30),
(1, '王五', 38);  
#报错[Err] 1062 - Duplicate entry '1' for key 'id'

  • 形式2:[制約名] UNIQUE(フィールド)は主キーモード2に対応します
  • 形式3:ALTERTABLEテーブル名ADD[CONSTRAINT名]UNIQUE(フィールド)比較方法3

主キー制約を削除したのと同じ方法で、一意性制約を削除します

  • デフォルトの制約

  • デフォルトの制約:フィールドのデフォルト値を指定するために使用されます。テーブルにレコードを挿入するときに、フィールドが明示的に割り当てられていない場合、デフォルト値が自動的に割り当てられます
  • デフォルトの制約を追加し、テーブルを作成するときに形式を追加します。フィールド名データ型[長さ]デフォルトのデフォルト値
CREATE TABLE persons (
 pid INT,
 lastname VARCHAR(255),
 firstname VARCHAR(255),
 address VARCHAR(255) DEFAULT '香港' -- 添加默认约束
)engine = innodb default charset = utf8mb4;
# 传入null 则会按照default 赋值
insert into persons(pid, lastname, firstname) 
values(2, '德华', '刘');
# 或者指定字段, default字段可以不用传入val

4.マルチテーブル操作

  • もともとマルチテーブル操作をまとめて一律に処理する予定でしたが、マルチテーブル操作はかなり面倒くさく、しばらくXiaojieが理解できなかったので、Xiaojieは次の章に進みます        (Xiaojieサポートhaの皆さんに感謝します)

5.この記事の要約

  • alterキーワードの先頭にあるテーブルの列操作(add、delete、modify、check)について、その後にadd modifychangedropが続きます

テーブルテーブル名の変更列名のタイプ(長さ)の追加新しい列の追加

テーブルテーブル名の変更列名の変更oldtypenewtypeは、列の型変更のみを行います

テーブルテーブル名の変更古い列名の変更新しい列名oldtypenewtypeは、列のタイプ+リストの変更を実行できます

テーブルテーブル名の変更列名の削除;列の削除操作

  • テーブルの操作の記録(追加、削除、変更、チェック

テーブル名に挿入(フィールドを指定)値(値を指定)、(値を指定);フィールド値の挿入(レコードを挿入)を指定

テーブル名の値に挿入(すべてのフィールドは順番に書き込まれます);テーブルフィールドの順序に従ってフィールド値を挿入します

テーブル名セットフィールドの更新=条件指定されたレコード変更レコードの値

条件が指定されたレコードが指定されたテーブルから条件を満たすレコードを削除するテーブル名から削除

  • さまざまな制約について学ぶ

制約は制限です

テーブル内のレコードを一意に識別するために使用される主キー制約(一意性制約+非null制約の組み合わせに相当)

一意性制約も繰り返し不可に保たれ、列フィールド値は一意ですが、nullは許可されます

null以外の制約。つまり、nullは許可されず、nullをパラメーターとして渡すことはできません。

デフォルトの制約。nullが渡された場合、デフォルトのフィールド値は初期のデフォルト値です。

友だち、今日紹介することは難しいことではありませんが、簡単なことを細かく習得する必要があります。できれば、頑張ってテストしてみてください。勉強、昇進、昇給に成功してください。

おすすめ

転載: blog.csdn.net/weixin_53695360/article/details/123711464