Download presentation
Presentation is loading. Please wait.
1
MySQL
2
1. Install MySQL 5.0 2. MySQL使用简单示例 3. 设置环境变量PATH 4. Mysql,mysqladmin,mysqldump 5. MySQL Administrator和 MySQL Query Browser 6. SQL语言
3
7. 保护MySQL安装 8. MySQL服务 9. 创建新的数据库和用户 10. 文字:怎么写字符串和数字 11. SQL句法
4
1. Install MySQL 5.0 Website:http://dev.mysql.com
Source Files & Version: mysql-noinstall win32.zip mysql-gui-tools-noinstall-5.0-r11a-win32.zip mysql-connector-odbc win32.zip
5
2. MySQL使用简单示例 mysqld mysql -u root -p show databases quit
mysqladmin -u root shutdown -p
6
mysql>create database Student;
mysql> use Student; mysql> create table BasicInfo( id int not null auto_increment, name varchar(50) not null, primary key (id)); mysql> insert into BasicInfo values(null,'Hello'); mysql> select * from ludgee;
7
3. 设置环境变量PATH System->Advanced->Environment Variables
(;)c:\mysql\bin
8
4. Mysql,mysqladmin,mysqldump
只能通过mysql,mysqladmin,mysqldump,MySQL Adminstrator,MySQL Query Browser等命令和工具完成。
9
4.1 mysql 1.启动mysql 1)执行MySQL Command Line Client
2)完整路径、资源管理器拖放,CD命令切换等方式输入mysql程序 3)系统变量Path扩展
10
2.mysql的命令行选项 -u name或-user=name -p
-h computername 或-host=computername -protocol=name -P n或-port=n -default-character-set=name databasename
11
-h选项给出远程MySQL服务器的主机名或IP地址。
前提:1.Computername可以通过网络访问; 2.Port可用; 3.用户具有访问远程MySQL的权限。
12
-protocol选项给出打算使用的通信协议:
不同计算机上:TCP/IP 同一台计算机:socket(UNIX/Linux),pipe(Windows)或memory(Windows) -default-character-set=name: latin1(ISO ),latin2(ISO ),utf8(Unicode),cp850(西欧使用的DOS字符集)
13
Sample: >mysql –u root –p –h uranus –default-character-set=utf8 mylibrary
14
3.交互使用mysql 启动mysql后,可以输入执行SQL命令,以分号(;)结束。 “我是个新手”:mysql拒绝执行不带WHERE子句的UPDATE和DELETE命令。 >mysql -u root --i-am-a-dummy mysql> delete from videos; ERROR 1175 (HY000): You are using safe upda le without a WHERE that uses a KEY column
15
Mysql命令; \c clear \h help \q exit,quit \s status
\T[f] tee[filename] 把输入输出记载到指定文件 \t notee 停用tee功能。随时记载输入输出 \u db use database \. fn source filename 读取并执行文件里SQL命令
16
4.Windows环境下mysql的使用技巧 在输入窗口的标题栏点击右键,进入属性对话框:
颜色 窗口尺寸 滚动区域 剪贴板:QuickEdit Mode
17
以databasename数据库为操作对象执行file.sql文件所包含的全部SQL命令。
5.用mysql处理SQL文件 >Mysql [options] databasename < file.sql 以databasename数据库为操作对象执行file.sql文件所包含的全部SQL命令。 文件后缀名不用是sql,重要的是内容,命令之间以(;)分割。
18
以mysqldump备份的数据库文件,先用mysqladmin创建一些新的数据库以便容纳数据,然后从文件读入SQL命令。
读入数据库备份 >mysqladmin –u root –p create dbname >mysql –u root –p dbname < backupfile.sql
19
4.2 mysqladmin Mysqladmin程序有助于完成许多种系统管理任务,如创建或删除一个数据库、修改密码等。
>mysqladmin [options] admincommand
20
Options与mysql完全一样(-u,-p,-h等) admincommand是mysqladmin将要执行的任务:
Create 创建数据库 Drop 删除数据库 Password 改变由-u给出的MySQL用户的密码
21
Sample: >mysqladmin –u root –p create newdatabase
>mysqladmin –u root –p drop testdatabase >mysqladmin –u root –p password “new password”
22
4.3 mysqldump Mysqldump程序的用途是为数据库创建备份,在它生成的结果文件里,包含着创建必要的数据表和把有关数据插入这些数据表的SQL命令。 >mysqldump [options] dbname>backupfile.sql
23
5. MySQL Administrator和 MySQL Query Browser
MySQL Administrator和MySQL Query Browser是两种较新的MySQL公司开发的客户端用户界面。 MySQL Administrator侧重于各种系统管理任务; MySQL Query Browser侧重于帮助人们编写和调试SQL命令。
24
5.1 与MySQL服务器建立连接 Stored Connection:连接名称
Server Host:服务器主机名,本地localhost Port:3306 Username,Password Default Schema(仅适用于MySQL Query Browser),为将要执行的SQL命令指定一个默认的数据库 Details:在极少场合需输入特定参数
26
5.2 MySQL Administrator Server Information:查看服务器信息
Service Control:启动/停止MySQL服务器(Windows版本里,Configure Service服务配置选项卡能对许多选项进行设置。 Startup Variables:配置启动参数,修改my.ini里的许多选项,需重启MySQL服务器才生效
27
User Administration:用户管理 Server Connections:
Thread:所有活跃MySQL线程(Show Processlist) User Connection:把所有活跃的MySQL用户和他们的线程列成一份清单显示出来。(Show Privileges)
28
Health:查看系统负载 Connection Health:连接负载。包含3个图表:当前活跃连接的数量,网络通信流量,每秒处理的SQL查询次数。 Memory Health:Query Cache(查询缓冲区)和Key Buffer(索引缓冲区)的使用情况。 Status Variables(状态变量),Server Variables(服务器变量):管理各种状态信息。
29
Server Logs(查看服务器日志):这个模块可以让用户方便的查看MySQL服务器的日志数据,但前提是有关的日志功能必须已被激活。与日志有关的选项可以通过Startup Parameters模块的Log Files选项卡修改。
30
Backup(制作数据库备份):适合定期制作备份的场合。先New Project创建一个新的备份项目,在Project Name字段里给新项目起个名字。
1. 设置备份的范围 在Backup Content列表里对数据表进行取舍。 2. 备份选项 在Advanced Options选项卡里设置备份工作的细节。
31
Lock All Tables:锁定所有的数据表
Single Transaction:单个事务 Normal Backup:常规备份 Complete Backup:完全备份 No CREATEs No EXTENDED INSERTs Add DROP TABLE Complete INSERTs ANSI QUOTES Disable Keys
32
3. 进行备份 4. 备份工作自动化 Save Project->Excute Backup Now
Schedule定期执行备份工作。
33
Restore:用备份回复数据库 用以前制作的数据库备份来恢复数据库。
在Restore Content选项卡里,在选好备份文件后,可以对应该恢复哪些数据表进行取舍。 想把来自一个数据库的数据表恢复到另一个数据库,需要在Target Schema里输入。
34
Replication Status:查看镜像机制的工作状态。
如果用MySQL Administrator连接的MySQL服务器是某个镜像系统的组成部分,就可以通过这个模块查看到该镜像系统的工作状态。 Catalogs:对数据库和数据表进行管理。
35
5.3 MySQL Query Browser MySQL Query Browser的主要任务是帮助人们构造和调试SQL命令。
36
5.3.1 SQL命令的输入和执行 输入SQL命令,单击Execute,显示一个执行结果数据表。 用鼠标单击方式执行SQL命令。
Ctrl+回车键:执行当前SQL命令 Ctrl+Shift+回车键:执行结果显示在新窗口 F11:改变窗口布局并加大SQL命令输入框 F12:关闭窗口其它部分,只保留结果显示区 用鼠标单击方式执行SQL命令。
37
5.3.2 修改SELECT结果里的数据 结果只针对一个数据表(没有join)且没有使用(Group By)子命令或任何统计函数。则允许修改-Edit。 双击修改、Add、Delete Apply Changes
38
5.3.3 SQL命令的历史记录和书签 把执行过的所有命令自动保存在一个名为History的清单里,可以通过主窗口右边的滚动窗口查看。
还可鼠标拖放,或者双击执行。 Ctrl+B组合键给自己常用的命令起一个名字,保存在Bookmark清单中。
39
5.3.4 一次执行多条命令(脚本) File->New Script Tab(新脚本)打开一个SQL脚本输入区。
既可以一次执行全部这些命令-Execute 也可以一条一条的依次执行-Script菜单
40
5.3.5 存储过程 提供一些帮助用户输入存储过程(stored procedure)的功能。
41
5.3.6 MySQL Help(帮助文档) 这份帮助文档可以通过主窗口右边的Syntax(语法)和Function(函数)滚动窗口进行检索,起内容来自
42
6. SQL语言 SQL命令分为三大类: DML(Data Manipulation Language)
DDL(Data Definition Language) DCL(Data Control Language)
43
6.1 简单查询(SELECT) 6.1.1 确定数据表里有多少条记录 6.1.2 剔除冗余Distinct
6.1.3 限制查询结果中的数据列个数 6.1.4 限制查询结果中的数据记录个数(LIMIT) 6.1.5 使用LIMIT关键字确定数据表里的数据记录
44
6.2 对查询结果进行排序 6.3 筛选数据记录(WHERE,HAVING) 6.4 执行步骤 6.5 涉及多个数据表的关联查询
6.5.1 两个数据表的关联 6.5.2 三个或更多个数据表的关联 6.5.3 关联查询的语法
45
6.6 合并查询结果(UNION) 6.7 分组查询、统计函数(GROUP BY) 6.7.1 统计函数
6.7.2 统计函数GROUP_CONCAT() 6.7.3 对多个数据列进行GROUP BY查询 6.7.4 GROUP BY…WITH ROLLUP
46
6.8 修改数据 6.8.1 备份数据 6.8.2 插入数据记录 6.8.3 修改数据记录(UPDATE)
6.8.4 删除数据记录(DELETE)
47
6.1 简单查询(SELECT) SELECT * FROM tablename SELECT命令允许不出现数据库或数据表的名字。
查询返回给定数据表中的全部内容。 SELECT命令允许不出现数据库或数据表的名字。 如:SELECT 2×3 SELECT NOW()
48
6.1.1 确定数据表里有多少条记录 SELECT COUNT(pubID) FROM publishers
只返回数据记录的个数,而不是真正去读取他们的内容。 可以不是pubID,而是表中任何一列,或者*
49
6.1.2 剔除冗余Distinct 查询数据列内容不重复的数据记录有多少。
SELECT COUNT(DISTINCT pubID) FROM titles SELECT COUNT(*)/COUNT(DISTINCT titleID) FROM re_title_author
50
6.1.3 限制查询结果中的数据列个数 除了*(星号)可以列出查询的数据表中的所有列外,还可以指定查询返回的结果的数据列。
SELECT pubName FROM publishers 别名:可以用AS关键字给字段取一个别名。
51
6.1.4 限制查询结果中的数据记录个数(LIMIT)
SELECT title FROM titles LIMIT 2 之后,如想查看下两条记录,就要再进行一次查询,使用LIMIT offset n子命令。 SELECT title FROM titles LIMIT 2,2
52
6.1.5 使用LIMIT关键字确定数据表里的数据记录
SELECT SQL_CALC_FOUND_ROWS title FROM titles ORDER BY title LIMIT 3 SELECT FOUND_ROWS() 增加SQL_CALC_FOUND_ROWS选项,可以在下一条查询里使用FOUND_ROWS查出总记录条数。
53
6.2 对查询结果进行排序 ORDER BY column
SELECT authName FROM authors ORDER BY authName (DESC)
54
6.3 筛选数据记录(WHERE,HAVING) SELECT authName FROM authors WHERE authname>=‘M’ SELECT authName FROM authors WHERE authname LIKE ‘%er%’ Like操作符往往非常慢,通常可改为全文检索查询 SELECT authID,authName FROM authors WHERE authID IN(2,7,12)
55
GROUP和HAVING子句用于扩展聚合函数的功能。
GROUP BY用来指定分组,当进行任何聚合操作时,该子句都将对组进行统计计算。
56
HAVING子句经常和GROUP BY子句结合使用,为一个组或一个聚合指定搜索条件。
HAVING子句只能和SELECT语句一起使用,而且如果不用GROUP BY子句,它的用法会和WHERE子句很相似。 当用到GROUP BY子句时,将限制从聚合函数中返回的行的数量。
57
如果WHERE和HAVING同时出现,MySQl将优化执行WHERE子句,而HAVING子句只能用来对SELECT…WHERE…查询的结果(中间结果)作进一步筛选。
HAVING子句不易优化,尽量使用等价的WHERE子句。
58
6.4 执行步骤 1. 列出FROM子句中的全部表和视图的全部行的全部组合都包括在这一步形成的中间结果表中。
2. 如果指定一个WHERE子句,那么只有搜索条件为真的那些行才包括在这一步形成的中间结果表中。
59
3. 如果指定GROUP BY子句,那么前一步生成的中间结果表中的行组合成单独的组,使一个组中的所有行对于所有的组合列都有相同的值。
4. 如果指定HAVING子句,那么这种搜索条件应用到每一个组中。只有搜索条件为真的行的组才包含在这一步形成的中间结果表中。
60
5. 如果对选项列表指定DISTINCT关键字,那么删除前面步骤中生成的结果表中的冗余行;否则,所有的行都包括在最终的结果表中。
61
6.5 涉及多个数据表的关联查询 涉及多个数据表的关联查询可以在SELECT语句中的FROM子句或WHERE子句中被指定。
需要使用JOIN语法来构造: 内联结(INNER JOIN) 外联结(OUTER JOIN)
62
内连接(INNER JOIN):最常用。使用一个比较操作符(=,<>),将以两个表中共同的值为基础来匹配两个表中的行。
SELECT publName,title FROM publishers INNER JOIN titles ON publishers.publID=titles.publID ORDER BY publName
63
外连接(OUTER JOIN):是一种不常用的比较形式。这种类型的联结有三种不同的方式:
左联结(LEFT JOIN) 右联结(RIGHT JOIN) 全联结(CROSS JOIN)
64
左联结(LEFT JOIN):将从联结左边的表中检索所有的行,而不仅仅是那些匹配的行。
SELECT publName,title FROM publishers LEFT JOIN titles ON publishers.publID=titles.publID ORDER BY publName 如果左边表中的行在右边表中没有相匹配行,检索结果中对应右边表的列将包含空值。
65
右联结(RIGHT JOIN):将检索右边表中所有行和左边表中与右边表相匹配的行。
SELECT publName,title FROM publishers RIGHT JOIN titles ON publishers.publID=titles.publID ORDER BY publName 如果在左边表中没有与右边相匹配的行,则在该位置返回一个空值。
66
全联结(CROSS JOIN):不管另一边的表是否有匹配行而检索出两表中所有的行。
SELECT publName,title FROM publishers CROSS JOIN titles ON publishers.publID=titles.publID ORDER BY publName 如果左右表中各有10行,将返回100行。
67
6.5.1 两个数据表的关联 SELECT title,publName FROM titles,publishers
以上返回图书和出版公司的所有组合。下面增加WHERE子句。 SELECT title,publName FROM titles,publishers WHERE titles.publID=publishers.publID 也可使用下列等效方法。
68
2. 使用USING关键字来给出两个数据表之间的关联字段,但关联字段必须是相同的名字
1. LEFT JOIN…ON SELECT title,publName FROM titles LEFT JOIN publishers ON titles.pubID=publishers.pubID 2. 使用USING关键字来给出两个数据表之间的关联字段,但关联字段必须是相同的名字 USING (publID)
69
6.5.2 三个或更多个数据表的关联 返回一份所有图书及其所有作者的清单,同一本书有多位作者的将在清单里重复出现。
SELECT title,authName FROM titles,rel_title_author,authors WHERE titles.titleID=rel_title_author.titleID AND authors.authID=rel_title_author. authID ORDER BY title
70
生成一份出版公司和图书作者的清单,涉及4个数据表。有的作者在同一家出版社出版过不止一本书,使用DISTINCT可以确保重复的“作者-出版公司”数据记录只出现一次。
SELECT DISTINCT publName,authName FROM publishers,titles,rel_title_author,authors WHERE titles.titleID=rel_title_author.titleID AND authors.authID=rel_title_author.authID AND publishers.publID=titles.publID ORDER BY publName,authName;
71
6.5.3 关联查询的语法 SELECT命令语法下的FROM子句有许多彼此差不多完全一样的变体,汇总如下表
72
表6-1 无条件关联(数学意义上的完全组合,几乎没有实际用途)
语法变体 (1) FROM table1,table2 (2) FROM table1 JOIN table2 (3) FROM table1 CROSS JOIN table2 (4) FROM table1 INNER JOIN table2 (5) FROM table1 STRAIGHT_JOIN table2
73
表6-2 有条件关联 语法变体 (6) FROM table1,table2 WHERE table1.xyID=table2.xyID
(7) FROM table1 LEFT[OUTER] JOIN table2 ON table1.xyID=table2.xyID (8) FROM table1 LEFT[OUTER] JOIN table2 USING(xyID) (9) FROM table1 NATURAL[LEFT[OUTER]] JOIN table2 (10) FROM table2 RIGHT[OUTER] JOIN table1 ON table1.xyID=table2.xyID (11) FROM table2 RIGHT[OUTER] JOIN table1 USING(xyID)
74
说明 1. 关键字OUTER可选,有和没有的效果完全一样。
2. 10,11项对应7,8项,调换了table1和table2。MySQL建议:为了最大限度的和其它品牌的数据库系统保持兼容,最好不使用RIGHT JOIN-应该把它改为LEFT JOIN。 3. USING变体要求两个数据表里的xyID字段有相同的名字。 4. NATURAL变体将自动使用两个数据表里的名字相同的字段进行关联,这意味着两个数据表里除了ID字段之外不应该再有任何名字相同的字段。
75
6.6 合并查询结果(UNION) 使用UNION关键字可以把两个或多个SELECT查询命令合并在一起,而最终的结果是各次查询结果的顺序排列: SELECT command UNION [ALL] SELECT command …
76
合并同一个数据表中的两个SELECT命令的结果:
SELECT * FROM authors WHERE authName LIKE 'b%' UNION SELECT * FROM authors WHERE authName LIKE 'g%'
77
不同数据表上的查询也可以合并,但需要保证各次查询结果的数据列在个数和数据类型上都是一样的。
否则,MySQL将把最终的结果数据全部转换为第一条SELECT命令的数据类型。
78
UNION ALL可以保留最终结果里的重复的记录。
还可以把个别的SELECT命令用圆括号括起来,这样,可以对每次查询以及最终结果作出LIMIT和ORDER BY设置。
79
从两个数据表里分别选取了最多10条记录并把它们合并在一起,然后又从这些(最多20条)记录里选取了前5各来显示:
(SELECT * FROM authors WHERE authName LIKE 'b%'ORDER BY authName LIMIT 10) UNION (SELECT * FROM authors WHERE authName LIKE 'g%'ORDER BY authName LIMIT 10) ORDER BY authName LIMIT 5
80
6.7 分组查询、统计函数(GROUP BY) 保存在数据库里的图书信息,划分了一些门类。下面的查询显示不同的门类包含着哪些图书:
SELECT catName,title FROM titles,categories WHERE titles.catID=categories.catID ORDER BY catName,title 如果要显示没被归入任何门类的图书,即想显示所有的图书,则须使用下列关联查询: title FROM titles LEFT JOIN categories ON titles.catID=categories.catID
81
6.7.1 统计函数 GROUP BY name语法可以按一个给定数据列的每个成员对查询结果进行分组统计,最终看到的是一个分组汇总表。
SQL语言提供的各种统计函数可以配合GROUP BY语法实现这一功能,可以在SELECT命令里用COUNT(),SUM(),MIN()和MAX()等函数得出想看到的结果。
82
显示每个类型的图书有多少本: 列出所有图书门类,不管该类有没有图书:
SELECT catName,COUNT(title) AS nrOfItems FROM titles,categories WHERE titles.catID=categories.catID GROUP BY catName ORDER BY catName 列出所有图书门类,不管该类有没有图书: FROM titles LEFT JOIN categories ON titles.catID=categories.catID ORDER BY nrOfItems DESC
83
6.7.2 统计函数GROUP_CONCAT() 统计函数GROUP_CONCAT()的作用是把一些字符串归为一个分组。
如下例所示:把作者人数在一个以上的图书列举出来,同时把作者们的姓名按字母顺序列出。 此处,ORDER BY指定作者姓名排序方式,SEPARATOR关键字明确指定一个作者姓名之间的分隔符。
84
SELECT title, GROUP_CONCAT(authName ORDER BY authname SEPARATOR ',') AS authors, COUNT(authors.authID) AS cnt FROM authors,titles,rel_title_author WHERE authors.authID=rel_title_author.authID AND titles.titleID=rel_title_author.titleID GROUP BY titles.titleID HAVING cnt>1 ORDER BY title
85
6.7.3 对多个数据列进行GROUP BY查询 GROUP BY还可以用来对多个数据列进行分组。如下按语言和图书门类对图书进行分组统计:
SELECT langName,catName,COUNT(*) FROM titles,languages,categories WHERE titles.catID=categories.catID AND titles.langID=languages.langID GROUP BY langName,catName
86
6.7.4 GROUP BY…WITH ROLLUP 如果GROUP BY子句里只有一个数据列,则加上WITH ROLLUP关键字将在查询结果的最后一行自动增加一条总数统计记录。这条记录的ID字段取值或者说这条记录的名字永远是NULL。 SELECT langName,COUNT(*) FROM titles,languages WHERE titles.langID=languages.langID GROUP BY langName WITH ROLLUP
87
在多个数据列上使用WITH ROLLUP关键字,将为第一列分组统计“小计”,为全体记录统计“总计”;
SELECT langName,catName,COUNT(*) FROM titles,languages,categories WHERE titles.catID=categories.catID AND titles.langID=languages.langID GROUP BY langName,catName WITH ROLLUP
88
6.8 修改数据 MySQL数据库主要提供以下三种操作: INSERT UPDATE DELETE
89
6.8.1 备份数据 1.为数据表制作一个副本 创建一个名为newtable的新数据表,并把table数据表里的数据全部拷贝到这个新数据表里去。 CREATE TABLE newtable SELECT * FROM table 新数据表的数据列定义与老数据表完全一样,但偶尔会发生意外。
90
2.用数据表副本恢复数据表 DELETE FROM table
INSERT INTO table SELECT * FROM newtable 可以删去newtable DROP TABLE newtable
91
在一个shell或命令窗口里启动mysqldump
3.为整个数据库制作一个备份 在一个shell或命令窗口里启动mysqldump >mysqldump –u lginname –p dbname>backupfile 备份文件一般保存在C:\Documents and Settings\Administrator中,名为*.sql。
92
>mysql –u loginname –p dbname<backupfile 也可在交互模式下重建这个数据库:
4.用数据库备份恢复数据库 >mysql –u loginname –p dbname<backupfile 也可在交互模式下重建这个数据库: >mysql –u root –p mysql>CREATE DATABASE dbname; mysql>USE dbname; mysql>SOURCE backupfile;
93
6.8.2 插入数据记录 1. 用INSERT向一张表中插入记录
1.1 列出有关数据列的名字(有默认值,允许包含NULL,带有AUTO_INCREMENT属性的数据列不用列出),然后写出将被插入的数据: USE mylibrary; INSERT INTO titles(title,year) VALUES ('MySQL',2005);
94
1.2 不写出数据列的名字,则必须为所有的数据列按其顺序提供数据值。
INSERT INTO titles VALUES (NULL,'deleteme','',1,NULL,NULL,NULL,2005,NULL,NULL,NULL,NULL) AUTO_INCREMENT,TIMESTAMP类型的字段存入NULL值时,实际存入的并不是NULL。
95
1.3 用一条命令插入多条新的数据记录 INSERT INTO table (columnA,columnB,columnC)
VALUES (‘a’,1,2),(‘b’,12,13),(‘c’,22,33),……
96
2.向关联数据表插入新记录 把一本新书收录到数据库里,Randy Yanger,Georage Reese,Tim King合著的MySQL & mSQL,O’Reilly出版公司1999年出版。 LAST_INSERT_ID()函数返回MySQL为上一条INSERT命令生成的AUTO_INCREMENT值。 它是面向连接的函数,只对本次连接会话有效。
97
INSERT INTO publishers (publName) VALUES ('0\'Reilly & Associates');
SELECT LAST_INSERT_ID() INSERT INTO authors (authName) VALUES ('Yarger R.'); SELECT LAST_INSERT_ID(); INSERT INTO authors (authName) VALUES (‘Reese G.');
98
INSERT INTO authors (authName) VALUES (‘King T.');
SELECT LAST_INSERT_ID(); INSERT INTO titles (title,publID,year) VALUES ('MySQL & mSQL',4,1999); INSERT INTO rel_title_author VALUES (112,90,NULL),(112,91,NULL),(112,92,NULL);
99
6.8.3 修改数据记录(UPDATE) UPDATE tablename
SET column1=value1,column2=value2,… WHERE columnID=n Sample: UPDATE titles SET title='Linux,6th ed.' WHERE titleID=1
100
不带WHERE的UPDATE命令将对给定数据表里的全体数据记录作出修改:
UPDATE titles SET year=2005 在UPDATE命令里还允许进行少数几种数学运算 UPDATE title SET price=price*1.05
101
1. 编辑排序清单里的数据记录(UPDATE…ORDER BY…LIMIT)
UPDATE titles SET year=2007 ORDER BY titleID LIMIT 10 2. 更新关联数据表里的数据记录 UPDATE table1,table2 SET table1.columnA=table2.columnB WHERE table1.table1ID=table2.table1ID
102
6.8.4 删除数据记录(DELETE) DELETE FROM titles WHERE titleID=8 DROP TABLE
103
1.删除关联数据表中的数据记录 DELETE t1,t2 FROM t1,t2,t3 WHERE condition1 AND condition2 … 把数据表t1,t2里满足WHERE条件的所有数据记录全部删掉。
104
从title数据表中把作者‘Kofler Michael写的书全部删掉:
DELETE titles FROM titles,rel_title_author,authors WHERE titles.titleID=rel_title_author.titleID AND authors.authID=rel_title_author.authID AND authors.authName='Kofler Michael'
105
DELETE命令里,可以用JOIN来关联。
只有FROM之前的数据表不一样。 DELETE titles,rel_title_author,authors FROM titles,rel_title_author,authors WHERE titles.titleID=rel_title_author.titleID AND authors.authID=rel_title_author.authID AND authors.authName='Kofler Michael‘ DELETE命令里,可以用JOIN来关联。
106
上面语句语法正确,但执行时会出现以下错误:
Cannot delete or update a parent row: a foreign key constraint fails (`mylibrary`.`rel_title_author`, CONSTRAINT `rel_title_author_ibfk_1` FOREIGN KEY (`authID`) REFERENCES `authors` (`authID`))
107
解决方法 1). SET FOREIGN_KEY_CHECKS = 0命令暂时关闭MySQL的外键约束条件检查机制,等执行完DELETE命令之后,再用SET FOREIGN_KEY_CHECKS = 1重启该功能 (独立的SQL命令) 2). 定义外键约束条件时加上ON DELETE CASCADE选项 3). 彻底抛弃外键,或使用MyISAM数据表(MyISAM数据表不支持数据一致性规则)
108
2. 删除排序清单里的数据记录(DELETE…ORDER BY…LIMIT)
DELETE FROM authors ORDER BY ts DESC LIMIT 1
109
7. 保护MySQL安装 1.以root身份登录MySQL服务器(DOS提示符) 如果root用户具有密码
>Mysql –u root 如果root用户具有密码 >Mysql –u root –p 2.使用mysql数据库(以下提示符均为mysql) mysql>Use mysql;
110
3.显示全体用户信息: 4.设置root密码 5.重新命名root用户
select user,host,password from user; 4.设置root密码 update user set password=password('secret') where user='root'; 5.重新命名root用户 Update user set user='myroot' where user='root';
111
6.删除匿名用户 7.为每一个用户设置密码 8.对可以从任何地方注册的用户的处理
delete from user where user=''; 7.为每一个用户设置密码 update user set password=password('secret') where password=''; 8.对可以从任何地方注册的用户的处理 select user ,host,password from user where host='%'; update user set host='%.sol' where host='%'; flush privileges;//刷新RAM中数据库副本
112
8. MySQL服务 开机自动启动服务: 命令加载和卸载 手动启动或停止 MySQLSystemTrayMonitor MySQL系统管理员
Windows System Control 命令加载和卸载 Mysqld –install mysql –defaults-file=“c:\mysql\my.ini” Mysqld –remove mysql 手动启动或停止 Net start mysql Net stop mysql
113
C:\>c:\mysql\bin\mysqld -install MySQL --defaults-file="c:\mysql\my
C:\>c:\mysql\bin\mysqld -install MySQL --defaults-file="c:\mysql\my.ini" Service successfully installed. C:\>mysqld-nt install C:\>net start mysql MySQL 服务正在启动 . MySQL 服务已经启动成功。
114
C:\>net stop mysql MySQL 服务正在停止. MySQL 服务已成功停止。 C:\>mysqld-nt remove Service successfully removed.
115
9. 创建新的数据库和用户 创建数据库forum,用户forumadmin对这个数据库有不加限制的访问权限:
mysql> create database forum; mysql> grant all on forum.* to identified by 'XXX';
116
创建具有较少权限的数据库用户: mysql> GRANT select,insert,update,delete ON forum.* TO IDENTIFIED BY 'XXX';
117
MySQL提供的权限 权限 列 上下文 select Select_priv 表 insert Insert_priv update
Update_priv delete Delete_priv index Index_priv alter Alter_priv create Create_priv 数据库、表或索引 drop Drop_priv 数据库或表 grant Grant_priv references References_priv reload Reload_priv 服务器管理 shutdown Shutdown_priv process Process_priv file File_priv 在服务器上的文件存取
118
10. 文字:怎么写字符串和数字 一个字符串是一个字符序列,由单引号(“'”)或双引号(“"”)字符(后者只有你不在ANSI模式运行)包围。例如: 'a string' "another string" 在字符串内,某个顺序有特殊的意义。这些顺序的每一个以一条反斜线(“\”)开始,称为转义字符。
119
MySQL转义字符 MySQL识别下列转义字符: \0 一个ASCII 0 (NUL)字符。 \n 一个新行符。 \t 一个定位符。
\r 一个回车符。 \b 一个退格符。 \' 一个单引号(“'”)符。 \" 一个双引号(“"”)符。 \\ 一个反斜线(“\”)符。 \% 一个“%”符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。 \_ 一个“_”符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。
120
有几种方法在一个字符串内包括引号: 一个字符串内用“'”加引号的“'”可以被写作为“''”。
一个字符串内用“"”加引号的“"”可以被写作为“""”。 你可以把一个转义字符(“\”)放在引号前面。 一个字符串内用“"”加引号的“'”不需要特殊对待而且不必被重复或转义。同理,一个字符串内用“'”加引号的与“"”也不需要特殊对待。
121
下面显示的SELECT演示引号和转义如何工作:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; | hello | "hello" | ""hello"" | hel'lo | 'hello | mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; | hello | 'hello' | ''hello'' | hel"lo | "hello | mysql> SELECT "This\nIs\nFour\nlines"; | This Is Four lines |
122
数字 整数表示为一个数字顺序。浮点数使用“.”作为一个十进制分隔符。这两种类型的数字可以前置“-”表明一个负值。 有效整数的例子:
有效浮点数的例子: e 一个整数可以在浮点上下文使用;它解释为等值的浮点数。
123
用户变量 MySQL支持线程特定的变量,用@variablename句法。
一个变量名可以由当前字符集的数字字母字符和“_”、“$”和“.”组成。
124
你可以用SET句法设置一个变量: { integer expression | real expression | string expression } ...]. select
125
+------------------------+------+------+------+
| | | | | | | (这里,我们不得不使用:=句法,因为=是为比较保留的)
126
11. SQL句法 以下给出一些常用SQL句法参考
127
DATABASE句法 CREATE DATABASE db_name DROP DATABASE [IF EXISTS] db_name
128
CREATE TABLE句法 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
129
create_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] or PRIMARY KEY (index_col_name,...) or KEY [index_name] (index_col_name,...) or INDEX [index_name] (index_col_name,...) or UNIQUE [INDEX] [index_name] (index_col_name,...) or [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition] or CHECK (expr)
130
type: TINYINT[(length)] [UNSIGNED] [ZEROFILL]
or SMALLINT[(length)] [UNSIGNED] [ZEROFILL] or MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] or INT[(length)] [UNSIGNED] [ZEROFILL] or INTEGER[(length)] [UNSIGNED] [ZEROFILL] or BIGINT[(length)] [UNSIGNED] [ZEROFILL] or REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] or DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] or FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] or DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL] or NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL] or CHAR(length) [BINARY] or VARCHAR(length) [BINARY]
131
or DATE or TIME or TIMESTAMP or DATETIME or TINYBLOB or BLOB or MEDIUMBLOB or LONGBLOB or TINYTEXT or TEXT or MEDIUMTEXT or LONGTEXT or ENUM(value1,value2,value3,...) or SET(value1,value2,value3,...)
132
ALTER TABLE句法 ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] ALTER TABLE允许你修改一个现有表的结构。例如,你可以增加或删除列、创造或消去索引、改变现有列的类型、或重新命名列或表本身。你也能改变表的注释和表的类型。
133
OPTIMIZE TABLE句法 OPTIMIZE TABLE tbl_name
如果你删除了一个表的大部分或如果你用变长的行对一个表(有VARCHAR、BLOB或TEXT列的表)做了改变,应该使用OPTIMZE TABLE。删除的记录以一个链接表维持并且随后的INSERT操作再次使用老记录的位置。你可以使用OPTIMIZE TABLE回收闲置的空间。
134
DROP TABLE句法 DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]
135
DELETE句法 DELETE [LOW_PRIORITY] FROM tbl_name [WHERE where_definition] [LIMIT rows] DELETE从tbl_name表中删除满足由where_definition给出的条件的行,并且返回删除记录的个数。
136
SELECT句法 select_expression,... [FROM table_references
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO {OUTFILE | DUMPFILE} 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY col_name,...] [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] ]
137
JOIN句法 table_reference, table_reference
table_reference [CROSS] JOIN table_reference table_reference INNER JOIN table_reference table_reference STRAIGHT_JOIN table_reference table_reference LEFT [OUTER] JOIN table_reference ON conditional_expr table_reference LEFT [OUTER] JOIN table_reference USING (column_list) table_reference NATURAL LEFT [OUTER] JOIN table_reference { oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr }
138
INSERT句法 INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... 或 INSERT [LOW_PRIORITY | DELAYED] [IGNORE] SELECT ... [INTO] tbl_name SET col_name=expression, col_name=expression, ...
Similar presentations