版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Mysql数据库到精第1 MYSQL的基 数据库的介 数据库的分 MYSQL数据库的安装和配 使用命令行窗口连接MYSQL数据 关于MYSQL的其它相关的指 MYSQL数据库的三层结 SQL语句的分 第2 基本的语 创建数据库的细节讨 第3 数据库的相关操 数据库的修 布置一个课堂练 第4 创建表的基本语 快速案 第5 MYSQL数据类一览 MYSQL数值类型-整 MYSQL数值类型- MYSQL数值类型-小 MYSQL数据类型-字符 MYSQL数据类型-日期和时 MYSQL数据类型-枚举ENUM,集合 ,,音频数据类型怎么存 综合练 第6 基本的介 基本的语 直接上案 改表的注意事项总 练个 第7 数据库的CRUD操 基本的概 CRUD的一个综合练习 晚上作 UPDATE语 DELETE语 第8 SELECT语句的基本使 基本介 练 SELECT语句可以对列进行运 使用WHERE子句,进行过滤查 在WHERE子句中经常使用的运算 课后练习 ORDERBY子 GROUPBY子 第9 MYSQL函数(重点 MYSQL函数一 日期函 字符串相关函 数学函 流程控制函 其它函 第10 查询加强的说 查看表的结 使用算数表达式加 WHERE子句的加 逻辑操作符的加 使用ORDERBY字 MYSQL的分页查 GROUPBY和HAVING子句的加 作业的评 关于分组的关键字的顺序问 11作业练习-ECSHOPECS_GOODSFROM自我数12MYSQLMYSQL第13 MYSQL的约 基本的介 MYSQL的约束分 主键约 NOTNULL约 UNIQUE约束(唯一约束 UNIQUE细 外键约 CHECK约束(了解 练习 晚上练 删除约束的讲 1章mysqlmysql数据库最重要的作用就是保存数据,mysql数据库利于数据的管理(增加,修SQLServer是微软的产品,是.net程序员的最爱,主要用于开发中型的项目,也可以开发大Oracle是甲骨文公司javaee程序员的最爱,主要用于开发中型的项目,也可以开发mysqlphpmysql数据库也可以开发中型和大型项目,尤其对多并IBM公司(蓝色巨人ee程序员使用到,主要用于开发大型项目(,.)都是电信级的项目IBM公司,安全性很好,在银行系统使用的特别的多MySQL管理=>服务=>mysql=>mysql这个程序,单击右键=>选择卸载把安装 的文件也删除,也可以选择其他路tothedatabaserootdatadir="C:/ProgramData/MySQL/MySQLServer如果自己后面可能使用,那么就保留一份ps:不允许勾选创建用户这个选使用命令行窗口连接MYSQLcmd>mysql-u用户名-p-h主机名-P端口cmd>表示我们令是在命令行(dos控制台)执mysql-u:你使用的用户名是什么,-urootroot用户-p:你使用的,你可以不写,如果不写,回车后,系统会提示你输入,这里我们给时,就不要给空格.-h:mysql,-hlocalhost-P:mysql3306,3306,则一关于mysqlmysql服务方式启动(界面计算机->管理->mysql服务->单击右键[选择启动,停止cmd>netstartmysql服务名cmd>netstopmysql服务名mysql时,指定的名字如何在任 下都可以连接到 /bin去操mysql,其 你使用不了可以通过配置环境变量来搞定计算机->属性->高级环境配置->环境变量->path,mysqlsqlddl数据定义语句,ddl语句有(CREATE[创建],DROP[删除],ALTER[修改表结构])dml数据操作语句,常用的dml语句有(INSERT[添加],UPDATE[修改数据],DELETE[删除])dql数据查询语句,常用的有(SELECT[查询dcl数据控制语句,用于管理数据库和用户的.常用的有(commit,savepoint,rollback,grant,revoke)2章创建数据库基本的语语法charactersetutf8,collate:是校验规则,默认是utf8_general_ci,表示不区分大小写ci[casedb1``,utf8db2utf8mydb3characterset来规定该库的字符集,常用的字符集主要是utf8/gbk/big5,utf8.不同的校验规则,会对查询时字母是否区分大小写和排序有影响,举例默认的 utf8_bin这个是区分大小写utf8_general_ci的执行效果mysql有很多种.showcharacterset;showmysql默认的字符集和校验规则,my.ini文件中可以3章数据库相关操作mysql sql指令中有``mysql4.01.00dropdatabaseifexists数据库showdb2showcreatedatabasedb1drop ifexistsmysqlmysqldbms上,mysql运行和使用状态.基本的介绍:就是修改数据库的字符集,校验规则等等cmd>mysqldumpuroot- >itbullsetnames cmd -u -pitbull>保存路径可以自己来设置这里注意一下:指令后不要带分号,分号是在mysql>命令行下有setnames //!!!use //itbull 备份文件的路径cmd>mysqldumpuroot- 12> - - user1>如何恢复某个库的某setnames //!!!useitbull;如果数据库都没有,则请先创建一个库 cmd>mysqldump-uroot-p -B数据库名1 数据库名2 >备份路径这种有好处,把库本身也给你备份.同时备份itbull和恢复多个库(简单setnamessource4章表的创建filed是列(字段)名,是创建表时由表的设计者在规定表字段名规范有两种,一种就是驼峰法(userName),一种是下划(user_name)datatype:是字段的数据类型,mysq(这个是一个重创建表时,可以指定字符集(characterset),校验规则(collate),引擎这里的字符集和校验规则我们已经讲过引擎主要有三种(MyISAMInnDB,meomery/后面我们有章节详解如果你不指定三种信息,则使用默认的(改表的数据库的信息),如果创建快速案说明notnuldefault0idcomment注释':charsetcollateengine5章mysql数据类型(重点,难点mysqlmysql数值类型-基本介绍:用于保存整数的数据类型,常见有(tinyint,smallint,mediumint,int,一览图1-02-03-04-08 70从表示的来看tinyint<samllint<mediumint <数据类型占用的大小不一样tinyint(1个字节)<samllint(2个字节)<mediumint(3个字节)< int(4个字节) <bigint(8个字节)说明了,不同的整型有范围的约束unsigned,===>这个就是无符号字段名整型类型,===>这个就是有符号tinyint为例说明:先解释一下无符号为什么是0-zerofill的说明zerofill0填充.int(4)zerofill40进int(4)40填充的宽度zerofillmysql数值类型-bit类型就是位类型bitasciibit(1-64),bit(M)M值来控制我们填充数据的大小bit类型,unsignedmysql数值类型-bit(M)mysqlfloatfloatdecimal都可以定义成有符号的或者是无符号的 M:表示显示最大长度(即可以显示多少个数,包含小数位)D表示有几位float(4,2)范 float(4,2)unsigned范围0-decimal(4,2)-99.99-)floatdecimal超出范围了,会怎样样decimal可以表示的精度更高. 7位小数位。decimal(M,D)如果D被省略,默认是0。如果M被省略,默认是10。相当于decimal(10,0) decimalmysql数据类型-基本介绍:mysql的字符串类型,用于存放字符串,最主要的有三种,分别是 char(n),varchar(n)n值到底可以有多大?char(n)这里的n的范围是1-255,255.varchar(n)这里的n的范围是和表的字符集有关系如果表的字符集是utf8那么n最大是 (65535-3)/3=21844如果表的字符集是gbk那么n最大是 (65535-3)/2=32766如果表的字符集是latin1那么n最大是 (65535-3)/1=65532varchar65535个字节,3个字节.[2varchar1utf83gbk2gbk11varchar的n的最大的使用案例char(n)和 n指的是字符数而不是字节数char(n)varchar(n)是变长char(4)=>添加'aa4个字符占用的空间.varchar(4)=>添加'aa2个字符占用的空间+1小结:varchar.char(n)会将存入的最后的空格自动删除,而varchar(n)会保留空格.所以如varchartextvarchar,varchar最大比如上面的字段4+21843* +1=65536>上面的字段3+21843* +1=65535>=65535字节大小text来替代mysql数据类型-基本介绍:mysql(1.date,2datetime3.基本使用date,datetimetimestamp有日期和时间,如果你没有给时间,那么默认是00:00:00timestampinsertupdate时会自动的更新login_time字段就会自动的更新mysql数据类型-枚举enum,如果对于多选我们可以使用set数据类型enum数据类型setenum首先你添加的选项都是表中规定好的,添加set字段时'选项1,选项2,选项enum选项中,选项可以用数字表示则添加时可以用数字表示某个选项set当我们给一个set赋值时,这个数就是一个组合的('苹果','西瓜','菠萝')对应1,2,4,然后组合可以进行多项,比如7=1+2+4 6=2+4等等set中的值比如,请查询喜欢吃苹果的人该文件的路径,然后通过路径去该文件.createtableuser(idint,name varchar(64)//记录这个头像的路径)cmd>mysql-uroot-p--default-character-set=latin1mysql>setnamesgbk;6章修改表修改表,就是指,当我们的表创建好了,根据业务逻辑的需要,我们要对表进行们就要使用修改表技术。重点就是掌握三大块[addmodify/changedrop/案例演示varchar(64)==>varchar(32),如果你当前这个有数据超过32了,则会提示错误.varcharintvarchar的内容是否可以转成int,'o'=>int就不能成功。练个7章数据库的crudcrud操作,表示是增删改查c[create]r[readu[updated[delete]insert基本的概念就是将数据添加到某个表中快速案insert细节-''括起来insertinto 如果是给表中的所有字段添加数据,可以不写前面的字段名称,price有默认值,因此上面写法并没有报错.如果面的price字段没有默认值,则会报错 ''引起来,则''引起来就可以crudcreatetablestudent(idint,namevarchar(20)notnulldefault'',decimal(5,2)notnulldefault0.0,englishdecimal(5,2)notnulldefault0.0,mathdecimal(5,2)notnulldefault0.0
insertintostudentvalues(1,'韩顺平insertintostudent(id,name,,english,math)values(2,'',67,98,56),;insertintostudent(id,name,,english,math)values(3,'',87,78,77);insertintostudent(id,name,,english,math)values(4,'',88,98,90);insertintostudent(id,name,,english,math)values(5,'',82,84,67);insertintostudent(id,name,,english,math)values(6,'',55,85,45);insertintostudent(id,name,,english,math)values(7,'',75,65,30);程序框架图(开发模式如果可以使用js,端也校验一下数据update基本介绍update语句就是修改数据的update可以的修改多个字快速案updatedelete说明deletewhere子句来选择你要删除一个小技巧-如何一个employee表=>employee2createtable likeinsertintoemployee2select*fromdeletedeletetruncatedeletetruncate都可以删除数据2.deletefromtruncatedeletewhere子句,truncatewhere,truncate指令只能删deletetruncate8章select介绍select语句的基本使用,后面我们再讲解加强的部分*select*语句.select关于字段别名的写法还有另外三种selectASfrom表名推荐使用]select字段名AS'别名'from表名;selectfrom表名;select'别名from表名where子句,where一览图betweenand是包含两边id是100,200,300select*fromstudentwhereid=100orid=200orid=<==等价select*fromstudentwhereidin(100,likenot是模糊查询,表示某个字段中含有什么信息select*fromwherelike'张表示任意多个字符select*fromwherenotlike张isnullorderbyorderby子句是用于排序的orderbysql语句的最后orderby[asc|desc],asc表示升序排序,desc表示降序排序,默认是升序orderby1[asc|desc],1基本介绍:count函数是进行统计满足条件的记录数有多少条,是分组的形count(*)count(列名)countcount(*)count(列名)的区别基本介绍Sumwheresumnull时),..),null分开统计ifnullifnull(expr1,expr2),expr1为null,expr1null,expr1值基本AVGwhereselectavg(math)fromstudent;selectavg(ifnull(math,0.0)+ifnull(english,0.0)+ifnull(,0.0))from基本介绍:where条件的列的最大/groupby基本介绍:groupby就是对数据(列)进行分组统计,如果我们需要对分组的结果进行过滤则可以使用关键字having基本语法groupby列名1,列名 9章mysql函数(重点mysql对日期进行处理的函数datedate_add(date1, valdate_type)函数date1val这个值的时间date_sub(date1, valdate_type)函数date1val这个值的时间datediff(date1,date2):计算两个日期的差(天date_add/date_sub可以带的日期类型有year|month|day,可以返回日期中的年,月,日?19823月入职的员工unix_timestamp():函数返回一个秒数(整数),1970-1-10:0:0到现在的from_unixtime(时间戳,日期格式):将一个时间戳转成你指定的一个格phpdate/datetime/timestampintunsigned来保存时间(php程序员mysqlphp思考,10秒/1.5天2基本介绍:charset(str)concat(str1,str2)ucase/lcaseleft(str,len),strlen/right(str,len)str的len个字符length(str);str的长度(字节rece(str,str_find,str_repl),在str这个字符串中,找str_find,替换substring(str,position,[len]); str的positionlen个字符,lenposition开始取出所有字符.positon1开始计算.小练习基本介绍:format=abs(numnumceiling(num),num这个值,向上取整,floor(num),num这个值,向下取整,format(num,num2),num进行格式化处理,num2mod(num1,num2)rand()0.0<=v<=1.0round(num1,num2):num1进行四舍五入的处理,num2是保留的表达式if(expr1,expr2,expr3);expr1expr2,expr1为假,expr2 请查询emp表,显示ename和 sal,和com如果com为null,则显示0.0ifnull case..when先看一个具体的需求如果该雇员的sal 在小于等于500,给工资涨20%如果该雇员的sal 在500<val<=1000,给工资涨10%如果该雇员的sal 在1000<val<=2000,给工资涨5%其它情况不涨工资,使用一个select语句搞定.WHENexprTHENWHENexprTHENWHENexprTHENELSE...user()md5(str),/编码成一个长度为32个字符的字符串,经常他来保存我们的password(str),可以将一个字符串,加密/编码成一个新的字符.mysql.user表,就是password加密10章mysql查询的加强(重点,难点desc表名showcreatetable?where使用orderby图解mysql页一页返回.这时我们就会使用分页查询(limit)$pageSize表示一页显示几条记录分页查询有两个重要的参数$pageNow表示显示第几页select列名from表名 ($pageNow-1)*$pageSize,mysqllimit($pageNow-1)*$pageSize0开始计算,因此如果limit0,22条.课堂练习题id4条记录。35sql语句3页:select*fromemporderbyempno ?5-10数据分组-???计算共有多少员工?10的平均工资扩展要求:[上机练习,先做?请显示工资最高的员工的名字,工作岗位=>使用一个子查询selectmax(sal)fromselect*fromempwheresal=(selectmax(sal)from?selectavg(sal)fromselect*fromempwheresal>(selectavg(sal)fromgroup having?selectavg(sal),max(sal)fromempgroupby?selectavg(sal),max(sal)fromempgroupbydeptno,?2000selectavg(sal)ASmyavg,deptnofromempgroupbydeptnohavingmyavg<小结:sql语句有groupbyhaving和orderby他们的顺序是grouphaving最后order11章多表查询(重点,难点多表查询是指基于两个和两个以上的表或是视图的查询.在实际应用中,用到(deptemp表)
如显示sales部门位置和其员工的),这种情况下需要emp,dept集1*2的记录数,如关于集的说规定:多表查询的条件是至少不能少于表的个数-基本介绍:自连接是指在同一的连接查案例?显示某个员工的上级的,比如显示’FORD’的上级案例分析语句 使用关键字 distinct empwheredeptnoselect*fromempwherejobin distinct empwhere=10)anddeptno<>作业练习-查询ecshop表的ecs_goods表的各个类别的价点评selectcat_id,max(shop_price)asmymaxfromecs_goodsgroupbyselectgoods_id,ecs_goods.cat_id,goods_name,fromecs_goods,(selectcat_id,max(shop_price)asmymaxfromecs_goodsgroupbycat_id)astempecs_goods.cat_id=temp.cat_idandshop_price=selectmath,english,fromstudentwherename='select*fromstudentwhere(math,english,)=(selectmath,english,fromstudentwherename='');from如果我们的子查询他是在,fromfrom子句的子查询案例selectavg(sal)asmyavg,deptnofromempgroupbyselectename,sal,temp. emp,(selectavg(sal)asmyavg,deptnofromempgroupbydeptno)astempemp.deptno=temp.deptnoemp.sal>temp.selectmax(sal)asmymax,deptnofromempgroupbyselectename,sal,emp.deptno,temp.mymaxemp,(selectmax(sal)asmymax,deptnofromempgroupbydeptno)ASwhereemp.deptno=temp.deptnoandsal=自我数sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据.如快速的创建一张海量表.1000w[实践...工科]createtabletemp_emplikestudent表的数据去重distincttemp_stu中stu表->temp_stu基本介绍:合并查询有两种,union/unionallunion合并查询select语句1unionselect语句 sqlsqlunionunionall和unionunionall不会去掉重复记录12章mysqlmysql基本介绍:内连接实际上就是利用where子句对两张(多表)表形成的积select列名from表 表 join表 ON条件<=等价select列名from表 表 ,表 条件雇员的名字,薪水,部门的名称mysql基本介绍:如果左侧的表完全显示我们就说是左外连接select列名from表 表 ON条件案例说明基本介绍:如果右侧的表完全显示我们就说是右外连接select列名from表 表 ON条件案例说明'无名selectstu.id,name,gradefromstuleftjoinexamonstu.id=selectstu.id,name,gradefromsturightjoinexamonstu.id=selectstu.id,name,gradefromstuleftjoinexamonstu.id=exam.idunionselectstu.id,name,gradefromsturightjoinexamonstu.id=exam.id;13章mysql约束是用于数据的完整性,所谓数据的完整性指的是,就是根据业务逻辑的需unique这个约束.mysql主键约束primary唯一约束not外键约束foreignint一最多只能有一个主键,但可以是复合主键一般来说一总有primarykey,而且是整数类型的,以后这样使用 和种在字段定义完毕后,在后面写notnull并且unique的效果,则可notnullnotnull前面已经使用很多次,这里我们就不讲了unique约束(唯一约束字段名字段类 unique如果某个字段设置为unique,但是没有设置notnull,那么该字段可以null,null如果你要某个字段不能重复,而且不能为null,我们可以这样定义字段字段名字段类型notnull 用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有unique约束.,当定义外键约束后,要求外键列数据必须在主表的null。foreignkey(外键字段) references主表(字段);如果我们的外键没有设置notnull,那么外键的值可以是null,而且可primarykey或者是innodb,外键字段的类型要和主键/unqiue字段的类型一致(长度可以不同null[前提是外键可null]一旦建立主外键的关系,数据不能随意删除和修改了[参照完整性,要由程序员自己(php),mysql数据库不会去检查check约束(了解说明在实际开发中,对表的约束的管理是重要的,因此要求大家必须掌握createtablecustomer2customer_idchar(8)notnulldefault'',namevarchar(20),addressvarchar(30)notnulldefault'',varchar(30),enum('男','女notalter addprimarykeyaltertablecustomer2modifynamevarchar(20)notnulldefaultaltertablecustomer2addunique(altertablecustomer2modifyaddressvarchar(30)notnulldefault'学生宿舍 tablecustomer2 primarykey;notnull,unique删除altertablestudropforeignkey14章mysql-字段名 字段类型(整型)primarykeyprimarykey自增长默认从1开始,你也可以通过如下命令修改altertable表名auto_increment=altertableauto_increment15章mysqlcreatedatabasetestdb;usetestdb;执行了老师给的sql,创建一个800万的表select语句,看看会有什么问题createindex索引名ON表名(字段名解释:在某个表的某个字段上创建索引1)insert,updatedelete有小的影响.原因是当有索引后,我们对表进行增,删除,修改时,还要对索引进行工作。mysql一最多只能有一个主键索引,但是该主键索引可以指向多列,即前面老null,也不能重复是auto_in 唯一索引的创建形式有如下一个表中,可以有多个唯一索引一个唯一索引,可以指向多列(多个字段notnull,则唯一索null如果我们不确定某个字段是否有重复的值,则不能使用唯一索引当我们字段有重复的数据时,我们就使用普通索引即可在实际的开发中,普通索引使用的最多基本介绍:当我们需要对某个字段的内容的关键字进行检索时,就考虑使用说明:mysql支持全文索引的但是目前支持mysql5.5是不支持中文表的引myisam.==>?==>以后使用专业的全文检索技术(coreseek,就是shpinx的中文版,迅搜技术(xunsearch))mysqlidINTUNSIGNEDAUTO_INCREMENTNOTNULLtitlebodyFULLTEXT(title,body))INSERTINTOarticles(title,body)('MySQLTutorial','DBMSstandsforDataBase('HowToUseMySQLWell','Afteryouwentthrougha...'),('OptimizingMySQL','Inthistutorialwewillshow...'),('1001MySQLTricks','1.Neverrunmysqldasroot.2. ('MySQLvs.YourSQL','Inthefollowingdatabase ('MySQLSecurity','Whenconfiguredproperly, //titlebody含义databaseselect*fromarticleswherematch(title,body)停止词 匹配概//mysql5showindexfrom表名\Gshowindexesfrom表名showkeysfrom表名desc表名showcreatetable表名altertable表名drop note:删除索引的关键是要知道索引名。先删除,再添加在我们的实际开发中,什么的样的字段适合创建索引,给大家一个建议16章mysql事务用于保证数据的一致性,dml语句组成,dml语句要么全mysqlmysql事务的starttransaction:savepoint:rollbackto保存点:回滚到某个保存点.rollback:回滚commit:mysqlbsavepointsavepointrollback,就可以直接回退到事务开始的状态如果要支持事务,需要引擎是start mit=php程序中实现事务(重点我们以转账的案例来讲解事务事务的级别(了解概念,实际开发中,使用不同基本的概念当不同的客户端或是线程,去mysql数据的同一时,mysql提供一种机制,来控制不同的客户端和线程对数据的权限.级别定义了事务与事务之间的程度,在不同的事务中,看到数据是不一样的.事务级别的分 (repeatable程度是从上到下,越来越强事务级别带来的问当一个事务另一个事务尚未提交的修改时,产生脏同一查询在同一事务中多次进行,由于其他提交做的修改或删除,每次同一查询在同一事务中多次进行,由于其他提交做的插入操作,每次返举例说明(看老师的操作/看修改mysql的默认级事务的acid第17章mysql引mysql引擎的基本介事务安全性引非事务安全性引Myisam,show常用引擎的比MyISAM的引擎的介执行速度快optimizetable表名[举例InnoDB引并发性好Memory引执行速度快mys
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产3000吨精梳棉纱技改项目可行性研究报告写作模板-备案审批
- 《AS的用法总结》课件
- 美术与幼儿美术创作(铁门关职业技术学院)知到智慧树答案
- 客源国概况(海南联盟)(三亚理工职业学院)知到智慧树答案
- 《单细胞生物生物》课件
- 工业机器人生产项目建设申请报告
- 儿童医院建设可行性研究报告
- 《续编童话故事》课件
- 装在套子里的人自备课件
- 《孤独之旅》第一课时人教版九年级语文上册课件
- 剑桥雅思14Test2雅思写作真题及范文解析
- MOOC 中学化学教学设计与实践-北京师范大学 中国大学慕课答案
- 培训学校安全工作总结(三篇)
- 发生心脏骤停的应急预案
- 咸阳中心医院门诊综合楼装修改造项目施工组织设计
- 全国高考数学新课标Ⅱ卷第11题说题课件
- 人教版九年级英语全一册Unit5大单元教学设计
- 2021版集成电路技术专业群人才培养方案
- 新软件推广营销方案
- 生物免疫与疫苗研究
- 湘美版四年级美术上册每课知识要点汇总
评论
0/150
提交评论