Mysql是目前互联网使用最广的关系数据库,关系数据库的本质是将问题分解为多个分类然后通过关系来查询。 一个经典的问题是用户借书,三张表,一个用户,一个书,一个借书的关系表。当需要查询某个用户借书情况或者是书被那些人借了,就用关系查询来实现。
关系数据库范式
来自英文Normal form,简称NF。要想设计—个好的关系,必须使关系满足一定的约束条件,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update) *** 作异常。总共有六种范式:第一范式(1NF)、第二范式(2NF)、 第三范式 (3NF)、巴斯-科德范式(BCNF)、 第四范式 (4NF)和 第五范式 (5NF,又称完美范式)。
1NF是指数据库表的每一列都是不可分割的原子数据项。2NF必须满足1NF,要求数据库表中的每行记录必须可以被唯一地区分。3NF在2NF基础上,任何非主 属性 不依赖于其它非主属性(在2NF基础上消除传递依赖)。BCNF是在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖), 满足BCNF不再会有任何由于函数依赖导致的异常,但是我们还可能会遇到由于多值依赖导致的异常。4NF的定义很简单:已经是BC范式,并且不包含多值依赖关系。5NF处理的是无损连接问题,这个范式基本没有实际意义,因为无损连接很少出现,而且难以察觉。而域键范式试图定义一个终极范式,该范式考虑所有的依赖和约束类型,但是实用价值也是最小的,只存在理论研究中。
Catalog和Schema
是数据库对象命名空间中的层次,主要用来解决命名冲突的问题。从概念上说,一个数据库系统包含多个Catalog,每个Catalog又包含多个Schema,而每个Schema又包含多个数据库对象(表、视图、字段等)。但是Mysql的数据库名就是Schema,不支持Catalog。
Mysql的数据库引擎主要有两种MyISAM和InnoDB,MyISAM支持全文检索,InnoDB支持事务。
SQL中的通配符‘%’代表任意字符出现任意次数。‘_’代表任意字符出现一次。SQL与正则表达式结合查询一般用在WHERE table_name REGEXP '^12.34'。子查询是从里到外执行。
数据库联结(join)涉及到外键,外键是指一个表的列是另一个表的主键,那么它就是外键。笛卡尔积联结(不指定联结条件时)生成的记录条目是单纯的第一个表的行乘以第二个表的列数。用得最多的是等值联结也叫内部联结。
高级联结还有自连接,是指查询中的两张表是同一张表,它通常作为外部语句用来代替从相同表中检索数据时使用的子查询。自然联结使每个列只返回一次。外部联结是指联结包含了那些在相关表中没有关联行的行。例如列出所有产品及其订购数量,包括没有人订购的产品。LEFT OUTER JOIN指选择左边表的所有行。
组合查询是指采用UNION等将两个查询结果取并集。
视图是查看存储在别处的数据的一种工具,它本身并不包含数据,因此表的数据修改了,视图返回的数据也将随之修改,因此如果使用了复杂或嵌套视图会对性能有较大的影响。视图的作用之一是隐藏复杂的SQL通常会涉及到联结查询。
存储过程类似于批处理,包含了一条或多条SQL语句。语法:
CREATE PROCEDURE name()
BEGIN
SQL
END
-------------------------
CALL name()//来调用存储过程
游标有DECLARE定义,游标与存储过程是绑定的,存储过程处理完成,游标就会消失。游标被打开后可以使用FETCH语句访问每一行。
触发器是在某个时间发生时自动执行某条SQL语句。语法:
CREATE TRIGGER name AFTER INSERT ON talbe_name FOR EACH ROW
事务处理可以维护数据库的完整性,保证批量的 *** 作要么完全执行,要么完全不执行。包括事务、回退、提交、保留点几个关键术语。ROLLBACK只能在一个事务处理内使用。他不能回退CREATE和DROP *** 作。使用COMMIT保证事务提交。复杂的事务处理需要部分提交或回退,因此我们需要使用保留点SAVEPOINT。可以使用ROLLBACK TO savepoint_name。保留点越多越好。保留点在事务执行完成后自动释放。
象要引入命名空间system.data.sqlclient其实并非只有这么简单,引用命名空间(实际是引用该命名空间下的类库,使得在当前工程中可以引用或者说使用该类库中的类)有两种方式:
一是在公共窗体类的顶端,就是类的上面声明imports system.data.sqlclient
二是在菜单栏中选择"项目"-->"添加引用",在d出的对话框中选择system.data.sqlclient
选择以后,表面上没有什么变化,双击解决方案资源管理器中的my project,选择"引用"选项卡可以看到,对system.data.sqlclient命名空间的引用已经添加进工程了.
当我们新建一个windows应用程序项目时默认引用如下命名空间:
system
system.data
system.deployment
system.drawing
system.windows.forms
system.xml
这时如果使用sqlconnection类,如:
dim a as new sqlconnection
系统会提示"未定义类型".
由于当前工程已经引入了system.data命名空间,所以我们只要明确一下该类所处的具体位置就可以了,如:
dim a as new sqlclient.sqlconnection 或
dim a as new system.data.sqlclient.sqlconnection
你也可以使用imports关键字引用system.data.sqlclient命名空间,如:
imports system.data.sqlclient
然后你就可以象如下这样声明sqlconnection对象
dim a as new sqlconnection
由于新建项目的不同,系统默认引入的类库或者说使用的命名空间也会不同,所以,在开始数据库编程之前你应当了解当前工程引用了哪些命名空间.
如果你的项目中没有引用system.data,而你使用imports关键字这样引用
imports system.data
imports system.data.sqlclient
会出现"指定空间不包括任何公共成员或类型....."的错误
如果你的项目中既引用了system.data又引用了system.data.sqlclient命名空间,当然大多数情况都是由于误 *** 作引起的,你会发现,无论你是否使用imports关键字引用
imports system.data
imports system.data.sqlclient
在使用以下任何一条代码时
dim a as new sqlconnection
dim a as new sqlclient.sqlconnection
dim a as new system.data.sqlclient.sqlconnection
都会出现sqlconnection在命名空间system.data.sqlclient中不明确的错误.
这时你必须双击my porject,在"引用"选项卡上将对命名空间system.data.sqlclient的引用移除.
出现这种状况,据我判断可能是重复引用造成的,但是使用imports关键字引用却不会出现重复引用的问题.(我就是遇到这个问题,困扰了2个多小时才解决)
如果你的项目中只引用了system.data.sqlclient命名空间而未引用system.data命名空间,则会出现要求必须引用基类的错误提示.
以上是我对引用的一些理解,以此类推,在应用程序的开发中使用系统提供的类库应当会遵循以上的使用规则,
出现这类问题,多试试就可以了,另外如果你声明一个类和系统提供的类重名,可能也会出现重复引用的问题.希望我的这一点点经验能让其他初学者少走一点弯路.
另外,站长团上有产品团购,便宜有保证
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)