提交 3040105d 编写于 作者: W wizardforcel

2020-06-21 16:30:19

上级 1bab4883
......@@ -78,7 +78,7 @@ mysql> SELECT @name;
## 运算符
运算符 用于构建表达式。 SQL 运算符与数学运算符非常相似。 有两种运算符。 二元和一元。 二元运算符使用两个操作数,一元运算符使用一个。 一个运算符可以有一个或两个操作数。 操作数 是运算符的输入(参数)之一。
运算符用于构建表达式。 SQL 运算符与数学运算符非常相似。 有两种运算符。 二元和一元。 二元运算符使用两个操作数,一元运算符使用一个。 一个运算符可以有一个或两个操作数。 操作数是运算符的输入(参数)之一。
我们有几种类型的运算符:
......@@ -292,7 +292,7 @@ mysql> SELECT 3 < 4, 3 <> 5, 4 <= 4, 5 != 5;
小数对人类是自然的。 二进制数是计算机固有的。 二进制,八进制,十进制或十六进制符号仅是相同数字的符号。 按位运算符使用二进制数的位。 我们有二进制逻辑运算符和移位运算符。
按位,运算符 在两个数字之间进行逐位比较。 仅当操作数中的两个对应位均为 1 时,位位置的结果才为 1。
按位,运算符在两个数字之间进行逐位比较。 仅当操作数中的两个对应位均为 1 时,位位置的结果才为 1。
```sql
......@@ -314,7 +314,7 @@ mysql> SELECT 6 & 3, 3 & 6;
```
按位或运算符 在两个数字之间进行逐位比较。 如果操作数中的任何对应位为 1,则位位置的结果为 1。
按位或运算符在两个数字之间进行逐位比较。 如果操作数中的任何对应位为 1,则位位置的结果为 1。
```sql
......@@ -336,7 +336,7 @@ mysql> SELECT 6 | 3, 3 | 6;
```
按位移位运算符 向右或向左移位。
按位移位运算符向右或向左移位。
```sql
number << n : multiply number 2 to the nth power
......@@ -529,7 +529,7 @@ mysql> SELECT * FROM Cars WHERE Cost BETWEEN 20000 AND 55000;
## 优先顺序
运算符优先级 告诉我们首先求值哪个运算符。 优先级对于避免表达式中的歧义是必要的。
运算符优先级告诉我们首先求值哪个运算符。 优先级对于避免表达式中的歧义是必要的。
以下表达式 28 或 40 的结果是什么?
......@@ -561,7 +561,7 @@ mysql> SELECT 3+5*5, (3+5)*5;
## 关联性
有时,优先级不能令人满意地确定表达式的结果。 还有另一个规则称为 关联性。 运算符的关联性确定 优先级与 相同的运算符的求值顺序。
有时,优先级不能令人满意地确定表达式的结果。 还有另一个规则称为关联性。 运算符的关联性确定优先级相同的运算符的求值顺序。
```sql
9 / 3 * 3
......
......@@ -105,7 +105,7 @@ Base.metadata.create_all()
```
`create_all()`方法创建所有已配置的表; 在我们的例子中,只有一张桌子
`create_all()`方法创建所有已配置的表; 在我们的例子中,只有一张
```py
Session = sessionmaker(bind=eng)
......@@ -323,7 +323,7 @@ Volkswagen 21600
```
桌子上有两辆以“ en”字符串结尾的汽车。
表中有两辆以“`en`”字符串结尾的汽车。
`in_()`方法实现 SQL `IN`运算符。
......
......@@ -4,7 +4,7 @@
在 MySQL 教程的这一部分中,我们将提到 MySQL 中的子查询。
子查询 是查询中的查询。 也称为内部查询或嵌套查询。 子查询可在允许表达式的任何地方使用。 它是一个用括号括起来的查询表达式。 子查询可以与`SELECT``INSERT``UPDATE``DELETE`语句一起使用。
子查询是查询中的查询。 也称为内部查询或嵌套查询。 子查询可在允许表达式的任何地方使用。 它是一个用括号括起来的查询表达式。 子查询可以与`SELECT``INSERT``UPDATE``DELETE`语句一起使用。
有多种方法可以执行 SQL 任务。 许多子查询可以用 SQL 连接代替。 SQL 连接通常更快。
......
......@@ -4,7 +4,7 @@
在 MySQL 教程的这一部分中,我们将处理约束。
约束 放在列或表上。 它们限制了可以插入表中的数据。
约束放在列或表上。 它们限制了可以插入表中的数据。
我们有以下限制:
......
......@@ -43,7 +43,7 @@ mysql> SELECT * FROM Reservations;
## 内连接
内连接是最常见的连接类型。 这也是默认的连接。 内连接仅从数据库表中选择具有匹配值的记录。 我们有 内接头 的三种类型:`INNER JOIN``NATURAL INNER JOIN``CROSS INNER JOIN``INNER`关键字可以省略。
内连接是最常见的连接类型。 这也是默认的连接。 内连接仅从数据库表中选择具有匹配值的记录。 我们有内连接的三种类型:`INNER JOIN``NATURAL INNER JOIN``CROSS INNER JOIN``INNER`关键字可以省略。
### 内连接
......@@ -117,13 +117,13 @@ SELECT Name, Day FROM Customers, Reservations;
## 外连接
部连接 不需要两个连接表中的每个记录都具有匹配的记录。 外部连接有三种类型。 左外部连接,右外部连接和完全外部连接。 在创建教程时,MySQL 不支持完全外部连接。
连接不需要两个连接表中的每个记录都具有匹配的记录。 外连接有三种类型。 左外连接,右外连接和全外连接。 在创建教程时,MySQL 不支持全外连接。
如前所述,内连接是最常见的连接。 外连接对于查找孤立记录可能很有用。 如果一个人没有预订,是顾客吗? 如果我们无法与客户匹配,预订是否有效?
如前所述,内连接是最常见的连接。 外连接对于查找孤立记录可能很有用。 如果一个人没有预订,是顾客吗? 如果我们无法与客户匹配,预订是否有效?
### 左外连接
即使与右表不匹配,`LEFT OUTER JOIN`也将从左表返回所有值。 在这样的行中,将有`NULL`值。 换句话说,左外连接返回左表中的所有值,以及右表中的匹配值。 注意,可以省略`OUTER`关键字。
即使与右表不匹配,`LEFT OUTER JOIN`也将从左表返回所有值。 在这样的行中,将有`NULL`值。 换句话说,左外连接返回左表中的所有值,以及右表中的匹配值。 注意,可以省略`OUTER`关键字。
```sql
mysql> SELECT Name, Day FROM Customers LEFT JOIN Reservations
......
......@@ -6,7 +6,7 @@
## 查看定义
视图 是来自一个或多个表的数据的特定外观。 它可以按特定顺序排列数据,突出显示或隐藏某些数据。 视图由存储的查询组成,该查询可作为由查询结果集组成的虚拟表访问。 与普通表不同,视图不构成物理模式的一部分。 它是根据数据库中的数据计算或整理的动态虚拟表。
视图是来自一个或多个表的数据的特定外观。 它可以按特定顺序排列数据,突出显示或隐藏某些数据。 视图由存储的查询组成,该查询可作为由查询结果集组成的虚拟表访问。 与普通表不同,视图不构成物理模式的一部分。 它是根据数据库中的数据计算或整理的动态虚拟表。
视图是伪表。 它是一个存储查询,看起来像一个表。 它可以像表一样被引用。
......
......@@ -6,11 +6,11 @@
## 事务的定义
事务 是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库,也可以全部回滚。
事务是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库,也可以全部回滚。
MySQL 支持多种存储引擎。 InnoDB 完全符合 ACID。 ACID 代表原子性,一致性,隔离性和耐久性。 可靠的事务必须支持所有这四个属性。
事务内的操作必须是 原子。 这意味着所有操作都将成功或失败。 这是全有或全无的规则。 一致性 属性可确保事务完成后数据库处于一致状态。 数据有效,没有半完成的记录。 例如,没有没有付款记录的客户,或者没有客户的付款记录。 隔离 是其他操作无法访问在尚未完成的事务期间修改的数据的要求。 在并发事务的情况下会出现隔离问题。 如果没有隔离,则数据可能最终处于不一致状态。 持久性 是数据库系统针对任何类型的系统故障恢复已提交事务更新的能力。
事务内的操作必须是原子的。 这意味着所有操作都将成功或失败。 这是全有或全无的规则。 一致性属性可确保事务完成后数据库处于一致状态。 数据有效,没有半完成的记录。 例如,没有没有付款记录的客户,或者没有客户的付款记录。 隔离是其他操作无法访问在尚未完成的事务期间修改的数据的要求。 在并发事务的情况下会出现隔离问题。 如果没有隔离,则数据可能最终处于不一致状态。 持久性是数据库系统针对任何类型的系统故障恢复已提交事务更新的能力。
## 隔离等级
......@@ -23,18 +23,18 @@ MySQL 提供了四个级别的事务隔离:
* 阅读已提交
* 阅读未提交
可序列化的 隔离级别中,所有事务都以完全隔离的方式发生。 所有事务都一个接一个地执行。 在 中,可重复读取 隔离级别语句无法读取已被其他事务修改但尚未提交的数据。 在当前事务完成之前,没有其他事务可以修改当前事务已读取的数据。 这是 InnoDB 的默认隔离级别。 其中,已提交读隔离级别的语句无法读取已被其他事务修改但未提交的数据。 语句等待直到被其他事务写锁定的数据行被解锁,然后才能获取自己的锁。 这样可以防止他们读取脏数据。 在 读取未提交的 隔离级别中,语句可以读取已被其他事务修改但尚未提交的行。
可序列化的隔离级别中,所有事务都以完全隔离的方式发生。 所有事务都一个接一个地执行。 在可重复读取的隔离级别中,语句无法读取已被其他事务修改但尚未提交的数据。 在当前事务完成之前,没有其他事务可以修改当前事务已读取的数据。 这是 InnoDB 的默认隔离级别。 其中,已提交读隔离级别的语句无法读取已被其他事务修改但未提交的数据。 语句等待直到被其他事务写锁定的数据行被解锁,然后才能获取自己的锁。 这样可以防止他们读取脏数据。 在未提交读的隔离级别中,语句可以读取已被其他事务修改但尚未提交的行。
当事务未完全分离时,可能会遇到幻影读取,不可重复读取和脏读取的问题。 当事务重新执行返回返回满足搜索条件的行的集合的查询,并发现满足条件的行的集合由于另一个最近提交的事务而发生更改时,会发生 幻像读取。 不可重复读取 是在事务重新读取其先前已读取的数据并发现该数据已被另一个事务修改后发生的。 自从初次阅读以来就实现了。 当事务从已被另一个事务修改但尚未提交的行中读取数据时,会发生 脏读。
当事务未完全分离时,可能会遇到幻影读取,不可重复读取和脏读取的问题。 当事务重新执行返回返回满足搜索条件的行的集合的查询,并发现满足条件的行的集合由于另一个最近提交的事务而发生更改时,会发生幻像读取。 不可重复读取是在事务重新读取其先前已读取的数据并发现该数据已被另一个事务修改后发生的。 自从初次阅读以来就实现了。 当事务从已被另一个事务修改但尚未提交的行中读取数据时,会发生脏读。
下表显示了所有隔离级别以及它们遇到的可能的问题。
| 隔离度 | 幻影阅读 | 不可重复读 | 脏读 |
| 隔离度 | 幻读 | 不可重复读 | 脏读 |
| --- | --- | --- | --- |
| 可序列化 | 不可能 | 不可能 | 不可能 |
| 可重复读 | 可能 | 不可能 | 不可能 |
| 阅读已提交 | 可能 | 可能 | 不可能 |
| 阅读未提交 | 可能 | 可能 | 可能 |
| 已提交读 | 可能 | 可能 | 不可能 |
| 未提交读 | 可能 | 可能 | 可能 |
MySQL 的默认事务隔离级别是可重复读取。
......
......@@ -713,7 +713,7 @@ fout.write(data)
## MySQLdb 事务支持
事务 是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库,也可以全部回滚。
事务是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库,也可以全部回滚。
对于支持事务的数据库,在创建游标时,Python 接口会静默启动事务。 `commit()`方法将提交使用该游标进行的更新,而`rollback()`方法将丢弃这些更新。 每种方法都会启动一个新事务。
......
......@@ -74,7 +74,7 @@ mysql> SHOW DATABASES;
```
我们使用 mysql 监视器 客户端应用连接到服务器。 我们使用根帐户连接到数据库。 我们用`SHOW DATABASES`语句显示所有可用的数据库。
我们使用 mysql 监视器客户端应用连接到服务器。 我们使用根帐户连接到数据库。 我们用`SHOW DATABASES`语句显示所有可用的数据库。
```perl
mysql> CREATE DATABASE mydb;
......
......@@ -181,7 +181,7 @@ $dbh->do("INSERT INTO Cars VALUES(2,'Mercedes',57127)");
```
这两行将两辆车插入桌子。 请注意,默认情况下,我们处于 自动提交模式,其中对表的所有更改均立即生效。
这两行将两辆车插入表。 请注意,默认情况下,我们处于自动提交模式,其中对表的所有更改均立即生效。
```perl
mysql> SELECT * FROM Cars;
......
......@@ -200,7 +200,7 @@ $dbh->do("UPDATE Car SET Price=22000 WHERE Id=8");
```
SQL 语句中有错误。 没有汽车桌子
SQL 语句中有错误。 没有汽车
```perl
sub handle_error {
......
......@@ -20,13 +20,13 @@ MariaDB 是 MySQL 的社区开发分支,旨在在 GNU GPL 下保持免费。
## 定义
关系数据库 是表中组织的数据的集合。 表之间存在关系。 这些表是正式描述的。 它们由行和列组成。 SQL(结构化查询语言)是一种数据库计算机语言,旨在管理关系数据库管理系统中的数据。 表 是使用垂直列和水平行的模型组织的一组值。 列由其名称标识。 数据库系统的模式是用正式语言描述的结构。 它定义了表,字段,关系,视图,索引,过程,函数,队列,触发器和其他元素。
关系数据库是表中组织的数据的集合。 表之间存在关系。 这些表是正式描述的。 它们由行和列组成。 SQL(结构化查询语言)是一种数据库计算机语言,旨在管理关系数据库管理系统中的数据。 表是使用垂直列和水平行的模型组织的一组值。 列由其名称标识。 数据库系统的模式是用正式语言描述的结构。 它定义了表,字段,关系,视图,索引,过程,函数,队列,触发器和其他元素。
数据库 行 代表表中的单个隐式结构化数据项。 它也称为元组或记录。 列 是一组特定简单类型的数据值,该数据值对应于表的每一行。 列提供了构成行所依据的结构。 字段 是单个项目,存在于一行和一列之间的交点处。 主键 唯一标识表中的每个记录。 外键 是两个表之间的引用约束。 外键标识一个(引用)表中的一列或一组列,该列或表引用另一(引用)表中的一列或一组列。
数据库的行代表表中的单个隐式结构化数据项。 它也称为元组或记录。 列是一组特定简单类型的数据值,该数据值对应于表的每一行。 列提供了构成行所依据的结构。 字段是单个项目,存在于一行和一列之间的交点处。 主键唯一标识表中的每个记录。 外键是两个表之间的引用约束。 外键标识一个(引用)表中的一列或一组列,该列或表引用另一(引用)表中的一列或一组列。
触发器 是响应于数据库中特定表上的某些事件而自动执行的过程代码。 视图 是对来自一个或多个表的数据的特定外观。 它可以按特定顺序排列数据,突出显示或隐藏某些数据。 视图由存储的查询组成,该查询可作为由查询结果集组成的虚拟表访问。 与普通表不同,视图不构成物理模式的一部分。 它是根据数据库中的数据计算或整理的动态虚拟表。
触发器是响应于数据库中特定表上的某些事件而自动执行的过程代码。 视图是对来自一个或多个表的数据的特定外观。 它可以按特定顺序排列数据,突出显示或隐藏某些数据。 视图由存储的查询组成,该查询可作为由查询结果集组成的虚拟表访问。 与普通表不同,视图不构成物理模式的一部分。 它是根据数据库中的数据计算或整理的动态虚拟表。
事务 是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库,也可以全部回滚。 SQL 结果集 是数据库中由`SELECT`语句返回的一组行。 它还包含有关查询的元信息,例如列名以及每列的类型和大小。 索引 是一种数据结构,可提高对数据库表的数据检索操作的速度。
事务是针对一个或多个数据库中数据的数据库操作的基本单位。 事务中所有 SQL 语句的影响可以全部提交给数据库,也可以全部回滚。 SQL 结果集是数据库中由`SELECT`语句返回的一组行。 它还包含有关查询的元信息,例如列名以及每列的类型和大小。 索引是一种数据结构,可提高对数据库表的数据检索操作的速度。
## 使用的表
......
......@@ -293,6 +293,6 @@ mysql> SELECT * FROM Friends;
```
一个新朋友被插入了桌子
一个新朋友被插入了
在 MySQL Perl 教程的这一部分中,我们处理了事务。
\ No newline at end of file
......@@ -422,7 +422,7 @@ execute_query($query);
```
一辆汽车被插入桌子
一辆汽车被插入
```php
if (!$ok) {
......
......@@ -120,13 +120,13 @@ sqlite> SELECT Name, Day FROM Customers, Reservations;
```
## SQLite 外连接
## SQLite 外连接
部连接 不需要两个连接表中的每个记录都具有匹配的记录。 外部连接共有三种类型:左外部连接,右外部连接和完全外部连接。 SQLite 仅支持左外部连接。
连接 不需要两个连接表中的每个记录都具有匹配的记录。 外连接共有三种类型:左外连接,右外连接和全外连接。 SQLite 仅支持左外连接。
### 左外连接
即使与右表不匹配,`LEFT OUTER JOIN`也将从左表返回所有值。 在此类行中,将有`NULL`值。 换句话说,左外连接返回左表中的所有值,以及右表中的匹配值。 注意,可以省略`OUTER`关键字。
即使与右表不匹配,`LEFT OUTER JOIN`也将从左表返回所有值。 在此类行中,将有`NULL`值。 换句话说,左外连接返回左表中的所有值,以及右表中的匹配值。 注意,可以省略`OUTER`关键字。
```sql
sqlite> SELECT Name, Day FROM Customers LEFT JOIN Reservations
......
......@@ -243,7 +243,7 @@ cur.execute("INSERT INTO cars VALUES(2,'Mercedes',57127)")
```
这两行将两辆车插入桌子。 使用`with`关键字,更改将自动提交。 否则,我们将不得不手动提交它们。
这两行将两辆车插入。 使用`with`关键字,更改将自动提交。 否则,我们将不得不手动提交它们。
```py
sqlite> .mode column
......
......@@ -188,7 +188,7 @@ $dbh->do("INSERT INTO Cars VALUES(2,'Mercedes',57127)");
```
这两行将两辆车插入桌子。 请注意,默认情况下,我们处于 自动提交模式,其中对表的所有更改均立即生效。
这两行将两辆车插入。 请注意,默认情况下,我们处于 自动提交模式,其中对表的所有更改均立即生效。
```perl
sqlite> .mode column
......
......@@ -278,6 +278,6 @@ sqlite> SELECT * FROM Friends;
```
一个新朋友被插入了桌子
一个新朋友被插入了
在 SQLite Perl 教程的这一部分中,我们处理了事务。
\ No newline at end of file
......@@ -272,7 +272,7 @@ mysql> SELECT Name, Population FROM city
```
上面的查询显示了表中人口最多的城市。 SQL 是称为 子查询 的特殊查询类型。 外部查询使用内部查询返回的数据。 内部查询以括号为界。
上面的查询显示了表中人口最多的城市。 SQL 是称为子查询的特殊查询类型。 外部查询使用内部查询返回的数据。 内部查询以括号为界。
```sql
mysql> SELECT Name, Population FROM city
......
......@@ -190,7 +190,7 @@ db.execute "INSERT INTO Cars VALUES(2,'Mercedes',57127)"
```
这两行将两辆车插入桌子。 请注意,默认情况下,我们处于 自动提交模式,其中对表的所有更改均立即生效。
这两行将两辆车插入。 请注意,默认情况下,我们处于 自动提交模式,其中对表的所有更改均立即生效。
```ruby
sqlite> .mode column
......
......@@ -511,7 +511,7 @@ Id Name Price
```
我们有一辆新车插入桌子
我们有一辆新车插入
## 数据来源
......
......@@ -307,7 +307,7 @@ DataTable dt = ds.Tables["Cars"];
```
将数据读入数据集后,将创建一个新的`DataTable`。 我们得到这张桌子
将数据读入数据集后,将创建一个新的`DataTable`。 我们得到这张
```cs
foreach (DataRow row in dt.Rows)
......
......@@ -552,7 +552,7 @@ Id Name Price
```
我们有一辆新车插入桌子
我们有一辆新车插入
## 数据来源
......
......@@ -292,7 +292,7 @@ Dim dt As DataTable = ds.Tables("Cars")
```
将数据读入数据集后,将创建一个新的`DataTable`。 我们得到这张桌子
将数据读入数据集后,将创建一个新的`DataTable`。 我们得到这张
```vb
For Each row As DataRow In dt.Rows
......
......@@ -375,7 +375,7 @@ mysql> SELECT YEAR(CURDATE()) AS 'Current year';
### 时间戳
时间戳 是一个字符序列,表示某个事件发生的日期和/或时间。 时间戳通常用于记录事件。 在 MySQL 中,我们有`TIMESTAMP`数据类型用于创建时间戳。 `TIMESTAMP`列可用于记录`INSERT``UPDATE`操作的日期和时间。 如果您自己没有给它一个值,它将自动设置为最近一次操作的日期和时间。 `TIMESTAMP`数据类型的范围为`1970-01-01 00:00:01` UTC 到`2038-01-19 03:14:07` UTC。
时间戳是一个字符序列,表示某个事件发生的日期和/或时间。 时间戳通常用于记录事件。 在 MySQL 中,我们有`TIMESTAMP`数据类型用于创建时间戳。 `TIMESTAMP`列可用于记录`INSERT``UPDATE`操作的日期和时间。 如果您自己没有给它一个值,它将自动设置为最近一次操作的日期和时间。 `TIMESTAMP`数据类型的范围为`1970-01-01 00:00:01` UTC 到`2038-01-19 03:14:07` UTC。
下表总结了支持的`TIMESTAMP`格式。
......
......@@ -304,7 +304,7 @@ pg_query($con, $query) or die("Cannot execute query: $query\n");
```
我们要把两辆车插入桌子
我们要把两辆车插入
```php
pg_close($con);
......@@ -423,7 +423,7 @@ testdb=# SELECT * FROM cars;
```
我们在桌子上放了一辆新车。
我们在上放了一辆新车。
## 数据来源
......
......@@ -167,7 +167,7 @@ $db->exec("INSERT INTO cars(name, price) VALUES('Mercedes', 57127)");
```
这两行将两辆车插入桌子
这两行将两辆车插入
```php
sqlite> .mode column
......
......@@ -237,7 +237,7 @@ cur.execute("INSERT INTO cars VALUES(2,'Mercedes',57127)")
```
这两行将两辆车插入桌子。 使用`with`关键字,更改将自动提交。 否则,我们将不得不手动提交它们。
这两行将两辆车插入。 使用`with`关键字,更改将自动提交。 否则,我们将不得不手动提交它们。
```py
sqlite> .mode column
......
......@@ -210,7 +210,7 @@ cur.execute("INSERT INTO cars(name, price) VALUES('Mercedes', 57127)")
```
这两行将两辆车插入桌子
这两行将两辆车插入
```py
$ psql -U postgres testdb
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册