データベースのクエリと設計制約ディアン知識day27_mysqlテーブル

表中のDQLクエリデータ

データベース内のクエリデータへの道は変更されません。ただ、データの表示

単純な問合せ

構文:

  • テーブルの列名を[WHERE条件式]

 詳細:

  • SELECTコマンドは、行または複数行を読み出します。
  • すべてのフィールドのデータは、あなたが他のフィールドの代わりにアスタリスク(*)を使用することができ、SELECT文の戻りテーブル
  • あなたは、任意の条件が含まれるようにWHERE句を使用することができます。
すべてのデータのルックアップテーブルの行と列

使用*は、すべての列を示し、

構文:

  • 名表SELECT * FROM。

例えば:

クエリの指定する列

複数の列の間に、カラムを指定したデータのクエリは、カンマで区切られました

構文:
  • テーブル名FROM SELECTフィールド名1、2、フィールド名、フィールド名3、...;

例えば:

指定された列の別名クエリ

エイリアスを使用する利点:新しい名前で表示されたときには、テーブルの構造を変更しません。 

エイリアス列 

構文:

  • 1 AS SELECTフィールド名のエイリアスは、エイリアスフィールド名テーブル名FROM 2 ASは...。 

例えば:

列とテーブルの別名を指定します
文法
  • 1つのAS SELECTフィールド名の別名、AS ASテーブルのエイリアステーブルからエイリアスフィールド名2 ...。 

例えば

重複を排除

クエリ指定する列やデータの非重複の結果

文法

  • テーブルとは別のフィールド名を選択します。 

例えば:

クエリ結果の計算に関与

カラム固定値データと操作
構文:
  • FROMテーブル1プラス固定列名を選択します。 

例えば:

コンピューティングに関連するデータ及び他のデータ列の列 

文法

  • 列1 +列名テーブル名FROM 2を選択します。 
注:参加操作は数値型でなければなりません

例えば:

注意:

  • 計算のヌル参加するので、結果はヌルであり、MySQLのステートメントは、(式1、式2)IFNULL機能を提供します。この問題を解決します。式1:必要なフィールドが交換ヌルのフィールド値ならば、nullであるか否かが判断されます。

条件お問い合わせ 

何のクエリ、クエリは、各時間は、すべての行が存在しない場合。実用的なアプリケーションでは、一般的に指定された条件のクエリ。レコードをフィルタ

クエリ条件の構文 

  • WHEREフィールド条件テーブル名から名前を選択。

プロセス構文:録画は条件を満たすために戻ります、テーブル内のデータのそれぞれを削除します

演算子

論理演算子 

キーワードで 

範囲クエリ

例えば:

like 关键字

MySQL 通配符 

举例:

排序查询

通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

语法:

  • SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];

tips:

  • ASC: 升序,默认值
  • DESC: 降序
单列排序

只按某一个字段进行排序,单列排序。

组合排序

同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。

组合排序的语法:

  • SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];

举例:

聚合函数

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值 NULL。

五个聚合函数

  • max(列名):求这一列的最大值
  • min(列名):求这一列的最小值
  • avg(列名):求这一列的平均值
  • count(列名):统计这一列有多少条记录
  • sum(列名):对这一列求总和
语法:
  • SELECT 聚合函数(列名) FROM 表名;

举例:

我们发现对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL也统计进去呢?

解决办法:

  • IFNULL(列名,默认值)  如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。
我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏

举例:

分组查询

分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组
语法
  • SELECT 字段 1,字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件]; 
GROUP BY 怎么分组的?将分组字段结果中相同内容作为一组,如按性别将学生分成 2 组。GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
注意:
  • 当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

 举例:

 

having 与 where 的区别

 例如:

分页查询

limit 的作用:

LIMIT 是限制的意思,所以 LIMIT 的作用就是限制查询记录的条数

语法(MySQL方言)

  • SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子句][LIMIT 子句];
LIMIT 语法格式:
  • offset:起始行数,从 0 开始计数,如果省略,默认就是 0
  • length: 返回的行数
  • 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
LIMIT 的使用场景:
分页:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。 假设我们每页显示 5 条记录的方式来分页。

举例:

数据库表的约束

约束的作用:

  • 对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。

约束种类:

非空约束

什么是非空约束:某一列不能为 null。
非空约束关键字:NOT NULL; 

非空约束的基本语法格式

  • 字段名 字段类型 NOT NULL 

创建表时添加约束

语法:

create table 表名(

  字段名称 字段类型 NOT NULL, --- 这个字段添加了非空约束

   .....

);

举例:

创建表完后,添加非空约束

语法:

  • ALTER TABLE 表名 MODIFY 字段名称 字段类型 NOT NULL;

举例:

 删除name的非空约束

语法:

  • ALTER TABLE stu MODIFY字段名称 字段类型;

举例:

唯一约束

什么是唯一约束: 表中某一列不能出现重复的值
唯一约束关键字:UNIQUE

唯一约束的基本语法格式

  • 字段名 字段类型 UNIQUE 

注意:

  • 唯一约束可以有NULL值,但是只能有一条记录为null

在创建表时,添加唯一约束

语法:

CREATE TABLE 表名(
  字段名称 字段类型,
  字段名称 字段类型,UNIQUE -- 手机号
);

举例:

删除唯一约束

语法:

  • ALTER TABLE 表名 DROP INDEX 字段名称;

举例:

在表创建完后,添加唯一约束

只要表中没有相同数据,才能使用这种方式添加唯一约束

语法:

  • ALTER TABLE 表名 MODIFY 字段名称 字段类型 UNIQUE;

 举例:

主键约束

主键关键字: primary key
主键的作用
  • 用来唯一标识数据库中的每一条记录
主键的特点:
  • 非空 not null
  • 唯一
创建主键方式:

在创建表的时候给字段添加主键

语法:
  • 字段名 字段类型 PRIMARY KEY

举例:

删除主键
语法
  • alter table 表名 drop primary key;

举例

在已有表中添加主键
如果这个字段有重复或者null值,则添加主键失败
语法:
  • ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

举例:

主键自增

主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值 

语法:
  • AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型) 

创建主键,并且添加自动增长

语法:

CREATE TABLE 表名(
  列名 int primary key AUTO_INCREMENT
)
 
修改自增长的默认值起始值
默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法

创建表时指定起始值

语法:

CREATE TABLE 表名(
  列名 int primary key AUTO_INCREMENT
) AUTO_INCREMENT=起始值;

举例:

创建好表以后修改起始值
语法:
  • ALTER TABLE 表名 AUTO_INCREMENT=起始值; 

举例:

删除自动增长

语法:

  • ALTER TABLE 表名 MODIFY 字段名称 字段类型;

举例:

小结:

  • 主键数在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列。
  • 自增长只能用在主键上

外键约束

  • 什么是外键:在从表中与主表主键对应的那一列。
  • 主表: 一方,用来约束别人的表
  • 从表: 多方,被别人约束的表
创建外键约束

新建表时增加外键: 

语法:

  • [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名) 

举例:

已有表增加外键:

语法:
  • ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名); 

举例:

删除外键 

语法:
  • ALTER TABLE 从表 drop foreign key 外键名称; 

举例:

外键的级联 

什么是级联操作:
  • 在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作

 举例:

数据约束小结

数据库的设计

表与表之间的关系 

表关系的概念
现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,老师和学生等。那么我们在设计表的时候,就应该体现出表与表之间的这种关系! 

一对一

一对一(1:1) 在实际的开发中应用不多.因为一对一可以创建成一张表。 
两种建表原则: 

一对多

  • 一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品
  • 一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

多对多

  • 多对多(m:n) 例如:老师和学生,学生和课程,用户和角色
  • 多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键
表与表之间的关系小结

数据范式

什么是范式:

好的数据库设计对数据的存储性能和后期的程序开发,都会产生重要的影响。建立科学的,规范的数据库就需要满足一些规则来优化数据的设计和存储,这些规则就称为范式。

三大范式:

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。 

1NF 

概念:
  • 数据库表的每一列都是不可分割的原子数据项,不能是集合、数组等非原子数据项。即表中的某个列有多个值时,必须拆分为不同的列。简而言之,第一范式每一列不可再拆分,称为原子性。 

总结:每一列都不可再次拆分

示例:

2NF 

概念:
在满足第一范式的前提下,表中的每一个字段都完全依赖于主键。所谓完全依赖是指不能存在仅依赖主键一部分的列。简而言之,第二范式就是在第一范式的基础上所有列完全依赖于主键列。当存在一个复合主键包含多个主键列的时候,才会发生不符合第二范式的情况。比如有一个主键有两个列,不能存在这样的属性,它只依赖于其中一个列,这就是不符合第二范式。
第二范式的特点:
  • 一张表只描述一件事情。
  • 表中的每一列都完全依赖于主键

示例:

3NF:

概念:
在满足第二范式的前提下,表中的每一列都直接依赖于主键,而不是通过其它的列来间接依赖于主键。简而言之,第三范式就是所有列不依赖于其它非主键列,也就是在满足 2NF 的基础上,任何非主列不得传递依赖于主键。所谓传递依赖,指的是如果存在"A → B → C"的决定关系,则 C 传递依赖于 A。因此,满足第三范式的数据库表应该不存在如下依赖关系:主键列 → 非主键列 x → 非主键列 y

示例:学生信息表

三大范式小结: 

数据库备份和还原 

备份的应用场景
在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。
备份与还原的语句

备份格式: DOS 下,未登录的时候。这是一个可执行文件 exe,在 bin 文件夹

语法:

  • mysqldump -u 用户名 -p 密码 数据库 > 文件的路径

举例:

还原格式:mysql 中的命令,需要登录后才可以操作
  • USE 数据库;
  • SOURCE 导入文件的路径;

步骤

  1. 删除 day21 数据库中的所有表
  2. 登录 MySQL
  3. 选中数据库
  4. 使用 SOURCE 命令还原数据
  5. 查看还原结果 

图形化界面备份与还原 

备份数据库中的数据
  1. 选中数据库,右键 ”备份/导出”
  2. 指定导出路径,保存成.sql 文件即可。

 

还原数据库中的数据 
  1. 删除数据库
  2. 数据库列表区域右键“执行 SQL 脚本”, 指定要执行的 SQL 文件,执行即可

 

 

 

おすすめ

転載: www.cnblogs.com/wurengen/p/12300529.html