Mysql基本常用操作-工作总结.docx_第1页
Mysql基本常用操作-工作总结.docx_第2页
Mysql基本常用操作-工作总结.docx_第3页
Mysql基本常用操作-工作总结.docx_第4页
Mysql基本常用操作-工作总结.docx_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Mysql基本操作1. MySQL多表查询1) 使用SELECT子句进行多表查询SELECT 字段名 FROM 表1,表2 WHERE 表1.字段 = 表2.字段 AND 其它查询条件SELECT a.id,,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现2) 使用表的别名进行多表查询如:SELECT a.id,,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id AND b.id=$_POSTtextidSQL语言中,可以通过两种方式为表指定别名第一种是通过关键字AS指定,如SELECT a.id,,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id第二种是在表名后直接加表的别名实现SELECT a.id,,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id使用表的别名应注意几下几点(1)别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名(2)如果定义了表的别名就不能再使用表名3) 合并多个结果集SQL语言中,可以通过UNION 或 ALL将多个SELECT语句的查询结果合并输出,这两个关键字的使用说明如下:UNION:利用该关键字可以将多个SELECT 语句的查询结果合并输出,并删除重复行ALL:利用该关键字可以将多个SELECT 语句的查询结果合并输出,但不会删除重复行在使用UNION或ALL关键字将多个表合并输出时,查询结果必须具有相同的结构并且数据类型必须兼容,另外使用UNION时两张表的字段数量也必须相同,否则会提示SQL语句有错误。e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT uid,price,date FROM tb_demo067_tel4) 简单嵌套查询子查询:子查询是一个SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式的地方都可以使用子查询.SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id=$_POSTtest)内连接:把查询结果作为WHERE子句的查询条件即称为内连接5) 复杂的嵌套查询多表之间的嵌套查询可以通过谓词IN实现,语法格式如下:test_expressionNOT INsubquery参数说明:test_expression指SQL表达式,subquery包含某结果集的子查询多表嵌套查询的原理:无论是多少张表进行嵌套,表与表之间一定存在某种关联,通过WHERE子句建立此种关联实现查询6) 嵌套查询在查询统计中的应用实 现多表查询时,可以同时使用谓词ANY、SOME、ALL,这些谓词被称为定量比较谓词,可以和比较运算符联合使用,判断是否全部返回值都满足搜索条 件.SOME和ANY谓词是存在量的,只注重是否有返回值满足搜索条件,这两个谓词的含义相同,可以替换使用;ALL谓词称为通用谓词,它只关心是否有谓 词满足搜索要求.SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName=$_POSTselect)SELECT a.id, FROM tb_demo067 AS a WHERE idANY 大于子查询中的某个值=ANY 大于等于子查询中的某个值=ANY 小于等于子查询中的某个值=ANY 等于子查询中的某个值!=ANY或ANY 不等于子查询中的某个值ALL 大于子查询中的所有值=ALL 大于等于子查询中的所有值=ALL 小于等于子查询中的所有值=ALL 等于子查询中的所有值!=ALL或ALL 不等于子查询中的所有值7) 使用子查询作派生的表在实际项目开发过程中经常用到从一个信息较为完善的表中派生出一个只含有几个关键字段的信息表,通过子查询就可以来实现这一目标,如SELECT ,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people注:子查询应遵循以下规则:(1)由比较运算符引入的内层子查询只包含一个表达式或列名,在外层语句中的WHERE子句内命名的列必须与内层子查询命名的列兼容(2)由不可更改的比较运算符引入的子查询(比较运算符后面不跟关键字ANY或ALL)不包括GROUP BY 或 HAVING子句,除非预先确定了成组或单个的值(3)用EXISTS引入的SELECT列表一般都由*组成,不必指定列名(4)子查询不能在内部处理其结果8) 使用子查询作表达式SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071注:在使用子查询时最好为列表项取个别名,这样可以方便用户在使用mysql_fetch_array()函数时为表项赋值,如SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen ,(SELECT AVG(english) FROM tb_demo071) AS yingyu,(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo0719) 使用子查询关联数据SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = $_POSTtext)10) 多表联合查询利用SQL语句中的UNION,可以将不同表中符合条件的数据信息显示在同一列中。e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten注:使用UNION时应注意以下两点:(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同,如列名、算术表达式及聚合函数等(2)在每个查询表中,对应列的数据结构必须一样。11) 对联合后的结果进行排序为了UNION的运算兼容,要求所有SELECT语句都不能有ORDER BY语句,但有一种情况例外,那就是在最后一个SELECT语句中放置ORDER BY 子句实现结果的最终排序输出。e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id使用UNION条件上相对比较苛刻,所以使用此语句时一定要注意两个表项数目和字段类型是否相同12) 条件联合语句SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name=人民邮电出版社 OR name=机械工业出版社 UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name 人民邮电出版社 AND name 机械工业再版社 ORDER BY id上面语句应用了GROUP BY分组语句和HAVING语句实现条件联合查询。其实现目的是先保证将人民邮电出版社和机械工业出版社始终位于名单最前列,然后再输出其它的出版社13) 简单内连接查询SELECT filedlist FROM table1 INNER JOIN table2 ON table1.column1 = table2.column1其中,filedlist是要显示的字段,INNER表示表之间的连接方式为内连接,table1.column1=table2.column1用于指明两表间的连接条件,如:SELECT ,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id14) 复杂内连接查询复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如:SELECT ,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM tb_demo065 WHERE tb_=$_POSTtext)总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项,通过WHERE 子句或内连接INNER JOIN ON 语句将两表连接起来,实现查询15) 使用外连接实现多表联合查询(1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成LEFT JOIN,它是以左侧的表为基准故称左连接,左侧表中所有信息将被全部输出,而右侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULLe.x:SELECT ,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id(2)RIGHT OUTER JOIN表示表之间通过右连接方式相互连接,也可简写成RIGHT JOIN,它是以右侧的表为基准故称右连接,右侧表中所有信息将被全部输出,而左侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULLE.X:SELECT ,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id16) 利用IN或NOTIN关键字限定范围e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN $_POSTtext1 AND $_POSTtext2)利用IN可指定在范围内查询,若要求在某范围外查询可以用NOT IN代替它17) 由IN引入的关联子查询e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = $_POSTtext)18) 利用HAVING语句过滤分组数据HAVING子句用于指定组或聚合的搜索条件,HAVING通常与GROUP BY 语句一起使用,如果SQL语句中不含GROUP BY子句,则HAVING的行为与WHERE子句一样.e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math 952. 数据库表常用操作1) 创建表命令:create table ( ,. );例如,建立一个名为MyClass的表 mysql create table MyClass( id int(4) not null primary key auto_increment, name char(20) not null, sex int(4) not null default 0, degree double(16,2);2) 删除数据表命令:drop table 例如:删除表名为 MyClass 的表 mysql drop table MyClass;DROP TABLE用于取消一个或多个表。您必须有每个表的DROP权限。所有的表数据和表定义会被取消,所以使用本语句要小心!注意:对于一个带分区的表,DROP TABLE会永久性地取消表定义,取消各分区,并取消储存在这些分区中的所有数据。DROP TABLE还会取消与被取消的表有关联的分区定义(.par)文件。对与不存在的表,使用IF EXISTS用于防止错误发生。当使用IF EXISTS时,对于每个不存在的表,会生成一个NOTE。RESTRICT和CASCADE可以使分区更容易。目前,RESTRICT和CASCADE不起作用。3) 表插入数据命令:insert into ( ,. ) values ( 值1 ), ( 值n )例如:往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99, 编号为3 的名为Wang 的成绩为96.5。mysql insert into MyClass values(1,Tom,96.45),(2,Joan,82.99), (2,Wang, 96.59);eg: insert into vperson (vpname,keywords,type) values (-备胎3参考影片,百星酒店,3),(-备胎3参考影片,美人邦,3)注意:insert into每次只能向表中插入一条记录。4) 查询表中的数据1)、查询所有行命令: select from where 例如:查看表 MyClass 中所有数据 mysql select * from MyClass;2)、查询前几行数据例如:查看表 MyClass 中前2行数据mysql select * from MyClass order by id limit 0,2;select一般配合where使用,以查询更精确更复杂的数据。3)、多条件模糊查询mysqlselect * from table where (name1 like %key1% or name2 like %key2% or name3 like %key3%);5) 删除表中数据 命令:delete from 表名 where 表达式例如:删除表 MyClass中编号为1 的记录mysql delete from MyClass where id=1;6) 修改表中数据语法:update 表名 set 字段=新值, where 条件 mysql update MyClass set name=Mary where id=1;例子1:单表的MySQL UPDATE语句: UPDATE LOW_PRIORITY IGNORE tbl_name SET col_name1=expr1 , col_name2=expr2 . WHERE where_definition ORDER BY . LIMIT row_count例子2:多表的UPDATE语句:UPDATE LOW_PRIORITY IGNORE table_references SET col_name1=expr1 , col_name2=expr2 . WHERE where_definitionUPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有 WHERE子句,则更新所有的行。如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。LIMIT子句用于给定一个限值,限制可以被更新的行的数目。7) 增加索引命令:mysql alter table 表名 add index 索引名 (字段名1,字段名2 );例子: mysql alter table employee add index emp_name (name);8) 加主关键字的索引命令:mysql alter table 表名 add primary key (字段名);例子: mysql alter table employee add primary key(id);9) 加唯一限制条件的索引命令:mysql alter table 表名 add unique 索引名 (字段名);例子: mysql alter table employee add unique emp_name2(cardnumber);10) 删除某个索引命令:mysql alter table 表名 drop index 索引名;例子: mysqlalter table employee drop index emp_name;11) 增加字段命令:mysql ALTER TABLE table_name ADD field_name field_type;12) 修改字段命令:mysql ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;13) 删除字段mysqlALTER TABLE table_name DROP field_name;14) 调整字段顺序命令:ALTERTABLEuser_movement_logCHANGEGatewayIdGatewayIdintnotnulldefault0AFTERRegionID 15) 修改表名命令:rename table 原表名 to 新表名;命令:altertablet1renamet2;例如:在表MyClass名字更改为YouClass mysql rename table MyClass to YouClass;当你执行 RENAME 时,你不能有任何锁定的表或活动的事务。你同样也必须有对原初表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限。如果在多表更名中,MySQL 遭遇到任何错误,它将对所有被更名的表进行倒退更名,将每件事物退回到最初状态。RENAME TABLE 在 MySQL 3.23.23 中被加入。3. 备份数据库命令在DOS的url=file:/mysqlbinmysqlbin/url目录下执行Eg:/home/mysql/mysql5500/bin/mysqldump-uroot-rv6aKOpt49IMmr26GKkpZ4renetemotion-wvpuid=64676orvpuid=64677orvpuid=64678orvpuid=64679orvpuid=64680/home/mysql/data_backup/emotion2015-3-29vpuids.sql1) 导出整个数据库导出文件默认是存在mysqlbin目录下 mysqldump -u 用户名 -p 数据库名 导出的文件名 mysqldump -u user_name -p123456 database_name outfile_name.sql2) 导出一个表 mysqldump -u 用户名 -p 数据库名 表名 导出的文件名 mysqldump -u user_name -p database_name table_name outfile_name.sql3) 导出一个数据库结构 mysqldump -u user_name -p -d add-drop-table d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论