Mysql的学习:
一.mysql入门及开启关闭:
1.mysql简介:最普遍的,开源的,关系型,跨平台的数据库,对各种开发语言有着良好的支持,对容量没有限制。mysql大致分为服务器端(mysql)和客户端(mysqld)。
2.mysql的打开:执行安装目录下的bin文件夹中的mysql.exe可以直接打开mysql。 同样的通过cmd命令进入相同的安装路径,然后执行mysql -uroot也可以打开。
在用cmd执行mysql-uroot时,我遇到了一个问题:在此处错误的原因:我通过匿名用户登录Mysql服务器,没有创建数据库的权限。应该使用代码 mysql –h localhost –u root –p(从前到后依次为主机地址,用户名,密码)
(实际上 密码输入错误也是返回这个信息)
如果配置环境变量,可以将地址复制进入path变量中。
3.关闭mysql 1.可以通过控制面板中-管理-服务中找到mysql来关闭。
2.可以通过cmd中输入net stopmysql 来关闭,net start mysql来关闭。
3.通过quit和exit在mysql中退出。
二 MySQL的基本命令行
输入密码进入MySQL之后,出现“mysql>”的提示,说明我们可以开始输入命令。
(对数据库的操作)
1. show databases;(记得加分号) 作用:显示所有的数据库 如果输入showdatabases\g 有同样的效果。
2. use xxxx;作用:使用名称为xxxx的数据库。成功之后会显示Databasechanged。
3. create database if not existsxxx default character set utf8 作用:创建一个新的数据库 xxx为新数据库的名字。XXX之后的可以省略,其作用是指定字符集。
4. drop xxx 作用:删除一个数据库。
(对数据表的操作)
5. show tables;作用:在使用某个数据库之后,显示数据表
6. select * from xxx 作用:可以显示某张数据表的全部内容。
7. select * from xxx where key(key在此为数据表的一项内容)=“xxx” 作用:在指定的表中查询指定内容。
(创建账号)
8. grant all on batabase_name.* to“newusername”@”the_serve_name” identified by “password”
(查看所有用户)
9. select host,user,password frommysql.user
(创建一个数据表)
10. create table student (idint(10) primary key auto_increment,name var char(30),age tinyint(2));
创建了一个ID自增为int,name为字符串,age为tinyint的表。
或者:
Create tablestu(id int(10) primary keyauto_increment,name char(30) not null,sex tinyint(1) default 0)defaultcharacter set UTF8 engine myisam; id为自增,name不能为null,sex默认为0 指定了字符集和处理引擎
(描述一张表)
11. desc tables_name
(像表中加入内容)
12. insert into student(name,age)values(“xxx”,xx);(插入的是10的表)
(将一个数据库导出作为文件保存)
13. mysql –hlocalhost –uroot –p xxxdatabases_name >d:/filename.sql;
(将一个外部的文件导入作为数据库)
14. mysql –urootdatabases_name
由于外部的文件可以导入,所以其内部语句也会被执行,例如一个sql文件里只有一句select * from table‘s name 那么执行这个文件相当于执行了一遍该命令。
(修改表)
15. alter table stu add xxxdint(10);
像表中加入一个标签为xxx
三 MySQL的数据类型定义与选择
1. 字符集:在创建数据库的时候可以指定字符集,创建表示也可以指定字符集,当指定了数据库的字符集而不指定表的字符集时,会就近采用数据库的字符集,所以为了避免以后再与服务器端的交互产生乱码,所以需要指定表的字符集。
2. Mysql的数据类型:整型(十进制 十六进制 八进制) 浮点数 字符串 null
整型的类别 tinyint smallint mediumint int bigint 左->右 范围变大
浮点数类型 float double decimal 左->右 进度变大
四.SELECT查询 like模糊查询 as 别名定义规则 逻辑运算符
1.select语句
Select * from 显示一张表的全部信息,返回的字段信息是默认的。
Select version(); 显示mysql的版本信息
Set @s=2 设定s的值为2
Select @s*200; 可以进行运算将s*200,注意在此只是运算,不会改变s原本的值的大小。例如s=2,
Select @s*10的结果是20,此时Select @s+10的结果不是30,而是12。
Select xxx,xxx,xxx from tablename wherekey=xxx;查询语句查询以下信息,从该表中,且键值为。
2.模糊查询
当查询的键值为字符串时,可以使用“%xxx%”来查询,但必须包含like关键字。
还可以添加if语句来输出
3. as别名:
Select if(sex,”girl”,”boy”) as Sex,qq,id,sname from stu;来改变输出时的结果。
4.逻辑条件 “与”
Select * from stu where qq like “2014%” and sex=0;来改变输出时的结果。
类似的“或”命令为or 也可以执行查询。
5.conncat连接 可以输出为一张表
五.LIMIT语句查询部分内容 distinct去除重复ORDER BY排序方式及子表操作
1.limlt语句
Limit语句可以限制数据每次的存取量。例如 select * from stu limit 3 就代表取出所有记录中的前三条。
2.orderby语句
Order by语句可以实现按照某一关键字的升序或降序排列
Select *from stu order by id desc 是降序
3.limit 和 order by的混合使用
此时表示按照生日升序排列,并显示最小的两个。
4查找id第二大的学生
5.还可以指定查询大于某个值,或小于某个值的记录:
Select * from stu where birthday >=xxx;
6.查询子句
通过子句查找到指定的元素,然后生日比其大的值被查询到。
7.去重操作
六.字符集utf8 gbk big5 utf8 与character set与校对规collaction则二进制与非二进制字符串类型使用
在数据库中,存储方式一般分为二进制的存储方式和非二进制的存储方式。
二进制的存储方式一般用于声音图像等二进制数据,这种数据的存储方式是与字符集无关的,在实际存储中,我们也不是直接把图像等存入数据库,而往往保存的是它们的地址,在调用的时候读取它们的地址。
非二进制的存储方式一般用于charvchar text等的文本信息。这个时候我们需要用到utf8 big5 gb2312等字符集,为什么存储图像的时候用二进制而非字符集呢?因为如果在调用时不加说明,例如网页中,就会把这种二进制数据默认是文本信息读取,读取的结果往往就是乱码。
不同的字符集中所编码的字符不同,同一语言中所包含的字符的数量也不同,存储的方式也不同。
例如:gb2312 包含6700个汉字 每个占两个字节。
Big5 繁体字符 13000个汉字 每个占两个字节。
Gbk 21000个汉字每个占两个字节。1-3字节
UTF8 基于unicode(万国码),国际化的标准组织制定的一套涵盖世界上所有语种所有符号的方案。
显示支持的字符集命令:showcharacter set
通过这个命令可以查看数据的长度
校对规则(collation):是在字符集内用于比较字符的一套规则,主要作用是比较与排序,比如定义'A'
每个字符集有一个或多个校对规则,并且每个校对规则只能属于一个字符集,有的字符集不需要校对规则。
七.字符集操作原理与乱码解决方案character_set_client_character_set_connection_character_set_results
第一个是客户端字符集,第二个是连接字符集,第三个是结果字符集。
字符操作中的乱码现象要从服务器与客户端的交互说起
如果我们要从客户端发送一条命令到服务器端查询命令,而二者的字符集又不同,那么查询便可能无效,所以:1.我们首先把客户端的字符集转换为关系字符集
2.转换为关系.字符集后再转换为服务器的需要查询的字段的字符集,得出结果(不能可将服务器端的结果进行转化,会做大量的无用功)。
3.得出的结果不能直接传回客户端,否则会乱码,所以我们需要一个结果字符集,转化之后传给客户端。
4.客户端在显示时,如在html中时,如果操作不当,也会乱码。
以上四个步骤中任一有误,皆可能造成乱码。
八 SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。
在此提供一篇博文地址,作为详细讲解:http://blog.csdn.net/stilling2006/article/details/8526458