mysql自学归纳.docx
《mysql自学归纳.docx》由会员分享,可在线阅读,更多相关《mysql自学归纳.docx(35页珍藏版)》请在冰豆网上搜索。
mysql自学归纳
第一天Mysql的概述:
数据库
数据库(DataBase,简称DB)是有组织有结构存储在计算机内部的可共享的数据集合。
常见数据库:
oraclemysqlsqlserverDB2等
LAMP(linuxapachemysqlphp)
Mysql的下载:
按照用户群分:
MYSQL数据库目前分为社区版和企业版。
区别在于社区版是自由下载而且免费的,但是官方不提供任何技术支持。
企业版是收费的,不能在线下载
下载地址:
Mysql的卸载:
1.找到开始-----设置-----控制面板----管理工具----服务----将mysql服务停止
2.开始-----设置-----控制面板----添加或删除程序----卸载mysql数据库
3.找到安装目录,将目录删除
4.重新启动电脑
Mysql的安装:
……省略
Mysql的进入:
语法:
mysql–u用户名–p回车
entrypassword:
****
Mysql的退出:
语法:
exit或quit
SQL分类:
SQL命令行出现乱码:
DDL数据定义:
CREATEDROPALERT
创建:
createdatabaseifnotexists数据库名称
使用:
use数据库名称
查看所有数据库:
showdatabases;
查看某个数据库:
showcreatedatabase数据库名称
删除某个数据库:
dropdatabaseifexists数据库名称
修改:
alterdatabase数据库名称charactersetgb2312
备份:
mysqldump–uroot–p数据库名称>保存文件路径该命令要在windows平台上使用,并且这个是mysql专用
恢复:
Source文件路径该命令在mysql下执行
显示表的创建结构showcreatetable表名
以表格方式显示字段desc表名;或者describe表名;
查看表中列的信息showcolumnsfrom表名;
使用altertable语句追加,修改,或删除列的语法.
追加:
altertable表名add(column列名列类型)
修改列名:
altertable表名change(column列名新列名列类型)
修改列类型:
altertable表名modify(column列名列类型)
删除:
altertable表名drop(column列名)
修改表的名称:
renametable表名to新表名
修改表的字符集:
altertablestudentcharactersetutf8;
1.显示所有数据库
showdatabases;
2.创建数据库
createdatabase数据库名称
例如:
createdatabasemydb;//数据库如果存在,会产生error
createdatabaseifnotexistsmydb;//如果数据库不存在,创建。
不会产生error
以上的创建方式会使用数据库系统提供的默认编码(安装的时候选择的默认编码为utf8)。
3.可以创建一个指定编码的数据库:
createdatabaseifnotexistsmydb1characterset编码;
4.查看mysql支持的字符集
showcharacterset;
5.在创建数据库时指定字符编码与校验规则
createdatabasemydb3characterset编码collate校验值;
6.指定使用某个数据库
use数据库名称
如果要访问的是A数据库下的a表,那么我们就要先使用use指定访问该数据库,才可以访问到这个库下的表。
7.查看某一个指定数据库
showcreatedatabase数据库名称
会显示的是数据库名称与数据库创建语句。
8.删除数据库
dropdatabase数据库名;
dropdatabaseifexists数据库名;
书写时注意:
1.不区分大小写。
2.必须以分号结束。
9.修改数据的字符编码
alterdatabase数据库名称charactersetgb2312
10.备份数据库
创建一张表
createtableemp(
idint,
namevarchar(20)
)
显示已创建表的结构:
向表中插入记录
insertintoempvalues(1,'tom');
在windows平台下,执行mysqldump命令。
mysqldump-uroot-p要备份的数据名称>保存的文件路径
c:
\>mysqldump-uroot-pmydb>d:
\my.sql
可在磁盘下查看备份的文件:
11.恢复数据。
在mysql下可以使用source备份文件的路径名将数据进行恢复。
sql>sourced:
\my.sql
12.表中的字段的类型
createtableifnotexists表名
(
字段1类型,
字段2类型,
字段3类型,
)
createtableemployee(
idint(5),
namevarchar(20),
salaynumeric,
birthdaydate,
distext,
imgblob
)
描述整数可以使用
tinyint有符号-128-127,无符号0-255
smallint有符号-32768-32767,无符号0-65535。
Mediumint有符号-8388608-8388607,无符号0-16777215。
int有符号-2147483648-2147483647,无符号0-4294967295。
描述浮点数
float
double
decimal
numeric
字符
char(10)定长字符串0-65535
varchar(10)可变长度字符串0-65535
text大文本大于65535个可以使用
blob描述二进制。
日期
dateyyyy-mm-dd
datetimeyyyy-mm-ddhh:
mm:
ss
yearyyyy
timestamp可以根据指定长度显示信息。
题:
创建一个员工表
字段属性
Id整形
name字符型
gender字符型或bit型
birthday日期型
reg_date日期型
job字符型
salary小数型
resume大文本型
createtableemployee(
idint(3),
namevarchar(20),
genderchar(10),
birthdaydate,
reg_datedatetime,
jobvarchar(50),
salarynumeric(8,2),
resumetext
)
11.关于表的查看操作台
表结构desc表名
查看创建表的语句showcreatetable表名
查看表中列的信息showcolumnsfrom表名
12.关于表的结构操作
添加列:
在上面员工表的基础上增加一个img列。
altertableempaddimgblob;
修改列:
修改name列,使其长度为30。
altertableempmodifynamevarchar(30);
列名name修改为username
altertableemployeechangecolumnnameusernamevarchar(20);
对表进行重命名:
表名改为users。
renametableemployeetousers;
删除列:
删除gender列:
altertablestudropgender;
显示数据库中的表:
DML数据操纵:
INSERTDELETEUPDATESELECT
使用insert语句向表中插入数据。
insertinto表名(列名1,列名2...)values(值1,值2...)
1.插入的数据应与字段的数据类型相同
2.数据的大小应在列的规定范围内,例如:
不能将一个长度为80的字符串加入到长度为40的列中。
3.在values中列出的数据位置必须与被加入的列的排列位置相对应。
4.字符和日期型数据应包含在单引号中。
5.插入空值,不指定或insertintotablevalue(null)//“”
mysql中文乱码:
mysql有六处使用了字符集,分别为:
client、connection、database、results、server、system。
client是客户端使用的字符集。
connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server是服务器安装时指定的默认字符集设定。
system是数据库系统使用的字符集设定。
查看和修改数据库字符集
showvariableslike'character%';
setcharacter_set_results=gbk;
setcharacter_set_client=gbk;
使用update语句修改表中数据。
update表名set列名1=值1[,列名2=值2...][where条件]
1.update语法可以用新值更新原有表行中的各列。
2.set子句指示要修改哪些列和要给予哪些值。
3.where子句指定应更新哪些行。
如没有WHERE子句,则更新所有的行。
使用delete语句删除表中数据。
deletefrom表名[where条件]
1.如果不使用where子句,将删除表中所有数据。
2.delete语句不能删除某一列的值(可使用update)
3.使用delete语句仅删除记录,不删除表本身。
如要删除表,使用droptable语句。
4.删除表中数据也可使用truncatetable语句,它和delete有所不同,原理是先删除表再创建新表。
Select语句
(1)
1.基本select语句
select[distinct]*|(column1,column2,column3...)from表名
2.select指定查询哪些列的数据。
3.column指定列名。
4.*号代表查询所有列。
5.from指定查询哪张表。
6.distinct可选,指显示结果时,是否剔除重复数据
Select语句
(2)
1.在select语句中可使用表达式对查询的列进行运算
select*|{column1|expression,column2|expression,..}from表名;
2.在select语句中可使用as语句
selectcolumnas别名from表名;
2.
在where子句中经常使用的运算符
使用orderby子句排序查询结果。
selectcolumn1,column2.column3...from表名orderbycolumnasc|desc
1.orderby指定排序的列,排序的列即可是表中的列名,也可以是select语句后指定的列名。
2.asc升序、desc降序(默认是升序)
3.orderby子句应位于select语句的结尾。
insert操作
1.insertinto表名values(值1,值2,....)
格式1:
向所有字段插入值
insertintostuvalues(1,'jack','2012-12-12',1000,'goodpeople',null);
格式2:
向指定的字段插入值
insertintousers(id,rname)values(2,'jack');
在向指定字段插入值时,要注意指定的列与值要对应。
name的长度为20,如果插入的数据长度超过20?
insertintostu(id,name)values(3,'aaaaaaaaaaaaaaaaaaaaa');
insertintousers(id,username)values(4,'中');出现问题
因为当前平台所使用的字符编码是GBK,mysql数据库服务器默认编码是utf8.
showvariableslike'character%';
client是客户端使用的字符集。
results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
执行下面两条语句,将它们设置为gbk;
setcharacter_set_results=gbk;
setcharacter_set_client=gbk;
由上图可知:
将数据库的client与results的编码指定成gbk;
但是,推荐的方式:
可以对mysql安装目录下的my.ini文件中对client端的
default-character-set=gbk修改。
现在可以添加中文数据了:
idint(4)问题
insertintostu(id)values(10);
insertintostu(id)values(100);
insertintostu(id)values(1000);
insertintostu(id)values(10000);
如果在创建id时idintUNSIGNED代表的是无符号
默认有符号的。
insert优化操作台
在插入数据时,如果执行多条insert语句,那么可以使用
insertinto表名(字段1,字段2)values(值1,值2),(值1,值2),(值1,值2);
放种操作比执行三条insert效率提高3倍。
insertintoemployeevalues(1001,'宋江','男','1991-6-4',10000,'老大');
insertintoemployeevalues(1002,'林冲','男','1865-7-4',5000,'职员');
insertintoemployeevalues(1003,'小红','女','1451-8-4',6000,'职员');
insertintoemployeevalues(1001,'宋江','男','1991-6-4',10000,'老大'),(1002,'林冲','男','1865-7-4',5000,'职员'),(1003,'小红','女','1451-8-4',6000,'职员');
14.update操作
基本格式
update表名set字段=值where条件;
一般情况下我们在操作时,都有有条件的修改。
updateuserssetusername='fox',birthday='2000-9-9'whereid=2;
如果对多个字段进行修改,那么字段间要加上逗号。
15.delete操作
基本格式
deletefrom表名[where条件]
一般都会添加条件.
delete是删除表内容一般是有条件删除,如果是删除整个表内容,会一条条记录进行判断删除。
truncatetable表名删除表内容。
先记表的结构,droptable,在重新创建表结构。
droptable是删除表的结构。
16.select操作
select*from表名;//在开发中不要使用*
select字段from表名
selectid,name,job,salaryfromusers;
distinct用来去掉重复数据,如果是有多个字段,那么将多个字段都重复的数据显示一次
练习难点:
9、找出姓名以A、B、S开始的员工信息。
select*fromempwhereenamelike'a%'orenamelike'b%';
10、找到名字长度为7个字符的员工信息。
select*fromempwhereenamelike'_______';
11、名字中不包含R字符的员工信息。
select*fromempwhereenamenotlike'%R%';
DCL数据控制:
GRANTREVOKE
第二天统计函数,约束,多表查询:
统计函数:
合计函数-count
count(列名)返回某一列,行的总数
格式:
selectcount(*)|count(列名)fromtablename[WHEREwhere_definition]
注意:
count(name)如果不统计name为null的行
合计函数-sum
sum函数返回满足where条件的行的和
格式:
selectsum(列名){,sum(列名)…}fromtablename[WHEREwhere_definition]
注意:
sum仅对数值起作用,否则会报错。
注意:
对多列求和,“,”号不能少
合计函数-avg
格式:
selectavg(列名){,avg(列名)…}fromtablename[WHEREwhere_definition]
合计函数-max/min
max/min函数返回满足where条件的一列的最大/最小值
使用groupby子句对列进行分组
格式:
selectcolumn1,column2.column3..fromtablegroupbycolumn;
分组(重点)
groupby
作用是在sql根据查询结果,对结果集中的信息按照某个字段进行分组操作。
例如
selectavg(sal)fromempgroupbydeptno;
这段代码的作用是得到每一个部门的平均公资。
having
它的作用是在分组后在进行条件过滤。
注意:
如果是分组后要想进行条件过滤,不可以使用where,只能使用having.
在分组事可以使用统计函数
在mysql中select后面可以出现未分组的字段,但结果没意义。
在oracle中不可以在select后面出现未分组字段。
使用having子句过滤
格式selectcolumn1,column2.column3..fromtablegroupbycolumnhaving...
注意:
Having和where均可实现过滤,但在having可以使用合计函数,having通
常跟在groupby后,它作用于组。
Mysql约束:
约束
数据类型告诉我们需要存储什么样子的数据,而约束告诉我们这些数据具体需要满足的规则。
如:
ageint,我们可以存储负整数,pricefloat,我们可以存储负小数,但是负数是不满足实际规则的,因此我们需要约束。
常见约束
检查约束(MySQL目前不支持)
非空约束notnull
一约束unique
主键约束
外键约束
1.定义唯一约束uniqueunique(列1,列2)
2.定义非空约束notnull
3.定义主键约束
primarykey:
不允许为空,不允许重复
删除主键:
altertabletablenamedropprimarykey;
4.定义主键自动增长
auto_increment
5.主键一般的自动增长中在一起使用。
5.1定义外键约束
constraint外键名foreignkey(外键字段)references主表(映射的键字段)
例如:
constraintordersid_FKforeignkey(ordersid)referencesorders(id),
5.2删除外键约束
altertable表名dropforeignkey外键名.
5.3增加外键约束
altertable表名addconstraint外键名foreignkey(外键字段)
referencesperson(映射的键字段);
例如:
altertablecardaddconstraintpid_fkforeignkey(pid)referencesperson(id);
概念理解:
表的完整性
1)实体完整性:
每条记录有一个唯一的标识符,通常用无任何含义的字段表示。
在设计一张表时,一般会采用一个没有任何含义的字段来标识一个记录。
2)参照完整性:
一张表的某个字段引用另一张表的某个字段值(外键)主要针对多张表。
3)域完整性:
域即单元数据,域中的数值必须符合一定的规则。
键的概念
1)单一主键:
只有唯一字段
2)组合主键:
由多个字段组合起来,形成只一字段
3)外键:
针对多张表之间的关联。
主键约束的特点
1.在mysql中,通过primarykey来定义主键
主键非空,且值唯一
2.在mysql中,删除主键是
alerttable表名dropprimarykey(一个表中只有一个主键)
删除主键后不能插入null值,但可插入重复值。
3.在mysql中可以对主键自动从1开始增加,以后就无需对id主键显示设置值,由系统自动产生。
idint(5)primarykeyauto_increment
如果显示指定id值,则系统不会取默认值,用显示的id去覆盖系统默认值。
主键体现实体完整性,通常用一个没有任何业务含义的单独字段表示
唯一约束的特点
namevarchar(20)unique
值不能重复
Null可以有多次,但"Null"中只能有一
非空约束
notnull
值不能为空。
外键约束的特点
constraint外键名foreignkey(外键字段)references主表(映射的键字段)
多表关联关系种类
1.一对一
例如:
人与身份证
person表
字段idname
card表
字段id