1、MySQL培训人:*启动MySQL服务器 启动MySQL服务器的方法有两种:系统服务器和命令提示符(DOS)1通过系统服务器启动MySQL服务器如果MySQL设置为Windows服务,则可以通过选择“开始”/“管理工具”/“服务”命令打开Windows服务管理器。在服务器的列表中找到mysql服务并右击,在弹出的快捷菜单中选择“启动”命令,启动MySQL服务器,如图所示。启动MySQL服务器2在命令提示符下启动MySQL服务器选择“开始”/“运行”命令,在弹出的“运行”对话框中输入cmd命令,按Enter键进入DOS窗口。在命令提示符下输入:net start mysql按Enter键,即可启
2、用MySQL服务器,如图所示。断开MySQL服务器 1通过系统服务器停止MySQL服务器如果将MySQL设置为Windows服务,则可以通过选择“开始”/“管理工具”/“服务”命令,打开Windows服务管理器,在服务器的列表中右击mysql服务,在弹出的快捷菜单中选择“停止”命令,停止mysql服务,如图所示。停止MySQL服务器 2在命令提示符下停止MySQL服务器选择“开始”/“运行”命令,在弹出的“运行”对话框中输入cmd命令,进入DOS窗口,在命令提示符下输入:net stop mysql按Enter键即可停止MySQL服务器,如图所示。创建数据库CREATE DATABASE 使用
3、CREATE DATABASE语句可以轻松创建MySQL数据库。语法格式如下:CREATE DATABASE 数据库名;在创建数据库时,数据库命名有以下几项规则:l不能与其他数据库重名,否则将发生错误。l名称可以由任意字母、阿拉伯数字、下划线(_)和“$”组成,可以使用上述的任意字符开头,但不能使用单独的数字,否则会造成它与数值相混淆。l不能使用MySQL关键字作为数据库名、表名。l在默认情况下,Windows下数据库名、表名的大小写是不敏感的,而在Linux下数据库名、表名的大小写是敏感的。为了便于数据库在平台间进行移植,建议采用小写来定义数据库名和表名。删除数据库DROP DATABASE
4、 删除数据库可以使用DROP DATABASE语句。语法格式如下:DROP DATABASE 数据库名;数据库基础知识数据库基础知识 数据库基础知识概述 SQL概述 SQL语言数据库基础知识数据库基础知识 数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库档案柜=数据库抽屉=表文件=记录数据库数据库数数数数 据据据据 表表表表存储过程存储过程存储过程存储过程视视视视 图图图图.订单订单订单订单 客户客户客户客户 产品产品产品产品 表产品数据库数据表数据表行(记录)列列(字段字段
5、)数据在表中的存放数据在表中的存放编号姓名年龄民族部门1王涛33汉族人事管理部2李梅27汉族人事管理部存在冗余1127李梅21133王涛1部门编码民族编码年龄姓名编号回族2汉族1民族民族编码市场营销部2人事管理部1部门部门编码为减少数据查找的麻烦,允许数据有一定的冗余为减少数据查找的麻烦,允许数据有一定的冗余数据存储的完整性数据存储的完整性Roll NumberNameAddressBookTaken12Alicia Ruth12,Temple StreetAC09114Jason Darren123,Sunset Blvd.AC04315Mary Beth32,Golden AvenueAC
6、02112Alicia Ruth12,Temple StreetAC04312Alicia Ruth12,Tmple StreetAC01115Mary Beth33,Golden AvenueAC011存在不正确、不准确的数据,数据库存在不正确、不准确的数据,数据库“失去了完整性失去了完整性”姓名姓名不同的地址不同的地址!数据的完整性数据的完整性可靠性可靠性准确性准确性数据完整性数据完整性完整性分类完整性分类数据实体完整性字段完整性引用完整性自定义完整性数据实体完整性数据实体完整性河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东
7、定陶李山0010012.地址地址姓名姓名学号学号江西南昌雷铜0010014约束方法:唯一约束、主键约束、标识列约束方法:唯一约束、主键约束、标识列字段完整性字段完整性河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东定陶李山0010012.地址地址姓名姓名学号学号湖北江门李亮8700000000约束方法:限制数据类型、检查约束、外键约束、约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束默认值、非空约束引用完整性河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东
8、定陶李山0010012地址地址姓名姓名学号学号科目学号分数数学001001288数学001001374语文001001267语文001001381数学001001698约束方法:外键约束约束方法:外键约束自定义完整性自定义完整性AV121322乔峰CV0016AV372133玄痛CV0015AV378291沙悟净AV0014AV378290猪悟能AV0013AV378289AV378289孙悟空AV0012.会员证会员证用户姓名用户姓名用户编号用户编号帐号姓名信用.00192孙悟空700288猪悟能612333段誉890111虚竹4093000岳不群-10触发器:检查信用值约束方法:规则、存储
9、过程、触发器约束方法:规则、存储过程、触发器完整性包括完整性包括输入的类型是否正确?年龄必须是数字输入的格式是否正确?身份证号码必须是18位是否在允许的范围内?性别只能是”男”或者”女”是否存在重复输入?学员信息输入了两次是否符合其他特定要求?信誉值大于5的用户才能够加入会员列表列值要求(约束)整行要求(约束)SQL概述什么是SQL?SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL语法组成DML(Data Manipu
10、lation Language数据操作语言)查询、插入、删除和修改数据库中的数据;SELECT、INSERT、UPDATE、DELETE等;DCL(Data Control Language数据控制语言)用来控制存取许可、存取权限等;GRANT、REVOKE 等;DDL(Data Definition Language数据定义语言)用来建立数据库、数据库对象和定义其列CREATE TABLE、DROP TABLE、ALTER TABLE 等功能函数日期函数、数学函数、字符函数、系统函数等MySQL中使用SQL语言几点说明属于一个SQL语句,使用分号(;)结尾,否则mysql认为语句没有输入完。
11、箭头(-)代表SQL语句没有输入完取消SQL语句使用(c)SQL语句关键字和函数名不区分大小写(Linux区分,Windows不区分)使用函数时,函数名和后面的括号之间不能有空格MySQL数据类型数据类型种类数值列类型字符串列类型日期和时间列类型数据类型种类数值型分为整型和浮点型整型:可以由十进制和十六进制表示整数由数字序列组成,如:1,100。由十六进制表示方法:0 x且后面加19和AF 的任意数字或字母,并且0 x中的X不能大写。浮点型:浮点数由一个数字加一个小数点再加上一个数字组成。两个数字序列不能同时为空。日期和时间值是存储如“2005-1-1”或者“12:00:00”这样的数值的值。
12、在MySQL中日期是按”年-月-日”的顺序。NULL值是一种无类型的值,表示“空,什么也没有”。数值列类型 MySQL为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。数值列类型所有数值列类型的类型名及其说明和所占的字节数见下表:数值列的完整性约束数值列的完整性约束AUTO_INCREMENT 自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,一个表中最多能有一个有此属性的列。对于想使
13、用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。NULL和NOT NULL默认为NULL,即插入值时没有在此字段插入值时自动填NULL,如果指定了NOT NULL,则必须在插入值时在此字段添入值,不允许插入NULL值。字符串字符串列类型所有字符串列类型及其说明和所占的字节数见下表:CHAR和VARCHAR类型CHAR类型和VARCHAR类型长度范围都是0255之间的大小。他们之间的差别在于MySQL处理存储的方式:CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数
14、(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。BLOB和TEXT类型BLOB是二进制大对象,如果想存储二进制数BLOB将是最佳选择,而TEXT与之相同,只是BOLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分大小写)。ENUM 和SET类型是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。(不推荐使用)日期和时间列类型所有时间和日期列类型的类型名及其说明和所占的字节数见下表:说明:每个时间和日期列类型都有一个零值,当插入
15、非法数值时就用零值来添加表示日期时必须先按:年,月,日的顺序给出DATE,TIME,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为“YYYY-MM-DD”,“hh:mm:ss”和“YYYY-MM-DD hh:mm:ss”,对于DATETIME类型,日期和时间部分都需要TIMESTAMP时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录总结:常用数据类型分类备注和说明数据类型说明二进制数据类型存储非子符和文本的数据BLOB可用来存储图像文本数据类型字符数据包括任意字母、符号或数
16、字字符的组合char固定长度的非 Unicode 字符数据varchar可变长度非 Unicode 数据text存储长文本信息日期和时间日期和时间在单引号内输入time时间date日期datetime 日期和时间数值型数据该数据仅包含数字,包括正数、负数以及浮点数intsmallint整数floatdouble浮点数货币数据类型用于财务数据decimal定点数Bit数据类型表示是/否的数据bit存储布尔数据类型创建数据库建立数据库操作:语法:create database 数据库名叙述:创建一个具有指定名称的数据库。如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。例:建立一
17、个student库。mysql create database student;mysql数据库备份及恢复命令mysqldump,source的用法还原一个数据库:mysql-h localhost-u root-p123456 数据库名 数据库所在路径(d:数据库.sql)备份MySQL数据库的命令mysqldump-hhostname-uusername-ppassword databasename backupfile.sql直接将MySQL数据库压缩备份mysqldump-hhostname-uusername-ppassword databasename|gzip backupfil
18、e.sql.gz备份MySQL数据库某个(些)表mysqldump-hhostname-uusername-ppassword databasename specific_table1 specific_table2 backupfile.sql同时备份多个MySQL数据库mysqldump-hhostname-uusername-ppassword databases databasename1 databasename2 databasename3 multibackupfile.sql仅仅备份数据库结构mysqldump no-data databases databasename1 d
19、atabasename2 databasename3 structurebackupfile.sql备份服务器上所有数据库mysqldump all-databases allbackupfile.sql还原MySQL数据库的命令mysql-hhostname-uusername-ppassword databasename backupfile.sql还原压缩的MySQL数据库gunzip 导出的文件名mysqldump-u root-p dataname dataname.sql这个时候会提示要你输入root用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录
20、中.2.导出一个表mysqldump-u 用户名-p 数据库名 表名 导出的文件名mysqldump-u root-p dataname users dataname_users.sql3.导出一个数据库结构mysqldump-u wcnc-p-d add-drop-table smgp_apps_wcnc d:wcnc_db.sql-d 没有数据 add-drop-table 在每个create语句之前增加一个drop table4.导入数据库常用source 命令进入mysql数据库控制台,如mysql-u root-pmysqluse 数据库然后使用source命令,后面参数为脚本文件(
21、如这里用到的.sql)mysqlsource d:wcnc_db.sql创建表建立表操作:语法:create table 表名(列名1 列类型 ,列名2 列类型 ,.);叙 述:在当前数据库下新创建一个数据表。列类型:表示该列的数据类型。例:建立一个表school,其由两列组成,第一列属性为非空,并做为主键,并自增create table school(school_id int(10)not null auto_increment primary key,school_name varchar(20);常见完整性约束:PRIMARY KEY 主码约束(主键)UNIQUE唯一性约束NOT NU
22、LL非空值约束AUTO_INCREMENT用于整数列默认自增1UNSIGNED 无符号整数DEFAULT default_value默认值约束DEFAULT cur_timestamp 创建新记录时默认保存当前时间(仅适用timestamp数据列)ON UPDATE cur_timestamp 修改记录时默认保存当前时间(仅适用timestamp数据列)CHARACTER SET name 指定字符集(仅适用字符串)主键与外键数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。主键:帮助MySQL以最快的速度把一条特点的数据记录的位置
23、确定下来。主键必须是唯一的主键应该是紧凑的,因此整数类型比较适合外键:引用另外一个数据表的某条记录。外键列类型尽可能与主键列类型保持一致外键列应该加上NOT NULL主键create table student(sid int not null auto_increment,name varchar(20)not null,primary key(sid);外键(自动检查外键是否匹配,仅适用InnoDB)create table score(cid int not null auto_increment primary key,score int,sid int,foreign key(sid
24、)references student(sid);主表和从表1、当主表中没有对应的记录时,不能将记录添加到子表成绩表中不能出现在学员信息表中不存在的学号;2、不能更改主表中的值而导致子表中的记录孤立把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变;3、子表存在与主表对应的记录,不能从主表中删除该行不能把有成绩的学员删除了4、删除主表前,先删子表先删学员成绩表、后删除学员信息表删除数据库或表操作删除表操作语法:drop table if exists tab_name,tab_name.叙述:从数据库中删除给定的表。如果给出if exists 子句,则删除不存在的表不会出错。删除数据
25、库操作语法:drop database if exists db_name叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果给出if exists 子句,则删除不存在的数据库不会出错。插入记录操作语法:叙述:如果表名后面没写字段名,则默认是向所有的字段添加值,另外字符串值应该用 或“”引号括起来举例1:向people表中添加一条记录:insert into people(name,age)values(“zhangsan”,20);INSERT INTO 列名列名 VALUES 插入案例创建一张学生信息表,往表中插入数据create table students(
26、scode int not null auto_increment,sname varchar(20)not null,saddress varchar(20)default未知,sgrade int,semail varchar(20),ssex bit,primary key(scode);插入数据行 1注意事项注意事项1:1:每次插入一行数据,不可能只插入半行或者几列数据,因每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验;此,插入的数据是否有效将按照整行的完整性的要求来检验;INSERT INTO Students(SName,SA
27、ddress,SGrade,SEmail,SSEX)VALUES(小明)插入数据行 2注意事项注意事项2:2:每个数据值的数据类型、精度和小数位数必须与相应的列每个数据值的数据类型、精度和小数位数必须与相应的列匹配;匹配;INSERT INTO Students(SName,SAddress,SGrade,SEmail,SSEX)VALUES(张青裁,上海松江,ZQC,ZQCS,男)插入数据行3注意事项注意事项4:4:如果在设计表的时候就指定了某列不允许为空,则必须插如果在设计表的时候就指定了某列不允许为空,则必须插入数据;入数据;INSERT INTO Students(SAddress,S
28、Grade,SEmail,SSEX)VALUES(上海松江,6,ZQCS,0)插入数据行4注意事项注意事项6:6:具有缺省值的列,可以使用具有缺省值的列,可以使用DEFAULTDEFAULT(缺省)关键字来代(缺省)关键字来代替插入的数值替插入的数值INSERT INTO Students(SName,SAddress,SGrade,SEmail,SSEX)VALUES(张青裁,DEFAULT,6,ZQCS,0)插入多行数据INSERT INTO(列名)VALUES(),(),()INSERT STUDENTS(SName,SGrade,SSex)VALUES(测试女生1,75,0),(测试女
29、生2,77,0),(测试女生3,83,0),(测试男生1,81,1),(测试女生4,90,0),(测试男生2,94,1),(测试女生5,51,0),(测试男生3,53,1);更改记录操作语法:叙述:where 子句是判断语句,用来设定条件,限制只更新匹配的行,如果不带where子句,则更新所有行数据。举例:将student表中的所有学生名称为Alex的改为Tom:update student set sname=Tom where sname=Alex;UPDATE SET WHERE 更新数据行UPDATE Student SET SSEX=0UPDATE Student SET Sdept
30、=家政系 WHERE Sdept=刺绣系UPDATE ScSET Grade=Grade+5WHERE Grade=95删除记录操作语法:叙述:此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除。举例:删除student表中的所有年龄小于18岁的记录:delete from student where sage18;DELETE FROM WHERE 补充说明删除学生编号为95005的学生信息包括成绩信息delete from student,sc using student,sc where student.sno=sc.studentid and studen
31、t.sno=95005;说明:表和字段的引用方式有两种:绝对引用和相对引用绝对引用:数据库名.表名(.字段名)相对引用:表名.(字段名)删除数据行河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东定陶李山0010012.地址地址姓名姓名学号学号980010016数学810010013语文670010012语文740010013数学880010012数学.分数学号科目DELETE FROM 学员信息表 WHERE 学号=0010012 什么是查询?SELECT*FROM SALESApplication Logic查询请求查询结果集客
32、户程序A B C D E F G SQL SERVER查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来查询记录操作from子句:指定查询数据的表where子句:查询数据的过滤条件group by子句:对匹配where子句的查询结果进行分组having子句:对分组后的结果进行条件限制order by子句:对查询结果结果进行排序,后面跟desc降序或asc升序(默认)。limit子句:对查询的显示结果限制数目procedure子句:查询存储过程返回的结果集数据查询举例SELECT FROM WHERE ORDER BY
33、ASC或或DESC列名称列名称SELECT SNo,SName,Sdept表名表名FROMStudent过滤条件过滤条件WHERESSEX=0排序条件排序条件ORDER BYSNoSELECT SNo,SName,Sdept FROM Students WHERE SSEX=0 ORDER BY SNo 使用集函数SQL提供的统计函数称为集函数.主要的集函数:记数函数:count(列名)计算元素的个数求和函数:sum(列名)对某一列的值求和,但属性必须是整型计算平均值:avg(列名)对某一列的值计算平均值求最大值:max(列名)找出某一列的最大值求最小值:min(列名)找出某一列的最小值在WH
34、ERE子句中使用谓词 BETWEEN AND :在两数之间NOT BETWEEN AND:不在两数之间IN:是否在特定的集合里(枚举)NOT IN:与上面相反LIKE:是否匹配于一个模式IS NULL(为空的)或 IS NOT NULL(不为空的)REGEXP:检查一个值是否匹配一个常规表达式。多表查询问题学员内部测试成绩查询的每次显示的都是学员的编号信息,因为该表中只存储了学员的编号;实际上最好显示学员的姓名,而姓名存储在学员信息表;如何同时从这两个表中取得数据?多表查询分类连接查询同时涉及多个表的查询称为连接查询用来连接两个表的条件称为连接条件内连接(INNER JOIN)外连接左外联结 (LEFT JOIN)右外联结 (RIGHT JOIN)外连接与普通连接的区别普通连接操作只输出满足连接条件的元组外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出:子查询子查询:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为子查询。一个SELECT-FROM-WHERE语句称为一个查询块例如:select sname from student where sno in(select studentid from sc where courseid=2);