六天带你玩转MySQL

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据库基础1.什么是数据库?通俗说法,存储数据的仓库;正式点的说法,高效存储和处理数据的介质(主要是磁盘和内存)2.数据库的分类?根据存储数据的介质不同,将数据库分为两类:关系型数据库和非关系型数据.3.数据库主要产品?关系型数据库大型:Oracle,DB2;中型:SQL-Server,MySQL小型:Access;非关系型数据库:memcached,mongodb,redis4.两种数据库区别关系型数据库数据存储在磁盘上,数据安全,但是效率低;非关系型数据库数据存储在内存上,数据不安全,断电会丢失数据,但是效率高;此外,关系型数据库存储结构是二维表,比较浪费空间关系型数据库1.什么是关系型数据库一种建立在关系模型(数学模型)上的数据库.关系模型:一种建立在关系上的模型,包括三个方面:1.数据结构:二维表,解决数据如何存储2.操作指令集合:所有的SQL语句,解决如何处理数据3.完整性约束:表内数据约束(字段与字段),表与表之间约束(外键)关键字说明数据库系统:DBS(databasesystem),一种虚拟系统,是将多种内容关联起来的一个称呼’DBS=DBMS+DBDBMS:DatabaseManagementSystem,数据库管理系统DBA:DatabaseAdministrator,数据库管理员行/记录:本质上是一个东西,都是一条记录列/字段:本质上也是一个东西SQL语句SQL(StructuredQueryLanguage),结构化查询语言,在数据库中90%以上的操作是查询操作SQL分为三部分:1.DDL:DataDefinitionLanguage,数据定义语言,用于维护存储数据的结构(数据库,表),代表指定:creat,alter,drop2.DML:DataManipulationLanguage,数据操作语言,用来对数据进行操作,代表指令:insert,updata,delete,其中内部单独分了一个DQL:DataQueryLanguage,数据查询语言,代表指令select3.DCL:DataControlLanguage,数据控制语言,主要负责用户权限管理,代表指令有:grant,revoke;MySQL数据库MySQL数据库是一种C/S结构的软件,若想访问服务器,必须通过客户端(服务端一直运行,客户端在需要运行时打开)实现交互方式:1.客户端连接认证服务器2.发送SQL指令给服务器3.服务器接收SQL指令,处理指令,返回处理结果给客户端4.客户端接收结果,显示结果5.断开连接:释放资源,能够同时访问服务器的客户端数量有限MySQL数据库对象没办法具体了解数据库内部具体内容,只能粗略分析数据库内部结构数据库内部分为四层:系统(DBMS)-数据库(DB)-数据表(Table)-字段(field)数据库基本操操作登录退出指令登录MySQLmysql-h主机名-u用户名-p-h:该命令用于指定客户端所要登录的MySQL主机名,登录当前机器该参数可以省略-u:所要登录的用户名;-p:告诉服务器将会使用一个密码来登录,如果所要登录的用户名密码为空,可以忽略此选项mysql-hloacalhost-uroot-p;退出Mysql三种指令quit/extit或\q;库操作创建数据库createdatabase数据库名称[数据库选项];数据库名称自定,数据库选项可选,用来约束数据库数据库选项分为两个选项:1,字符集:characterset或charset字符集名称(常用gbk或utf8)2,校对集(校对集是数据比较规则,字符集设置好了,就会有设置好对应的校对集):collate校对集名称创建数据库示例:createdatabasemydatabasecharactersetgbk;成功创建数据库返回QueryOK,...在数据库的data文件夹下会产生一个该数据库名称的文件夹,里面有一个opt文件,里面有默认的字符集和校对集查看数据库1,查看所有数据库showdatabases;2,模糊查看:showdatabaseslike'pattern';pattern里面是数据库名称,里面可以用_代表任意单个字符,用%代表任意多个字符showdatabaseslike'information_%';--等价于information%;showdatabaseslike'information\_%';--查看名称以information_开头的数据库,需要对_进行转义3,查看数据库的创建语句:showcreatedatabase数据库名称;showcreatedatabasesamp_db;--发现显示的创建数据库语句和输入的sql指令不一样,那是因为数据库实际创建时会对sql指令做优化,创建的是优化后的数据库修改数据库数据库名称不可以被修改,只有数据库选项可以修改,而选项中校对集又依赖于字符集,所以修改字符集时校对集会自动修改alterdatabase数据库名称数据库选项数据库选项值将数据库samp_db的字符集修改为utf8;alterdatabasesamp_dbcharsetutf8;--数据库名称后面直接跟要修改后的数据库选项删除数据库dropdatabase数据库名称;dropdatabaseinformationtest;--删除名为informationtest的数据库删除数据库操作执行后:1,showdatabases;操作将不再显示被删除的数据库;2,被删除的数据库在data文件夹里面对应的文件夹也被删除(级联删除),数据无法找回注意:所以删除操作前要先做备份,防止误删操作表操作表与字段密不可分创建数据表Createtable[ifnotexists]表名称(字段名数据类型,字段名数据类型--最后一行不需要逗号分隔,如果加了逗号会报错!如下图所示)[表选项];ifnotexists:可选项,起检查作用.如果表不存在,则执行创建代码,否则不执行表选项:用于控制表的表现字符集:charset/characterset字符集名校对集:collate校对集名存储引擎:engine存储引擎名称(innodb和myisam)注意:创建数据表之前要先选择数据库,说明是在哪个表中创建数据库,否则报错,如下图所示选择数据库的方法有两种:1.显式选择,在创建数据表的时候在表名称前面带上数据库名称Creattable数据库名.数据表名();2.隐式选择,在创建数据表之前先进入某个数据库环境,然后创建数据表,则数据该数据库进入数据库环境:use数据库名;数据表创建后发生了什么?1.指定的数据库中存在了对应的表2.指定的数据库文件夹下会产生对应的表的结构文件(跟存储引擎有关系)查看数据表数据库能够查看的方式,表都可以查看1.查看所有表:showtables;2.查看部分表:showtableslile‘pattern’;3.查看表创建语句:showcreatetable表名;4.查看表结构:查看表中字段信息Desc/describe/(showcolumsfrom)表名;修改数据表修改表本身数据表本身可以修改的有表名和表选项1.修改表名:renametable老表名to新表名;2.修改表选项:字符集,校对集,引擎Altertable表名表选项值;修改表中字段(新增,修改,重命名,删除)1.新增字段Altertable表名add[column]字段名数据类型[列属性][位置];位置:新增字段名可以插入到任何位置First:插到第一位After字段名:在某个字段之后,默认是在最后一个字段之后列属性:不做设置会mysql会自动设置默认属性2.修改字段一般是修改字段数据类型和字段属性,当然位置也可修改Altertable表名modify字段名数据类型[属性][位置];3.重命名字段Altertable表名change旧字段名新字段名数据类型[属性][位置];虽然通过change也可以实现修改字段,但是一般不这么做,一般就用于重命名字段,修改字段数据类型,属性,位置这些还是用modify4.删除字段Altertable表名drop字段名;注意:如果字段中已经存储了数据,字段被删除后数据被删除,且无法找回,所以删除要小心.删除表格Droptable表名1[,表名2]…;--支持同时删除多张表,但这样做之前要考虑清除删除数据表后,数据库中这个表就不存在了,数据库文件夹中该表对应的文件也被删除数据操作新增数据有两种方案1.给全表字段添加数据,不需要指定字段列表:要求值列表中的数据的顺序必须与表中字段初选的属性一致,并且所有的非数值数据都需要用引号(建议使用单引号)括起来Insertinto表名values(值列表)[(值列表),..];--可以一次添加多条数据2.按照指定字段列表添加数据,字段列表不需要按照表格设计中的字段顺序,但是值列表中的值必须按照字段列表的顺序Insertinto表名(字段列表)value(值列表)[,(值列表)…];查看数据1.查看所有数据Select*from表名[where条件];2.查看指定字段数据,指定条件上的数据Select字段列表from表名[where条件];更新数据Updata表名set字段=值1[,字段2=值2][wehre子句];注意:不要省略where子句,否则就是更新所有行!1.更新单列数据2.更新多列数据删除数据注意:删除是不可逆的,谨慎操作!Deletefrom表名[where子句];--如果不带where子句,那么所有行数据都被删除!如果真要删除所有行数据,应该用truncatetable语句,效率更高中文数据问题本质上是字符集问题中文操作系统命令行默认按照GBK字符集将输入中文转换成二进制码发送给服务器,服务器按照预先设置好的字符集来解码并保存数据,如果服务器设置的字符集无法解释发过来的二进制码则会报错,当然如果服务器那边接收来自客户端二进制码的解码字符集就是GBK,则肯定能够将客户端传来的中文二进制码转换成一样的中文存储在服务器端,同样,服务器给服务端发送数据也要将数据转换成二进制码,只有当服务器端也找GBK字符集对储存的中文数据进行编码发送给客户端,客户端才能正确显式中文数据向表格中添加中文数据虽然添加进去了,但是提示warnings,说明存在某种问题查看服务器支持的所有字符集Showcharacterset;总共支持39中字符集,几乎涵盖了各国文字服务器支持很多字符集,但是默认情况下总有一种确定的字符集与客户端交流Showvariableslike‘character_set%’;前面向表中存储中文数据,服务器端默认是GBK编码,然后发送给服务器端,服务器端默认用utf8解码,所以说存储不正常,所有会报出警告.将服务器端接收客户端二进制数据解码字符集改为GBKSetcharacter_set_client=gbk;将之前存入的中文的删除,重新存储一次相同中文数据Deletefrommy_studentwhereid=3;Insertintomy_student(3,’张越’,’男’);查看存储的数据Select*frommy_student;存进去的中文’张越’和’男’显示的是乱码,这就跟服务器传给客户端的二进制码有关系了,前面我们看到服务器是将存储的数据按照utf-8字符集编码成二进制码返回给客户端,客户端这边再按照GBK解码,找到的不是原来存入的数据,找到的是几个不认识的字解决办法:改变服务器端结果字符集为gbkSetcharacter_set_results=gbk;再次查看表内中文数据是否为乱码Select*frommy_student;所以说,客户端和服务器端的字符集需要保持一致,上面是分别设置character_set_client和character_set_results的字符集,快捷方法是setnames字符集名,一次设置client-connection-results三个对应的字符集Setnamesutf8;====setcharacter_

1 / 166
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功