ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:510.07KB ,
资源ID:4291719      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4291719.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Navicat与Mysql详解Word文档格式.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Navicat与Mysql详解Word文档格式.docx

1、交易表和交易与产品对应表是一对多的关系,即,一条交易对应多个产品。如图1.3.6、图1.3.7所示:图 1.3.6图 1.3.7交易表里有一条交易信息,交易ID(即transactionID)为20140818183847274,而交易与产品对应表里有两条数据,虽然它们的transactionProductAssignID不同,productItemID也不同,但他们的transactionID相同。也就是说,这两条交易与产品对应信息属于transactionID为20140818183847274的这笔交易。交易对应多个产品,一条交易与产品对应信息则对应一个具体产品(即交易与产品对应表、产品

2、明细表是一对一的关系)。而product(即产品表)则是,一条产品数据代表着产品,而这个产品又有很多种类、版本,所以,一个产品信息对应多个产品明细信息。说通俗点,就是,一个人去买东西,买了一次东西就是一笔交易(存在transaction表里面)。而这笔交易买了很多的产品(对应关系存在transactionProductAssign表里面)。这些产品可能有:肾6,肾5S,心相印面巾纸,知音面巾纸(具体产品存在productItem表里面)。其中,肾6、肾5S都属于苹果系列,心相印面巾纸、知音面巾纸都属于纸巾系列,所以苹果和纸巾便是一种产品的统称(存在productI表里面)。那为什么要这样设计呢

3、?为什么不把这些设计在一张表里面,这样省时省事。但是,如果你仔细研究,你就会发现,这里面暗藏玄机。首先就看这一点来说,如果所有的交易信息、产品信息全在一个表的一行数据里,第一不美观,第二让人很难看得下去。最重要的一点是,为了消除冗余。其次就直观这点来说,交易与产品对应,产品与产品版本对应,这样能让人一目了然,使整个数据库都连接了起来,便于以后的扩展与修改设计。这只是一个很小的例子,其实数据库设计有着很大的学问在里面。慢慢研究,你会发现,设计数据库其实是一项很伟大的工程!4.视图4.1什么是视图视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存

4、放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。4.2视图的好处4.2.1视图能简化用户操作视图机制使用户可以将注意力集中在所关心地数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,并且可以简化用户的的数据查询操作。例如,那些定义了若干张表连接的视图,就将表与表之间的连接操作对用户隐藏起来了。换句话说,用户所作的只是对一个虚表的简单查询, 而这个虚表是怎样得来的,用户无需了解。 4.2.2 视图使用户能以多种

5、角度看待同一数据。视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常必要的。4.2.3 视图对重构数据库提供了一定程度的逻辑独立性数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户 的应用程序不会受影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全的支持。在关许数据库中,数据库的重构造往往是不可避免的。重构数据库最常见的是将一个基本表“垂直”地分成多个基本表。例如:将学生关系Student(Sno,Sname,

6、Ssex,Sage,Sdept)分为SX(Sno,Sname,Sage)和SY(Sno,Ssex,Sdept)两个系。这时原表Student为SX表和SY表自然连接的结果。如果建立个视图StudentCREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept)AS SELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept FROM SX,SY WHERE SX.Sno=SY.Sno;这样尽管数据库的逻辑结构改变了(变为SX和SY两个表了),但应用程序不必修改,因为新建立的视图定义为用户原来的关系,使用户的外模式保持不变,用户

7、的应用程序通过视图仍然能够查找数据。当然,视图只能在一定程度上提供数据的逻辑独立,比如由于视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因为基本表构造的改变而改变。另外,值得注意的是,因为视图也是一种表,是虚拟表,不能与已有的表(视图)出现重名。并且将视图看成与表一样的东西,更加容易理解使用规则。4.3 对于视图的创建视图的创建与表差不多。右击视图,新建视图。图1.4.1你可在视图创建工具里选择一个之前创建的表,双击那个表,勾上你想要的数据,如图1.4.2图 1.4.2然后点保存。输入视图名后,便可看到你所创建的视图,如图1.4.3图 1.4.3第二部分 常见的一些MySQL语句与

8、索引1.写在开始一般来说,创建好新表之后,不能直接用Navicat手动输入数据。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。那如何对数据库里的数据进行增删查改呢?这时候,就需要用到MySQL语句了。你可以编写程序,拼写MySQL语句传到数据库进行数据操作,也可以直接运行命令行来操作。这里,我们只示范命令行的拼写MySQL语句。而对于数据较多的情况,我们则需要使用索引来优化我们的程序。2.MySQL语句 2.1 创建表CREATE TABLE emp ( id INTEGER UNSIGNED NOT NULL AUTO_INCREME

9、NT, name VARCHAR(45) NOT NULL, lastname VARCHAR(45), dept VARCHAR(45) DEFAULT sales, PRIMARY KEY ()ENGINE = InnoDB;)ENGINE = InnoDB; 上述语句在指定数据库中创建了一个名为“emp”的表。同时会有一个有主键约束的自增长(AUTO_INCREMENT)字段“id”,自增保证了每次插入新行的时候id都会加1,而主键 约束则用来检验重复值。字段“dept”被赋予了默认值(当没设定内容时为“sales”)。你可以在创建表的时候指定“引擎”。否则会使用默认引擎 (MyISAM

10、)。我们在这里使用“InnoDB”是因为它支持外键和事务处理。2.2 查询语句(查)在平常生活中,我们对于数据的查询是做得最多的一件事。所以我们这里主要讲解一下关于查询的语句。2.2.1单表查询语句SELECT*FROM表名WHERE(条件);*表示查询所有的字段,也可以只选择个别字段。这样就能将一行或几行符合条件的数据从具体的某个表里取出来。比如 SELECT * FROM transaction WHERE transactionID=20140818183847274。因为之前就在 transaction 里面加入的数据,所以改sql语句运行后的结果是:图 2.2.12.2.2选择列SE

11、LECT 字段名,字段名 FROM 表名这个很好理解,就不多做解释。如图:图 2.2.22.2.3 多表查询语句SELECT a.字段名,b.字段名 FROM 表名 a,表名 b图 2.2.4这样就相当于 将表ialarm的引用赋给a,transaction的引用赋给b,然后直接使用a. 和 b. 来去字段值2.2.4连表查询语句SELECT DISTINCT tra.transactionID,pri.productID,pri.productItemID,pro.productName,pri.productVersion,tra.transactionProductAssignID,pr

12、o.productCode,pri.price FROM Transaction,transactionProductAssign AS tra,product AS pro,productItem AS priWHERE pri.productID=pro.productID AND transaction.transactionID=tra.transactionID AND tra.productItemID=pri.productItemID AND tra.transactionID=20140901204513645 这里有一个关键词,AS。所谓连表,就是将两个或两个以上的表连在一

13、起,看做一个表来取数据,以提高效率。最后查询出来的数据会合成一个结果集返回。2.3插入语句(增) INSERTINTO 数据表(字段1,字段2,字段3)VALUES(值1,值2,值3INSERT )不指定具体字段名表示将按照数据表中字段的顺序,依次添加目标数据表FROM源数据表把源数据表的记录添加到目标数据表2.4 更新语句(改)UPDATE SET字段名=字段值条件表达式UPDATE数据表字段1=值1,字段2=值2字段n=值n2.5 删除语句(删)DELECTFROM 数据表条件表达式没有条件将删除数据表中所有记录2.6 插入更新语句(混合语句)INSERT INTO 表名 (字段名) VA

14、LUES(对应字段值)ON DUPLICATE KEY UPDATE name=default name, lastname=default last name;2.7添加主键ALTER TABLE TABLE_NAME DROP PRIMARY KEY, ADD PRIMARY KEY (COLUMN_NAME);2.8删除主键 DROP PRIMARY KEY;2.9添加索引2.9.1建表时创建索引 ( Name varchar(45), INT, INDEX(ID)2.9.2 为已经存在的表创建索引Create Index id_index on emp(ID);3. 索引3.1写在前面

15、索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有106条记录,DBMS的 页面大小为4K,并存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取104个页面,如果这 104个页面在磁盘上随机分布,需要进行104次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好 很多很多)。如果对之建立B-Tree索引,则只需要进行log100(106)=3次页面读取,最坏情况下耗时30ms。这就是索引带来的效果,很多 时候,当你的应用程序进行SQL查询速

16、度很慢时,应该想想是否可以建索引。索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。3.2 索引的简单使用假如我们创建了一个 mytable表:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin。在查找username=admin的记录 SELECT * FROM mytable WHERE username=admin时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记

17、录。相反,MySQL会扫描 所有记录,即要查询10000条记录。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。MySQL索引类型包括:3.2.1普通索引这是最基本的索引,它没有任何限制。它有以下几种创建方式:创建索引CREATE INDEX indexName ON mytable(username(length); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。修改表结构ALTER mytable ADD INDEX in

18、dexName ON (username(length) 创建表的时候直接指定 username VARCHAR(16) NOT NULL, INDEX indexName (username(length)删除索引的语法:DROP INDEX indexName ON mytable;3.2.2唯一索引它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。CREATE UNIQUE INDEX indexName ON mytable(username(length) ALTER mytable ADD UNIQUE indexName

19、ON (username(length) UNIQUE indexName (username(length)3.2.3主键索引它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引: PRIMARY KEY(ID)当然也可以用 ALTER 命令。记住:一个表只能有一个主键。3.2.4组合索引为了形象地对比单列索引和组合索引,为表添加多个字段: city VARCHAR(50) NOT NULL, age INT NOT NULL为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:ALTER TABLE mytable

20、ADD INDEX name_city_age (name(10),city,age); 建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10, 这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:usernname,city,age us

21、ernname,city usernname 为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都 会用到该组合索引,下面的几个SQL就会用到这个组合索引:SELECT * FROM mytable WHREE username= AND city=郑州 SELECT * FROM mytable WHREE username= 而下面几个则不会用到:SELECT * FROM mytable WHREE age=20 AND city= SELECT * FROM mytable WHRE

22、E city=3.2.5建立索引的时机到这里我们已经学会了建立索引,那么我们需要在什么情况下建立索引呢?一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此, 因为MySQL只对,=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city=郑州 此时就需要对city和age建立索引,由于mytable表的userame也出现在了JOIN子句中,也有对它建立索引的必要。刚才提到只有某些时

23、候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。例如下句会使用索引:SELECT * FROM mytable WHERE username likeadmin% 而下句就不会使用:SELECT * FROM mytable WHEREt Name like%admin 因此,在使用LIKE时应注意以上的区别。3.2.6索引的不足之处上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还

24、要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。3.2.7使用索引的注意事项使用索引时,有以下一些技巧和注意事项:索引不会包含有NULL值的列只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。使用短索引对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR

25、(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。索引列排序MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。like语句操作一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。不要在列上进行运算select * from users where YEAR(adddate)2007; 将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成select * from users where adddate2007-01-01;不使用NOT IN和操作以上,就对其中MySQL索引类型进行了介绍。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2