收藏 分享(赏)

MySQL必知必会.doc

上传人:HR专家 文档编号:7485179 上传时间:2019-05-19 格式:DOC 页数:12 大小:45.50KB
下载 相关 举报
MySQL必知必会.doc_第1页
第1页 / 共12页
MySQL必知必会.doc_第2页
第2页 / 共12页
MySQL必知必会.doc_第3页
第3页 / 共12页
MySQL必知必会.doc_第4页
第4页 / 共12页
MySQL必知必会.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、MySQL 必知必会了解 SQL数据库基础数据库(Database):保存有组织的数据的容器(通常是一个文件或一组文件) ,是通过DBMS 创建和操纵的容器。表(table):某种特定类型数据的结构化清单。表名具有唯一性。模式(schema):关于数据库和表的布局及特性的信息。列(column ):表中的一个字段。所有表都是由一个或多个列组成的。分解数据:正确地数据分解为多个列极为重要。这样才有可能利用特定的列对数据进行排序和过滤。数据类型(datatype):所容许的数据的类型。每个表列都有相应的数据类型,它限制或容许该列存储的数据。行(row ):表中的一个记录。主键(primary ke

2、y ):一列(或一组列) ,其值能够唯一区分表中的每个行。 (应该总是定义主键,主键列不允许 NULL 值)主键的好习惯:不更新主键列中的值;不重用主键列的值;不在主键列中使用可能会更改的值。什么是 SQLSQL(Structured Query Language):结构化查询语言。MySQL 简介2.1 什么是 MySQLAMySQL 是一种 DBMS,即它是一种数据库软件。种类:一类基于共享文件系统的DBMS,另一类基于客户机-服务器的 DBMS。B客户机-服务器软件:服务器部分是负责所有数据访问和处理的一个软件,它运行在称为数据库服务器的计算机上。客户机是与用户打交道的软件(所有请求或更

3、改来自运行客户机软件的计算机) 。C服务器软件为 MySQL DBMS,客户机可以是 MySQL 提供的工具,脚本语言,web 开发语言,程序设计语言。2.2 MySQL 工具(已经集成到 MySQL Workbench)AMySQL 命令实用程序BMySQL Administrator:用于简化 MySQL 服务器的管理。CMySQL Query Browser:用来编写和执行 MySQL 命令。使用 MySQL3.1 连接A如何连接和登录到 MySQL,为了连接到 MySQL,需要一下信息:主机名(计算机名)如果连接到本地 MySQL 服务器,为 localhost;端口(使用默认端口 3

4、306 之外的端口);一个合法的用户名;用户口令(如果需要的话) 。3.2 选择数据库A在执行任何数据库操作前,需要选择一个数据。为此,可使用 USE 关键字。B关键字(key word):作为 MySQL 语言组成部分的一个保留字。C (USE crashcource;)必须先使用 USE 打开数据库,才能读取其中的数据。3.3 了解数据库和表A (SHOW DATABASES;)数据库、表、列、用户、权限等信息被存储在数据库和表中。B不过,内部的表一般不直接访问。 (可用 SHOW 命令来显示这些信息,MySQL 从内部表中提取这些信息。 )SHOW TABLES; SHOW COLUMN

5、S FROM customers;C什么是自动变量?某些表列需要唯一值。在每个行添加到表中时,MySQL 可以自动地为每个行分配下一个可用编号,不用在添加一行时手动分配唯一值。DDESCRIBE 语句:MySQL 支持用 DESCRIBE 作为 SHOW COLUMNS FROM 的一种快捷方式。4.1 SELECT 语句ASELECT 语句的用途是从一个或多个表中检索信息。4.2 检索单个列ASELECT prod_name FROM products;B未排序数据:如果没有明确排序查询结果,则返回的数据的顺序没有特殊意义。C结束 SQL 语句:多条 SQL 语句必须以分号分隔。如果使用的是

6、 MySQL 命令行,必须加上分号来结束 SQL 语句。DSQL 语句和大小写:SQL 语句不区分大小写,但是一般对所有 SQL 关键字使用大写,而对所有列和表名使用小写。E使用空格:在处理 SQL 语句时,其中所有空格都被忽略。4.3 检索多个列A当心逗号:在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。SELECT prod_id, prod_name, prod_price FROM products;B数据表示:SQL 语句一般返回原始的,无格式的数据。数据的格式化是一个表示问题,而不是一个检索问题。因此,表示(对齐和显示上面的价格值,用货币符号和逗号表示其金额)一般在

7、现实该数据的应用程序中规定。4.4 检索所有列ASELECT * FROM products;B使用通配符:一般,除非你确定需要表中的每个列,否则最好不要使用*通配符。检索不需要的列通常会降低检索和应用程序的性能。C检索未知列:由于不明确指定列名,所以能检索出名字未知的列。4.5 检索不同行ASELECT vend_id FROM products;BSELECT DISTINCT vend_id FROM products; 关键字 DISTINCT 指示 MySQL 只返回不同的值(唯一) 。CDISTINCT 关键字应用于所有列而不仅是前置它的列。4.6 限制结果ASELECT prod

8、_name FROM products LIMIT x,y; x 和 y 为数字,第一个为开始位置,第二个数字为要检索的行数。B检索出来的第一行为行 0 而不是行 1。C在行数不够时,MySQL 将只返回它能返回的那么多行。DMySQL 5 的 LIMIT 语法4.7 使用完全限定的表名A使用完全限定的名字来引用列(同时使用表名和列字)BSELECT products.prod_name FROM products;CSELECT products.prod_name FROM crashcource.products;排序检索数据5.1 排序数据A关系数据库设计理论认为:如果不明确规定排序顺

9、序,则不应该假定检索出的数据的顺序有意义。B子句(clause)SQL 语句由子句构成,一个子句通常由一个关键字和所提供的数据组成。CSELECT prod_name FROM products ORDER BY prod_name;D通常,ORDER BY 子句使用的列将是为显示所选择的列。但是,用非检索的列排序数据是完全合法的。5.2 按多个列排序ASELECT prod_id, prod_price, prod_nameFROM productsORDER BY prod_price, prod_name;5.3 指定排序方向A默认是升序排序,为了进行降序排序,必须指定 DESC 关键字

10、。DESC 关键字只应用到直接位于其后面的列名。如果想在多个列上进行降序排序,必须对每个列指定 DESC。BSELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;C区分大小写和排序顺序在字典排序顺序中,A 被视为与 a 相同,这是 MySQL 的默认行为。不过有需要可以改变数据库的设置。D使用 ORDER BY 和 LIMIT 的组合,能够找出一个列中最高或最低的值。SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;

11、过滤数据6.1 使用 WHERE 子句A只检索所需数据需要指定搜索条件( search criteria)或过滤条件(filter condition)BSELECT prod_name, prod_price FROM products WHERE prod_price = 2.5;CSQL 过滤与应用过滤数据也可以在应用层过滤。但是,这种实现并不令人满意。DWHERE 子句排在 ORDER BY 之前。6.2 WHERE 子句操作符ASELECT prod_name, prod_price FROM products WHERE prod_name = fuses;MySQL在执行匹配时默

12、认不区分大小写。B何时使用引号:单引号用来限定字符串的。如果将值与串类型的列进行比较,则需要限定引号,用来跟数值列进行比较的值不用引号。C范围值检查:为了检查某个范围的值,可使用 BETWEEN 操作符。SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;DNULL 无值( no value)它与字段包含 0,空字符串或仅仅包含空格不同。SELECT prod_name FROM products WHERE prod_price IS NULL;ENULL 与不匹配,在过滤数据时,一定要验证

13、返回数据中确实给出了被过滤列具有NULL 的行。数据过滤7.1 组合 WHERE 子句A为了进行更强的过滤控制, MySQL 允许给出多个 WHERE 子句,以 AND 子句的方式或 OR 子句的方式使用。B操作符(operator )用来联结或改变 WHERE 子句中的子句的关键字,也称为逻辑操作符(logical operator)CAND 用在 WHERE 子句中的关键字,用来指示检索满足所有给定条件的行。OR 它指示 MySQL 检索匹配任一条件的行。D在 WHERE 子句中使用圆括号任何时候使用具有 AND 和 OR 操作符的 WHERE 子句,都应该使用圆括号明确地分组操作符。7.

14、2 IN 操作符AIN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配,IN 取合法值的由逗号分隔清单,全都括在圆括号中。BIN 的最大优点是可以包含其他 SELECT 语句,使得能够更动态地建立 WHERE 子句。SELECT prod_name,prod_priceFROM productsWHERE vend_id IN (1002,1003)ORDER BY prod_name;7.3 NOTAWHERE 子句中用来否定后跟条件的关键字。 (NOT IN)BMySQL 中的 NOT MySQL 支持使用 NOT 对 IN,BETWEEN 和 EXISTS 子句取反,这与多数其他

15、 DBMS 允许使用 NOT 对各种条件取反有很大的差别。SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name;用通配符进行过滤8.1 LIKE 操作符A利用通配符可创建比较特定数据的搜索模式。B通配符(wildcard)用来匹配值的一部分的特殊字符。C搜索模式(search pattern)由字面值,通配符或两者组合构成的搜索条件。DLIKE 指示 MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。E谓词:操作符在它作为谓词(predic

16、ate)时,不是操作符,从技术上说,LIKE 是谓词而不是操作符。F百分号(%)通配符:在搜索串中,%表示任何字符出现任意次数。以下例子使用了搜索模式jet% :G区分大小写:根据 MySQL 的配置方式,搜索可以是区分大小写的。H注意尾空格:尾空格可能会干扰通配符匹配。注意 NULL:虽然似乎通配符可以匹配任何东西,但是有一个例外,即 NULL。I下划线(_)通配符:下划线只匹配单个字符而不是多个字符,不能多也不能少。8.2 使用通配符的技巧A使用通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。B、不要多度使用通配符。在确实需要使用通配符时,除非绝对有必要,否则不要把他们用在搜索模式

17、的开始处。仔细注意通配符的位置。用正则表达式进行搜索9.1 正则表达式介绍A正则表达式是用来匹配文本的特殊的串(字符集合) 。所有种类的程序设计语言,文本编辑器,操作系统等都支持正则表达式。9.2 使用 MySQL 正则表达式AMySQL 仅仅支持多数正则表达式实现的一个很小的子集。BLIKE 匹配整个列值。如果被匹配的文本仅在列值中出现,LIKE 将不会找到它,相应的行也不被返回(除非使用通配符) 。而 REGEXP 在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP 将会找到它,相应的行将被返回。看下面的例子:C匹配不区分大小写 MySQL 中的正则表达式匹配不区分大小写,为区分

18、大小写可使用BINARY 关键字,如 WHERE prod_name REGEXP BINARY JetPack .000。D进行 OR 匹配:为搜索两个串之一,使用| ,如下所示:E匹配几个字符之一:匹配任何单一字符。如下所示:F可使用-来定义一个范围。如1-9,a-b。.在正则表达式中匹配任意一个字符。G为了匹配特殊字符,必须用 为前导,例如-,. 等。这种处理即转义(escaping) 。为了更方便工作,可以使用预定义的字符集,称为字符类(character class) 。正则表达式重复元字符:J定位符:K使 REGEXP 起类似 LIKE 的作用,它们的区别在于 LIKE 匹配整个串

19、而 REGEXP 匹配子串。利用定位符,通过用开始每个表达式,用$结束每个表达式。L简单的正则表达式测试:可以在不使用数据库表的情况下用 SELECT 来测试正则表达式。REGEXP 检查总是返回 0 或 1(匹配) 。创建计算字段10.1 计算字段A存储在数据库表中的数据一般不是应用程序所需要的格式。我们需要直接从数据库中检索出转换,计算或格式化过的数据;而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化。B字段(field ):基本上和列(COLUMN)的意思相同,经常互换使用,不过数据库列一般成为列,而术语字段通常用在计算字段的连接上。C客户机与服务器的格式10.2 拼接字段

20、A拼接(concatenate )将值联结到一起构成单个值。 (把两个列拼接起来)BMySQL 的不同之处:多数 DBMS 使用+或| 来实现拼接,而 MySQL 使用 Concat()函数来实现。CTrim 函数:MySQL 除了支持 RTrim()(去掉串右边的空格) ,还支持 LTrim()及 Trim()。D使用别名(alias) ,别名是一个字段或值的替换名。别名用 AS 关键字赋予。任何客户机应用都可以按名引用这个列。别名也可称导出列(derived COLUMN) 。10.3 执行算术计算A如何测试计算:SELECT 提供了测试和试验函数与计算的一个很好的办法。使用数据处理函数1

21、1.1 函数A函数没有 SQL 的可移植性强:能运行在多个系统上的代码称为可移植的(portable) 。如果你使用函数,应该保证做好代码注释。B用于处理文本串的文本函数。用于在数值数据上进行算术操作的数值函数。用于处理日期和时间值并从这些值中提取特定成分的日期和时间函数。返回 DBMS 正使用的特殊信息的系统函数。SOUNDEX 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。MySQL 使用的日期格式:yyyy-mm-dd,应该总是使用 4 位数字的年份。汇总数据12.1 聚集函数A确定表中行数,获得表中行组的和,找出表列的最大值,最小值和平均值。要的是汇总信息,而不是表中数据

22、。聚集函数(aggregate function):运行在行组上,计算和返回单个值的函数。C只用于单个列,AVG() 只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。AVG() 函数忽略列值为 NULL 的行。12.2 聚集不同值A对所有的行执行计算,指定 ALL 参数或不给参数(因为 ALL 是默认行为) 。只包含不同的值,指定 DISTINCT 参数。 DISTINCT 必须使用列名,不能用于计算或表达式。12.3 组合聚集函数分组数据如何分组数据,以便能汇总表内容的子集。13.1 数据分组目前为止的所有计算都是在表的所有数据或匹配特定的 WHERE 子句的数据上进行的。13

23、.2 创建分组GROUP BY 子句指示 MySQL 分组数据,然后对每个组而不是整个结果集进行聚集。GROUP BY 子句可以包含任意数目的列。除了聚集计算语句外,SELECT 语句中的每个列都必须在 GROUP BY 子句中给出。如果在 GROUP BY 子句中嵌套了分组,数据将在最后规定的分组上进行汇总。在子句中列出的每个列都必须是检索列或有效的表达式。如果分组中具有 NULL 值,则 NULL 将作为一个分组返回。GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。使用 WITH ROLLUP 关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)

24、的值。13.3 过滤分组AWHERE 过滤指定的是行而不是分组。WHERE 没有分组的概念。我们可以使用HAVING 子句过滤分组。HAVING 支持所有 WHERE 操作符。 WHERE 在数据分组前进行过滤,HAVING 在数据分组后进行分组。13.4 分组和排序ORDER BY 与 GROUP BY 的区别:C不要忘记 ORDER BY :一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句。这是保证数据正确排序的唯一方法。13.5 SELECT 子句顺序使用子查询14.1 子查询AMySQL 引入了对子查询的支持。SELECT 语句是 SQL 的查询。迄今为之我们所

25、看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索数据的单条语句。B子查询(subquery) ,即嵌套在其他查询中的查询。查询(query):任何 SQL 语句都是查询,但此术语一般指 SELECT 语句。14.2 利用子查询进行过滤A格式化 SQL:把子查询分解为多行并且适当地进行缩进,能极大地简化子查询的使用。B子查询和性能14.3 作为计算字段使用子查询A相关子查询(correlated subquery)涉及外部查询的子查询。如果以上查询不使用完全限定的列名:C,这里给出的样例代码运行良好,但它并不是解决这种数据检索的最有效的方法。D,逐渐增加子查询来建立查询:用子查

26、询建立(和测试)查询的最可靠的方法是逐渐进行。联结表15.1 联结(join)A在数据检索查询的执行中联结( join)表。B关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系(relational) )互相关联。C外键(foreign key ):外键为某个表中的一列,它包含另外一个表的主键值,定义了两个表之间的关系。D可伸缩性(scale):能够适应不断增加的工作量而不失败。E为什么要使用联结:如果数据存储在多个表中怎样用单条 SELECT 语句检索出数据。F维护引用完整性:通过在表的定义中指定主键和外键来实现的。15.2 创建联结笛卡尔积(

27、cartesian product ):由没有联结条件的表关系返回的结果为笛卡尔积。不要忘了 WHERE 子句:应该保证所有联结都有 WHERE 子句,否则 MySQL 将返回比想要的数据多得多的数据。叉联结:叉联结(cross join)的笛卡尔积的联结类型。目前为之所用的联结称为内部联结或等值联结(equijoin) ,它基于两个表之间的相等测试。SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;(ANSI SQL 规范

28、首选 INNER JOIN 语法)联结多个表:性能考虑MySQL 在运行时关联指定的每个表以处理联结,这种处理可能是非常耗费资源的。多做实验:为执行任一给定的 SQL 操作,一般存在不止一种方法。很少有绝对正确或绝对错误的方法。性能可能会受操作类型,表中数据量,是否存在索引或键以及其他一些条件的影响。创建高级联结16.1 使用表别名A别名除了用于列名和计算字段外, SQL 还允许给表名起别名,这样做主要是为了:缩短 SQL 语句;允许在单条 SELECT 语句中多次使用相同的表。B表别名只在查询执行中使用,与列别名不一样,表别名不返回到客户机。16.2 使用不同类型的联结A用自联结而不用子查询

29、自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。自然联结排除多次出现,使每个列只返回一次。它是这样一种联结,其中你只能选择哪些唯一的列。这一般是通过对表使用通配符(SELECT *) ,对所有其他表的列使用明确的子集来完成的。外部联结:联结包含了哪些在相关表中没有关联行的行。例如,列出所有产品以及订购数量,包括没有人订购的产品。LEFT OUTER JOIN 从 FROM 子句的左边表中选择所有行。RIGHT OUTER JOIN 则反之没有*=操作符 MySQL 不支持简化字符*= 和=*的使用,这两种操作符在其他 DBMS 中是很流行的。外部联结的类型:左外部联结和右外

30、部联结。16.3 使用带聚集函数的联结16.2 使用联结和联结条件A注意所使用的联结类型。一般我们使用内部联结,但使用外部联结也是有效的。B保证使用正确的联结条件,否则将返回不正确的数据。C应该总是提供联结条件,否则会得出笛卡尔积。D在一个联结中可以包含多个表,设置对于每个联结可以采用不同的联结类型。虽然这样做是合法的,一般也很有用,但应该在一起测试它们前,分别测试每个联结。组合查询17.1 组合查询AMySQL 允许执行多个查询(多条 SELECT 语句) ,并将结果作为单个查询结果集返回。这些组合查询通常称为并(union )或复合查询(compound query) 。B需要使用组合查询

31、的两种基本情况:在单个查询中从不同的表返回类似结构的数据。对单个表执行多个查询,按单个查询返回数据。17.2 创建组合查询AUNION 操作符:利用 UNION,可给出多条 SELECT 语句,将它们的结果组合成单个结果集。BUNION 规则:UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字 UNION 分隔。UNION 中的每个查询必须包含相同的列,表达式或聚集函数。列数据类型必须兼容。C包含或取消重复的行:使用 UNION ALL,MySQL 不取消重复的行。D对组合查询结果排序:在用 UNION 组合查询时,只能使用一条 ORDER BY。E组合不同的表:使用

32、 UNION 的组合查询可以应用不同的表。全文本搜索18.1 理解全文本搜索A并非所有引擎都支持全文本搜索: MySQL 支持几种基本的数据库引擎。MyISAM 支持全文本搜索,而 InnoDB 不支持全文本搜索。18.2 使用全文本搜索A为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引。B不要在导入数据时使用 FULLTEXT:如果正在导入数据到一个新表,此时不应该启用FULLTEXT 索引。C使用完整的 Match()说明:传递给 Match()的值必须与 FULLTEXT()定义中的相同。如果指定多个列,则必须列出它们(而且次序正确)D搜索不区分大小写:除非使用

33、 BINARY 方式,否则全文本搜索不区分大小写。E使用查询扩展:查询扩展用来设法放宽所返回的全文本搜索结果的范围。利用查询扩展,能找出可能相关的结果,即使它们并不精确包含所查找的词。F行越多越好:表中的行越多,使用查询扩展返回的结果越好。G布尔文本搜索(boolean mode):即使没有 FULLTEXT 索引也可以使用。但这是一种非常缓慢的操作。在布尔方式中,不按等级值降序排序返回的行。H以布尔方式,可以提供关于如下内容的细节:要匹配的词,要排斥的词。排列提示,表达式分组,另外一些内容。插入数据19.1 数据插入A插入可以用几种方式使用:插入完整的行;插入行的一部分;插入多行;插入某些查

34、询的结果。B插入及系统安全:可针对每个表或每个客户,利用 MySQL 的安全机制禁止使用INSERT 语句。19.2 插入完整的行AINSERT INTO Customers VALUES(NULL, Pep E. LaPew, 100 Main Street, Los Angeles, CA, 90046, USA, NULL, NULL); 没有输出:INSERT 语句一般不会产生输出。B总是使用列的列表:一般不要使用没有明确给出列的列表的 INSERT 语句。C仔细地给出值:不管哪种 INSERT 语法,都必须给出 VALUES 的正确数目。D省略列:如果表的定义允许,则可以在 INSE

35、RT 操作中省略某些列。省略的列必须满足以下某个条件。该列定义为允许 NULL 值(无值或空值) 。在表定义给出默认值。E如果数据检索是最重要的,则你可以通过在 INSERT 和 INTO 之间添加关键字LOW_PRIORITY,指示 MySQL 降低 INSERT 语句的优先级。这也适用与 UPDATA 和DELETE 语句。F编写 INSERT 语句的更安全的方法:INSERT INTO Customers(cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_e

36、mail) VALUES( Pep E. LaPew, 100 Main Street, Los Angeles, CA, 90046, USA, NULL, NULL);它在表名后的括号里明确地给出了列名。在插入行时,MySQL 将用 VALUES 列表中的相应值填入列表中的对应项。19.3 插入多个行A可以使用多条 INSERT 语句,设置一次提交它们,每条语句用一个分号结束。或者只要每条 INSERT 语句中的列名(和次序)相同:INSERT INTO Customers(cust_name, cust_address, cust_city, cust_state, cust_zip,

37、cust_country) VALUES( Pep E. LaPew, 100 Main Street, Los Angeles, CA, 90046, USA),( M. Martain, 42 Galaxy Way, New York, NY, 11213, USA);其中单条 INSERT 语句有多组值,每组值用一对圆括号括起来,用逗号分隔。后者的性能高。19.4 插入检索出的数据AINSERT SELECT:它由一条 INSERT 语句和一条 SELECT 语句组成的。BINSERT SELECT 中的列名:不一定要求列名匹配。MySQL 只用的是列的位置,因此SELECT 中第一列将

38、用来填充表列中指定的第一列,以此类推。更新和删除数据20.1 更新(修改)数据AUPDATE:更新表中特定行;更新表中所有行。BUPDATE 语句由 3 部分组成:要更新的表;列名和它们的新值(SET) ;确定要更新行的过滤条件。C在 UPDATE 语句中使用子查询。IGNORE 关键字:如果用 UPDATE 语句更新多行,并且在更新这些行中的一行或多行时出现一个错误,则整个 UPDATE 操作被取消。忽略错误,继续进行更新。UPDATE IGNORE customers D为了删除某个列的值,可设置它为 NULL20.2 删除数据ADELETE 语句:从表中删除特定的行;从表中删除所有行。B

39、删除表的内容而不是表;更快的删除:如果想从表中删除所有行,不要使用DELETE,可使用 TRUNCATE TABLE 语句(实际是删除原来的表并重新创建一个表) 。20.3 更新和删除的知道原则A小心使用:MySQL 没有撤销(undo)按钮。B除非确实打算更新和删除每一行,否则绝对不要使用不带 WHERE 子句的 UPDATE 或DELETE 语句。C保证每个表都有主键。D先使用 SELECT 测试 WHERE 子句,保证它过滤的是正确的记录。E使用强制实施引用完整性的数据,这样 MySQL 将不允许删除具有与其他表相关联的数据的行。创建和操纵表21.1 创建表A一般有两种创建表的方法:使用

40、具有交互式创建和管理表的工具(实际上也是使用了MySQL 语句) ;表也可以直接用 MySQL 语句操纵。B处理现有的表:在创建新表时,指定的表名必须不存在,否则将出错。不能简单地用创建表语句覆盖已有的表。C如果你仅想在一个表不存在时创建它,应该在表名后给出 IF NOT EXITS。D如果不指定 NOT NULL,则认为指定的是 NULL。NULL 值是没有值,它不是空串。空串是一个有效的值,它不是无值。E使用 AUTO_INCREMENT:AUTO_INCREMENT 告诉 MySQL,本列每当增加一行时自动增量。每个表只允许一个这样的列,而且它必须被索引。F指定默认值(DEFAULT )

41、:如果插入行时没有给出值,MySQL 允许指定此时使用的默认值。使用默认值而不是 NULL 值,特别是对用于计算或数据分组的列更是如此。G引擎类型:ENGINE=InnoDB 语句,与其他 DBMS 一样,MySQL 有一个具体管理和处理数据的内部引擎。但 MySQL 与其他 DBMS 不一样,它具有多种引擎。它打包多个引擎,这些引擎都隐藏在 MySQL 服务器内,全都能执行 Create TABLE 和 SELECT 等命令。HInnoDB 是一个可靠的事务处理引擎,它不支持全文本搜索。 MEMORY 在功能上等同于 MyISAM,但由于数据存储在内存中,速度很快,适合于临时表。MyISAM

42、 是一个性能极高的引擎,它支持全文本搜索。但不支持事务处理。I外键不能跨引擎:即使用一个引擎的表不能引用具有使用不同引擎的外键。21.2 更新表AALTER TABLE 之后给出要更改的表名,所做更改的列表。例如,ALTER TABLE vendors ADD vend_phone CHAR(20); ALTER TABLE vendors DROP COLUMN vend_phone;BALTER TABLE 的一种常见用途是定义外键。21.3 删除表ADROP TABLE 语句21.4 重命名表ARENAME TABLE customers TO customers;使用视图22.1 视图

43、A需要 MySQL 5 ,它添加了对视图的支持。视图是虚拟的表,它只包含使用时动态检索数据的查询。B为什么使用视图:重用 SQL 语句。简化复杂的 SQL 操作。使用表的组成部分而不是整个表。保护数据,给用户授予表的特定部分的访问权限而不是整个表的访问权限。更改数据格式和表示。使用视图要考虑性能问题。C视图的规则和限制22.2 使用视图ACREATE VIEW ,SHOW CREATE VIEW viewname,DROP VIEW viewname,更新视图时,可以先用 DROP 再用 CREATE,也可以直接用 CREATE OR REPLACE VIEW。创建可重用的视图:创建不受特定数

44、据限制的视图是一种好方法。例如上面创建的视图返回购买所有产品的客户而不仅仅是生产 TNT2 的客户。用视图重新格式化检索出的数据:用视图过滤不想要的数据:WHERE 子句与 WHERE 子句:如果从视图检索数据时使用了一条 WHERE 子句,则两组子句(一组在视图中,另一组是传递给视图的)将自动组合。使用视图与计算字段更新视图:通常,视图是可更新的。基本上可以说,如果 MySQL 不能正确地确定被更新的基数据,则不允许更新。一般,应该将视图用于检索(SELECT 语句)而不用于更新(INSERT,UPDATE 和 DELETE)使用存储过程23.1 存储过程(需要 MySQL 5)A存储过程简

45、单来说,就是为以后的使用而保存的一条或多条 MySQL 语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。23.2 为什么要使用存储过程A通过把处理封装在容易使用的单元中,简化复杂的操作。B由于不要求反复建立一系列处理步骤,这保证数据的完整性。 (防止错误)C简化对变动的管理。 (安全性,通过存储过程限制对基础数据的访问减少了数据讹误的机会)D提高性能。E你可能有没创建存储过程的安全访问权限。编写存储过程需要更高的技能,更加丰富的经验(这是缺陷)MySQL 将编写存储过程的安全和访问与执行存储过程的安全和访问区分开来。23.3 使用存储过程(如何执行(运行)它们)A执行存储过程(调用

46、:CALL 语句):CALL productpricing(pricelow, pricehigh, priceaverage);B创建存储过程,例如:CREATE PROCEDURE productpricing() BEGIN SELECT Avg(prod_price) AS priceaverage FROM products; END;C临时改变命令行实用程序的语句分隔符:DELIMITER / 这表示告诉命令行实用程序使用/作为新的语句结束分隔符。D删除存储过程:DROP PROCEDURE (IF EXISTS) productpricing;E使用参数:一般存储过程并不显示结果

47、,而是把结果返回给指定的变量(variable:内存中的一个特定的位置,用来临时存储数据)FMySQL 支持 IN(传递给存储过程) ,OUT(从存储过程传出)和 INOUT(对存储过程传入和传出)类型的参数,所有 MySQL 变量都必须以开始。G建立智能存储过程(包含业务规则和智能处理)H检查存储过程 SHOW CREATE PROCEDURE 语句, SHOW PROCEDURE STATUS;使用游标24.1 游标(需要 MySQL 5)A有时,需要在检索出来的行中前进或后退一行或多行。B游标(cursor)是一个存储在 MySQL 服务器上的数据库查询,它不是一条 SELECT 语句,

48、而是被该语句检索出来的结果集。C主要是用于交互式应用。只能用于存储过程:不像多数 DBMS,MySQL 游标只能用于存储过程(和函数) 。24.2 使用游标A创建游标:用 DECLARE 语句创建 CREATE PEOCEDURE processorders() BEGIN DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; END;B打开和关闭游标:OPEN CURSOR 语句和 CLOSE CURSOR 语句。C在一个游标打开后,可以使用 FETCH 语句分别访问它的每一行。DDECLARE 语句定义的局部变量必须在定义任何游标或句柄之前定义。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报