database复习===关系代数基本运算
2012-09-03 10:51
295 查看
1。选择运算,那些符号相当难打出来,还是算了。选择(select)运算选出满足给定谓词的元组。取行操作
2。投影运算(project)。返回作为参数的关系的某些属性。由于关系是一个集合,所以所有重复的行均被剔除。取列操作
3。并运算(union)。
4。集合差运算(set-difference)
5。地卡尔积运算
Union ,unionall 相当于交
intersect,intersectall 相当于并
except,except all 相当于减
加了all之后能保留重复相当于交
当然这些可以用 嵌套查询也可解决,in ,not in。
关键词 some,至少比某一个要大,>some
select branch_name from branch whereassets>some(select assets from branch wherebranch_city='Brooklyn')找出那些至少比branch中位于brooklyn的assets其中一个要大的branch_name.
exists,not exists
unique,not unique.测试是否有重复元素
foreign key(branch_name) references branch one deletecascade,
意为这张表的banch_name依赖于branch这张表,如果branch删除了某个banch_name,则现在这张表也会做联级删除。
连接池的概念。
php一般没有连接池这个概念。借助apache的进程池,所以一般就不实现连接池。不过sqlrealy
myisam
说明当数据表有一个读锁时,其它进程的查询操作可以马上执行,但更新操作需等待读锁释放后才会执行。
说明当数据表有一个写锁时,其它进程的读写操作都需等待读锁释放后才会执行。
"
在以下情况下,表锁定优先于页级或行级锁定:
· 表的大部分语句用于读取。
· 对严格的关键字进行读取和更新,你可以更新或删除可以用单一的读取的关键字来提取的一行:
· UPDATE tbl_name SET column=value WHEREunique_key_col=key_value;
· DELETE FROM tbl_name WHERE unique_key_col=key_value;
· SELECT 结合并行的INSERT语句,并且只有很少的UPDATE或DELETE语句。
· 在整个表上有许多扫描或GROUP BY操作,没有任何写操作。
"
竟然发现,运行update book set name='abc' wherenum=11;
后,有结果出现了,说明没有被锁住,
这是为什么呢,难道
2 行数据和
5 行数据,对
MySQL 来说,会产生锁行和锁表两种情况吗。经过跟网友讨论和翻阅资料,仔细分析后发现:
在以上实验数据作为测试数据的情况下,由于num
字段重复率太高,只有
2 个值,分别是
11 和
12. 而数据量相对于这两个值来说却是比较大的,是10
条,
5 倍的关系。
那么
mysql 在解释
sql 的时候,会忽略索引,因为它的优化器发现:即使使用了索引,还是要做全表扫描,故而放弃了索引,也就没有使用行锁,却使用了表锁。简单的讲,就是
MYSQL
无视了你的索引,它觉得与其行锁,还不如直接表锁,毕竟它觉得表锁所花的代价比行锁来的小。以上问题即便你使用了force index
强制索引,结果还是一样,永远都是表锁。
"InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!"
而且这里的索引无论是何种索引都可以,唯一索引,主键索引,普通索引都行。
2。投影运算(project)。返回作为参数的关系的某些属性。由于关系是一个集合,所以所有重复的行均被剔除。取列操作
3。并运算(union)。
4。集合差运算(set-difference)
5。地卡尔积运算
Union ,unionall 相当于交
intersect,intersectall 相当于并
except,except all 相当于减
加了all之后能保留重复相当于交
当然这些可以用 嵌套查询也可解决,in ,not in。
关键词 some,至少比某一个要大,>some
select branch_name from branch whereassets>some(select assets from branch wherebranch_city='Brooklyn')找出那些至少比branch中位于brooklyn的assets其中一个要大的branch_name.
exists,not exists
unique,not unique.测试是否有重复元素
foreign key(branch_name) references branch one deletecascade,
意为这张表的banch_name依赖于branch这张表,如果branch删除了某个banch_name,则现在这张表也会做联级删除。
连接池的概念。
php一般没有连接池这个概念。借助apache的进程池,所以一般就不实现连接池。不过sqlrealy
myisam
说明当数据表有一个读锁时,其它进程的查询操作可以马上执行,但更新操作需等待读锁释放后才会执行。
说明当数据表有一个写锁时,其它进程的读写操作都需等待读锁释放后才会执行。
"
在以下情况下,表锁定优先于页级或行级锁定:
· 表的大部分语句用于读取。
· 对严格的关键字进行读取和更新,你可以更新或删除可以用单一的读取的关键字来提取的一行:
· UPDATE tbl_name SET column=value WHEREunique_key_col=key_value;
· DELETE FROM tbl_name WHERE unique_key_col=key_value;
· SELECT 结合并行的INSERT语句,并且只有很少的UPDATE或DELETE语句。
· 在整个表上有许多扫描或GROUP BY操作,没有任何写操作。
"
竟然发现,运行update book set name='abc' wherenum=11;
后,有结果出现了,说明没有被锁住,
这是为什么呢,难道
2 行数据和
5 行数据,对
MySQL 来说,会产生锁行和锁表两种情况吗。经过跟网友讨论和翻阅资料,仔细分析后发现:
在以上实验数据作为测试数据的情况下,由于num
字段重复率太高,只有
2 个值,分别是
11 和
12. 而数据量相对于这两个值来说却是比较大的,是10
条,
5 倍的关系。
那么
mysql 在解释
sql 的时候,会忽略索引,因为它的优化器发现:即使使用了索引,还是要做全表扫描,故而放弃了索引,也就没有使用行锁,却使用了表锁。简单的讲,就是
MYSQL
无视了你的索引,它觉得与其行锁,还不如直接表锁,毕竟它觉得表锁所花的代价比行锁来的小。以上问题即便你使用了force index
强制索引,结果还是一样,永远都是表锁。
"InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!"
而且这里的索引无论是何种索引都可以,唯一索引,主键索引,普通索引都行。
相关文章推荐
- 数据库---SQL双重否定、函数依赖、关系代数的基本运算
- 关系代数的基本运算
- 【数据库】关系代数基本运算
- 关系代数――基本运算(1)
- 关于关系代数中除法的理解以及如何用基本运算表示除法
- 关系代数运算基本实现
- 【数据库】关系代数基本运算
- 【数据库】关系代数基本运算
- 数据库查询的基本运算,关系代数
- 关系代数基本运算
- 数据库中关系代数中的关系运算
- 关系代数运算
- 数据库集合运算与关系代数
- 基于MapReduce的关系代数运算(1)
- java基础复习1--基本数据类型、运算符号、表达式语句与程序结构
- 3.2关系代数:传统的集合运算和专门的关系运算
- 关系代数中的除法运算(转载)
- 01概率论与数理统计之基本概念(随机实验、样本空间、随机事件、事件运算:和、积、差、补;事件的关系:包含、互斥、对立)及概率
- Essential Notes on Database(I) Relational Algebra 关系代数
- 线性代数复习-矩阵及其运算