1、第 1 章 数据库简介1.数据库的概念数据库(Database )是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 RDBMS 即关系数据库管理系统(Relational Database Management System)的特点: 1.数据以表格的形式出现 2.每行为各
2、种记录名称 3.每列为记录名称所对应的数据域 4.许多的行和列组成一张表单 5.若干的表单组成 databaseRDBMS 术语在我们开始学习 My SQL 数据库前,让我们先了解下 RDBMS 的一些术语: 数据库: 数据库是一些关联表的集合。. 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。 列: 一列( 数据元素) 包含了相同的数据 , 例如邮政编码的数据。 行:一行(= 元组,或记录)是一组相关的数据,例如一条用户订阅的数据。 冗余:存储两倍数据,冗余可以使系统速度更快。 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。 外键:外键
3、用于关联两个表。 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。My SQL 数据库My SQL 是一个关系型数据库管理系统,由瑞典 My SQL AB 公司开发,目前属于Oracle 公司。 My SQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵
4、活性。 My SQL 是开源的,所以你不需要支付额外的费用。 My SQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 My SQL 使用标准的 SQL 数据语言形式。 My SQL 可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C+ 、Python 、Java、Perl、PHP 、Eiffel 、Ruby 和 TCL 等。 My SQL 对 PHP 有很好的支持, PHP 是目前最流行的 Web 开发语言。 My SQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为 8TB。 My SQL
5、 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 My SQL 系统。第 2 章 My SQL 数据库的安装与配置1.所需 My SQL 安装包mysql-5.0.41_Setup. EXE2.安装方法步骤图解1运行安装程序下一步2.选择“Custom”自定义安装,下一步3.这里可以将不需要的安装删除,可以更改安装目录,下一步4.单击“Install”按钮,开始安装5.安装中,耐心等一会儿6.这里是询问你是否要注册一个 My SQL.com 的账号,或是使用已有的账号登陆 My SQL.com,一般不需要了,点选“Skip Sign-Up”,按“Next”略过此步骤。7.安装完
6、成出现如下界面 现在软件安装完成了,出现上面的界面,这里有一个很好的功能, My SQL 配置向导,不用向以前一样,自己手动乱七八糟的配置 my.INI 了,将 “Configure the My SQL Server now”前面的勾打上,点“Finish” 结束软件的安装并启动 My SQL 配置向导。8.进入配置过程9.选择配置方式 选择配置方式,“Detailed Configuration(手动精确配置)” 、“Standard Configuration(标准配置)”,我们选择“Detailed Configuration”,方便熟悉配置过程。10.选择服务器类型,“Develop
7、er Machine(开发测试类,My SQL 占用很少资源)”、“Server Machine(服务器类型, My SQL 占用较多资源)” 、“Dedicated My SQL Server Machine(专门的数据库服务器,My SQL 占用所有可用资源)” ,大家根据自己的类型选择了,一般选“Server Machine”,不会太少,也不会占满。11.选择 My SQL 数据库的大致用途,“MULTI functional Database(通用多功能型,好)”、“Tran Sac TIONAL Database Only(服务器类型,专注于事务处理,一般)”、“Non - Tran
8、 Sac TIONAL Database Only(非事务处理型,较简单,主要做一些监控、记数用,对 MYL SAM 数据类型的支持仅限于 Non - Tran Sac TIONAL),随自己的用途而选择了,我这里选择“Tran Sac TIONAL Database Only”,按“Next”继续。12.对 INNODB Table space 进行配置,就是为 INNODB 数据库文件选择一个存储空间,如果修改了,要记住位置,重装的时候要选择一样的地方,否则可能会造成数据库损坏,当然,对数据库做个备份就没问题了,这里不详述。我这里没有修改,使用用默认位置,直接按“Next”继续13.选择您
9、的网站的一般 My SQL 访问量,同时连接的数目,“Decision Support(DSS)/OLAP(20 个左右)”、“Online Transaction Processing(OLTP)(500 个左右)” 、“Manual Setting(手动设置,自己输一个数)”,我这里选“Online Transaction Processing(OLTP)”,自己的服务器,应该够用了,按“Next”继续14.是否启用 TCP/IP 连接,设定端口,如果不启用,就只能在自己的机器上访问 My SQL 数据库了,我这里启用,把前面的勾打上,Port Number:3306,在这个页面上,您还可
10、以选择“启用标准模式”(Enable Strict Mode),这样 My SQL 就不会允许细小的语法错误。如果您还是个新手,我建议您取消标准模式以减少麻烦。但熟悉 My SQL 以后,尽量使用标准模式,因为它可以降低有害数据进入数据库的可能性。按“Next”继续15.这个比较重要,就是对 My SQL 默认数据库语言编码进行设置,第一个是西文编码,第二个是多字节的通用 utf8 编码,都不是我们通用的编码,这里选择第三个,然后在 Character Set 那里选择或填入“GBK”,当然也可以用“gb2312”,区别就是 GBK 的字库容量大,包括了 gb2312 的所有汉字,并且加上了繁
11、体字、和其它乱七八糟的字使用 My SQL 的时候,在执行数据操作命令之前运行一次“SET NAMES GBK;”(运行一次就行了,GBK 可以替换为其它值,视这里的设置而定),就可以正常的使用汉字(或其它文字)了,否则不能正常显示汉字。按 “Next”继续。16.选择是否将 My SQL 安装为 windows 服务,还可以指定 Service Name(服务标识名称),是否将 My SQL 的 bin 目录加入到 Windows PATH(加入后,就可以直接使用 bin 下的文件,而不用指出目录名,比如连接,“My SQL.EXE -UUSER Name -PPASS word;”就可以了
12、,不用指出 My SQL.EXE 的完整地址,很方便),我这里全部打上了勾,Service Name 不变。按“Next”17 这一步询问是否要修改默认 root 用户(超级管理)的密码(默认为空),“New root password”如果要修改,就在此填入新密码(如果是重装,并且之前已经设置了密码,在这里更改密码可能会出错,请留空,并将“Modify Security Settings”前面的勾去掉,安装配置完成后另行修改密码),“Confirm (再输一遍)”内再填一次,防止输错。“Enable root access from remote machines(是否允许 root 用户在
13、其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它)”。最后“Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括查询)”,一般就不用勾了,设置完毕,按 “Next”继续。18.确认设置无误,如果有误,按“Back”返回检查。按“Execute”使设置生效。19.设置完毕,按“Finish”结束 My SQL 的安装与配置这里有一个比较常见的错误,就是不能“Start service”,一般出现在以前有安装 My SQL 的服务器上,解决的办法,先保证以前安装的 My SQL 服务器彻底卸载掉了;不行的话,检查是否按上
14、面一步所说,之前的密码是否有修改,照上面的操作;如果依然不行,将 My SQL 安装目录下的 data 文件夹备份,然后删除,在安装完成后,将安装生成的 data 文件夹删除,备份的 data 文件夹移回来,再重启 My SQL 服务就可以了,这种情况下,可能需要将数据库检查一下,然后修复一次,防止数据出错。安装路径不要带有中文!也不能有空格括号之类的,否则就会遇到下图显示的错误到此我们的 My SQL 安装配置完成,我们需要测试 My SQL 是否真的安装配置成功。在我们的 CMD 命令行下输入 net start My SQL看是否能启动服务;使用工具 NAVI cat Lite for
15、My SQL看是否能够链接到 My SQL 数据库第 3 章 数据库和表的操作1.SQL 语句分类DQL(Data Query Language,数据查询语言)查询数据库中的数据SELECTDML(Data Manipulation Language,数据操作语言)插入、删除和修改数据库中的数据;INSERT、 UPDATE 、DELETE 等;DCL( Data Control Language,数据控制语言)用来控制存取许可、存取权限等;GRANT、REVOKE 等;DDL( Data Definition Language,数据定义语言)用来建立数据库、数据库对象和定义其列CREATE
16、、DROP 等事务控制语言(Tran Sac TIONAL Control Language, TCL)COMMIT、ROLLBACK2.SQL 语句书写规则书写 SQL 语句应遵循以下规则:SQL 语句不区分大小写字符值和日期值区分大小写SQL 语句可以写成一行或多行关键字不能简写或分割于多行子句通常置于单独行这样更具可读性并便于编辑Tab 和缩进的使用可以提高程序的可读性关键字最好大写,其他词诸如表名、列名使用小写3. SQL 中的注释:SQL 标准:多行注释: /* */。单行注释: -My SQL:“#”4.数据库对象的命名规则必须以字母开头可包括数字和三个特殊字符(# _ $)不要使
17、用 My SQL 的保留字( 保留字与关键字 My SQL 数据库系统的 用户只能使用,不能用它来定义 表的名称与字段名)同一 Schema 下的对象不能同名5.列类型My SQL 支持多种列类型:数值类型、 日期/时间类型、 字符串( 字符)类型My SQL 中的数值数据类型:数值数据类型-整数数值数据类型-浮点数日期/ 时间类型字符串类型数据库的操作查看数据库: show databases;创建数据库: create database if not exists 数据库名;删除数据库: drop database 数据库名;使用数据库 use 数据库名表的操作显示当前数据库中已有的数据表
18、的信息:show tables;查看数据表中各列的信息:DESCRIBE|DESC 表名 列名;查看表的详细结构:show create table 表名G;备注:如果不加”G”参数,显示的结果可能非常混乱;加上该参数可以使结果更加直观,易于查看。创建表:CREATE TABLE 表名(列名 列类型,列名 列类型);删除表:DROP TABLE 表名修改表结构:增加列ALTER TABLE 表名 ADD 列名 列类型;修改列类型ALTER TABLE 表名 MODIFY 列名 列类型;列改名ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;删除列ALTER TABLE 表名
19、DROP 列名;更改表名ALTER TABLE 表名 RENAME 新表名;RENAME TABLE 表名 TO 新表名;支持一次重命名多个表。RENAME TABLE old_table1 TO tmp_table,new_table TO old_table,tmp_table TO new_table;表的约束:约束约束用于确保数据库数据满足特定的商业规则。约束是表级的强制规定,约束可分为列级、表级约束两种:列级约束是字段定义的一部分,只能应用在一个列上表级约束是独立于列的定义定义约束的关键字 constraint。大部分数据库都支持以下五种约束:NOT NULL(非空)如果在列上定义了
20、 not null,那么当插入数据时,必须为列提供数据。not null 约束只能定义在列级;UNIQUE(唯一):当定义了唯一约束后,该列值不能是重复的,但是可以为 null。被定义的唯一性约束,会自动建立一个唯一性的索引;UNIQUE 约束既可以定义在列级,也可以定义在表级;注意:如果字段定义为 UNIQUE 约束时,允许包含多个 NULL 值。PRIMARY KEY(主键)用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为 null。需要说明的是:一张表最多只能有一个主键,但是可以有多个 unique 约束。My SQL 中会自动产生主键索引;主键约束既可以定义在列级
21、,也可以定义在表级;FOREIGN KEY(外键)用于定义主表和从表之间的关系。外键约束要定义在从表上,主表则必须具有主键约束或是 unique 约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。一个表中可以定义多个外键约束;My SQL 中会自动产生外键键索引;外键约束既可以定义在列级,也可以定义在表级;CHECK(检查)检查性约束,检查输入的每一个数据,只有符合条件的数据才允许插入到 表中。check 表达式的结果必须是一个布尔值check 约束既可以定义在列级也可以定义在表级。所有的存储引擎均对 CHECK 子句进行分析,但是忽略 CHECK 子句。添加约束可增
22、加或删除约束,但不能直接修改;可使约束启用和禁用只要是可以使用表级约束语法来定义的约束,都可以通过 add constraint 来增加该约束。语法:ALTER TABLE tableADD CONSTRAINT constraint_name type (column);非空约束必须使用 MODIFY 子句增加ALTER TABLE table MODIFY column type not null;添加约束示例给学生表添加约束:1. 将 sid 设为主键alter table stu add constraint pk_sid primary key(sid);2. 为 sname 添加唯
23、一约束alter table stu add constraint uq_sname unique(sname);3. 性别默认为男alter table stu modify sex char(2) default 男;注意:默认值不是约束,要加默认值可以在建表时添加或修改表结构。4. 性别为非空alter table stu modify sex char(2) not null; 5. 给 classId 添加外键alter table stu add constraint fk_classId foreign key (classId) references classes(class
24、Id);删除定义的约束删除定义的约束删除约束示例:删除主键约束alter table stu drop primary key;注意:如果主键列有自增长列,必须先删除自增长,再删除主键:alter table stu change tno tno int(11);删除 not null 约束alter table stu modify sex char(2) ;删除唯一约束alter table stu drop index uq_tname;删除外键约束alter table stu drop foreign key fk_stu_sc;表级约束和列级约束列级定义:是在定义列的同时定义约束如
25、在 classes 表定义主键约束:create table classes(classId number(2) constraint pk_cid primary key, -给约束取名字cname varchar2(12);表级定义:是指在定义了所有列后,再定义约束。注意:not null 约束只能在列级上定义。以建立 stu 表时定义主键约束和外键约束为例:creat table stu(sid number(4), sname varchar2(20), classid number(2),constraint pk_sid primary key(sid),constraint uq
26、_sname unique(sname);自动增长和默认值作业:创建数据库:school在其中创建表:stu, course, sc添加相应的约束信息。第 4 章 数据更新操作1 课程学习目标:数据的增加数据的修改数据的删除2.插入数据 INSERTINSERT 语句用于完成各种向数据表中插入数据的功能,可以对列赋值一次插入一条记录,也可以根据 select 查询子句获得的结果记录集批量插入指定数据表。语法格式:1.所有字段都插入:INSERT INTO 表名 VALUES(value1,value2 ,value3.);2.插入部分字段: INSERT INTO 表名 (column1,co
27、lumn2,column3,.)VALUES (value1,value2 ,value3,.); 注意:1 插入空值可以用 null,默认值用 default。2 可以使用 last_insert_id()函数获取上一条 insert 命令生成的auto_increment 值。 这是一个面向连接的函数,只对本次会话有效。、插入数据时的注意事项:注意事项 1:每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验;注意事项 2:每个数据值的数据类型、精度和小数位数必须与相应的列匹配;注意事项 3:如果在设计表的时候就指定了某列不允许为空,则必须
28、插入数据;注意事项 4:插入的数据项,要求符合检查约束的要求注意事项 5:具有缺省值的列,可以使用 DEFAULT(缺省)关键字来代替插入的数值;允许为空值的列,可以使用 NULL 关键字来插入空值。修改数据 UPDATEUPDATE 语句用于修改表中一列或多列的值,使用 where 子句限制修改的行。语法格式:UPDATE 表名 SET column1=value1,column2=value2,.WHERE 条件;删除数据 DELETEDELETE 语句向用户提供了删除数据的功能,同 UPDATE 语句一样限定表中哪些行将被删除。语法格式:DELETE FROM 表名 WHERE 条件;T
29、RUNCATE TABLE 表名 ;二者关系:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同,二者均删除表中的全部行。但 TRUNCATE TABLE 速度快,但不可以回滚;DELETE 速度慢,但可以回滚。第五章 数据库查询查询基本语法(单表查询):SELECT FROM WHERE ORDER BY ASC 或 DESC查询全部的行和列select * from stu;查询部分的列:select sid, sname, sex, age from stu;查询满足条件的行的部分列:select sid, sname ,sex from stu w
30、here age=20;SQL 操作符算术运算符:+ - * / % 如:select sal*12 from emp;关系运算符: = between, in, like, is null, 注意:字符类型不区分大小写,binary 类型区分大小写;如果字符串的后面有空白符,则会自动忽略。逻辑运算符:and or not, 使用别名:格式:列名 别名 或 列名 as 别名如:select empno, sal*12 “年工资” from emp;或 select empno, sal*12 as “年工资” from emp;注意:1.如果别名中使用特殊字符,或者是强制大小写敏感 ,或有空格
31、时,都可以通过为别名添加加双引号实现。2. where 子句中不能使用别名。null 值:空值是指不可用、未分配的值空值不等于零或空格任意类型都可以支持空值包括空值的任何算术表达式都等于空字符串和 null 进行连接运算,得到也是 null.如何查询 null 值:使用 is nullselect * from emp where comm is null;select * from emp where comm is not null;通配符使用通配符进行模糊查询:如:查询名字以 S 开头的员工:select * from emp where ename like S%;基本查询使用逻辑操作
32、指定多个查询条件select empno,ename,job,sal from emp where ename =SMITH or ename=FORD;在 where 条件中使用 in:如:查询 SMITH, FORT, KING 的员工号、工作,薪水select empno,ename,job,sal from emp where ename in(SMITH,FORD,KING);在 where 条件中使用 between and :select empno,ename,job,sal from emp where sal between 1000 and 2000;注意:数据库执行 s
33、ql 语句时是从右到左的顺序,所以尽可能把最优化条件写右边。基本查询排序使用 order by 子句进行排序:排序的类型为两种升序 asc 、降序 desc。数字、日期、字符串可以进行排序。NULL 认为是排序中的最大值。排序方式:按单个列排序select * from emp order by sal desc;按多列排序select * from emp order by sal desc, empno ;按别名排序select ename,sal*12 “年薪” from emp order by “年薪” asc;一次插入多条语句select into 语句语句形式为:create table table2 select vale1, value2 from table1;要求:目标表 table2 不存在,因为在插入时会自动创建表 table2,并将 table1 中指定字段数据复制到 table2 中。insert into select from 语句形式为:insert into table2(column1,column2) select col1,col2