database复习===关系代数基本运算

来源:互联网 发布:手机c语言编辑器中文 编辑:程序博客网 时间:2024/05/22 06:44
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将使用表锁!"
而且这里的索引无论是何种索引都可以,唯一索引,主键索引,普通索引都行。
原创粉丝点击