只想知道 发表于 2015-1-16 20:14:13

MYSQL教程之Mysql数据库操纵老手进门,手把手的教会你

即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。因为老手进门php+MySQL手艺,一定对Mysql操纵存有疑问。
  只管PHPMyadmin办理数据库对老手来讲也无妨为一种很好的体例。但更多的实践利用还要靠人人对Myql语句格局
的精晓和纯熟的操纵。
  为了便利老手尽快进门,把握Mysql的奇妙。鄙人费了一个星期工夫的调试和收拾,终究脱稿了这份对照完美的进
门级操纵实例的指南。但愿能给新进门的伴侣扬帆指路,送一满帆的顺风。

Mysql4.1.10低级解读
※※※※※※※※※※※※※※Mysql低级解读(所用版本:4.1.10)※※※※※※※※※※※※※※
安装注重事项
在安装的过程当中,请记好您的暗码,这是未来登录mysql的钥匙。

=======================无==敌==分==割==线=======================
1、Mysql数据库服务器登录
登录mysql必要切换到dos下的mysql的bin目次,举行以下操纵:
语法格局:mysql-hhost_name-uuser_name-ppassWord(本机的话-h和host_name可省)
----------------------我------------割--------------------------
MyExperience:
C:PRogramfilesmysqlmysqlserver4.1bin>mysql-uroot-p
Enterpassword:******
先输出用户名和暗码上岸请求(加上-p),回车后等呈现"Enterpassword:",再输出暗码回车,如许就能够
乐成上岸mysql,不然将会上岸失利。
----------------------我------------割--------------------------
上岸乐成后会显现以下信息:
WelcometotheMySQLmonitor.Commandsendwith;org.
YourMySQLconnectionidis1toserverversion:4.1.10-nt
Typehelp;orhforhelp.Typectoclearthebuffer.
mysql>

标识"mysql>",当你看到这个呈现在窗口的最右边的顶格时,这就是告知你,你能够输出命令举行操纵了。
mysql>s检察版本信息
mysql>qormysql>quit加入mysql数据库服务器
mysql>hormysql>help检察匡助(其他的数据库服务器相干命令)

=======================无==敌==分==割==线=======================

2、数据库操纵
所要注重的是,一切举例的显现了局,均为上面操纵步骤按按次举行的了局。

----------------------我------------割--------------------------
2.1查询语句
2.1.1检察Mysql数据库的版本号和服务器确当前日期
mysql>selectversion(),current_date;(操纵体例一)
mysql>selectversion()
->,current_date;(操纵体例二)
※:操纵语句间用","离隔,用";"来暗示操纵停止,操纵语句输出过程当中,换行不影响操纵历程。
2.1.2检察服务器中的一切数据库
mysql>showdatabases;
----------------------我------------割--------------------------
2.2创立数据库
2.2.1创立数据库(固然,数据库名"asb"不克不及是已存在的)
mysql>createdatabaseasb;
2.2.2选用数据库,使其成为以后操纵的数据库
mysql>useasb;
乐成选中后会有以下显现:
Databasechanged
乃至能够在窗口命令上岸mysql数据库的时分间接选中要操纵的数据库(固然条件是asb数据库存在)
bin>mysqlasb-uuesername-p
Enterpassword:******
2.2.3检察以后所操纵的数据库称号
mysql>selectdatabase();
运转后了局以下:
+------------+
|database()|
+------------+
|asb|
+------------+
1rowinset(0.00sec)
----------------------我------------割--------------------------
2.3创立表
2.3.1用"createtable"创立表(确认是要在以后数据库中创立,不是的话就先用use选中要创立表的谁人数据库)
mysql>createtableemp(emp_idvarchar(6)
->,emp_namevarchar(10)
->,emp_ageint
->,emp-salint
->,emp_birdate
->,emp_sexvarchar(5)
->);
2.3.2检察以后数据库中的表(能够查验上例的"emp"表是不是乐成创建)
mysql>showtables;
假如是乐成将是以下显现:
+---------------+
|Tables_in_asb|
+---------------+
|emp|
+---------------+
1rowinset(0.00sec)
2.3.3检察数据表的布局
mysql>describeemp;
运转后了局会如以下显现:
+----------+-------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+----------+-------------+------+-----+---------+-------+
|emp_id|varchar(6)|YES||NULL||
|emp_name|varchar(10)|YES||NULL||
|emp_age|int(11)|YES||NULL||
|emp_sal|int(11)|YES||NULL||
|emp_bir|date|YES||NULL||
|emp_sex|varchar(5)|YES||NULL||
+----------+-------------+------+-----+---------+-------+
----------------------我------------割--------------------------
2.4拔出数据
2.4.1利用INSERT语句举行拔出纪录操纵(数据库表中每行就是一个纪录,拔出纪录实践上就是向表中拔出一行)
格局:INSERTINTOtable_name(数据表名)VALUES(值1,值2,值3...);
在VALUES关头字后括号中的数值和字符段,必需和你所建的表所界说的字段数据范例必需分歧!
mysql>insertintoempvalues
->(100005,啸天,27,3000,1979-07-10,male);
拔出乐成后会有以下信息显现:
QueryOK,1rowaffected(0.03sec)

2.4.2检察表中的数据(能够断定数据是不是已乐成拔出)
mysql>select*fromemp;
乐成拔出后的数据显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|3000|1979-07-10|male|
+--------+----------+---------+---------+------------+---------+
1rowinset(0.00sec)
一次性拔出多行的格局:INSERTINTOtable_name(数据表名)VALUES(值1,值2,值3...),(值1,值2,值3...);
mysql>insertintoempvalues
->(100001,红枫,29,8000,1977-01-01,male),
->(100002,丽鹃,27,7000,1979-12-31,fmale);
能够检察拔出后的数据了局:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|3000|1979-07-10|male|
|100004|红枫|29|8000|1977-01-01|male|
|100002|丽鹃|27|7000|1979-12-31|fmale|
+--------+----------+---------+---------+------------+---------+
3rowsinset(0.00sec)

----------------------我------------割--------------------------
2.5修正数据
2.5.1利用UPDATE语句来更新表中的数据
mysql>updateempsetemp_id=100001whereemp_name=红枫;
修正了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|3000|1979-07-10|male|
|100001|红枫|29|8000|1977-01-01|male|
|100002|丽鹃|27|7000|1979-12-31|fmale|
+--------+----------+---------+---------+------------+---------+
3rowsinset(0.00sec)
假如该语句没有前面的where限定,将会对表中一切的纪录都举行修正。
如,给全体人加薪1000,能够以下修正:
mysql>updateempsetemp_sal=emp_sal+1000;
修正了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|4000|1979-07-10|male|
|100001|红枫|29|9000|1977-01-01|male|
|100002|丽鹃|27|8000|1979-12-31|fmale|
+--------+----------+---------+---------+------------+---------+
3rowsinset(0.00sec)
----------------------我------------割--------------------------
2.6初级查询办法
2.6.1纪录查询
查询emp表中,emp_name为啸天的全体信息
mysql>select*fromempwhereemp_name=啸天;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|4000|1979-07-10|male|
+--------+----------+---------+---------+------------+---------+
1rowinset(0.00sec)
查询emp表中,emp_sal,人为在5000以上的全体信息
mysql>select*fromempwhereemp_sal>5000;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100001|红枫|29|9000|1977-01-01|male|
|100002|丽鹃|27|8000|1979-12-31|fmale|
+--------+----------+---------+---------+------------+---------+
2rowsinset(0.00sec)
查询emp表中在1978年1月1日以后出身的
mysql>select*fromempwhereemp_bir>1978-01-01;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|4000|1979-07-10|male|
|100002|丽鹃|27|8000|1979-12-31|fmale|
+--------+----------+---------+---------+------------+---------+
2rowsinset(0.00sec)
查询emp表中在1979年12月1日之前出身,人为在5000以上的
mysql>select*fromempwhereemp_bir<1979-12-01andemp_sal>5000;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100001|红枫|29|9000|1977-01-01|male|
+--------+----------+---------+---------+------------+---------+
1rowinset(0.00sec)
2.6.2字段查询
CEO检察员工人为情形
mysql>selectemp_name,emp_salfromemp;
查询了局显现以下:
+----------+---------+
|emp_name|emp_sal|
+----------+---------+
|啸天|4000|
|红枫|9000|
|丽鹃|8000|
+----------+---------+
3rowsinset(0.00sec)
检察1978年后出身的人的姓名、人为和性别
mysql>selectemp_name,emp_sal,emp_sexfromempwhereemp_bir>"1977-12-31";
查询了局显现以下:
+----------+---------+---------+
|emp_name|emp_sal|emp_sex|
+----------+---------+---------+
|啸天|4000|male|
|丽鹃|8000|fmale|
+----------+---------+---------+
2rowsinset(0.00sec)
2.6.3查询了局排序
用ORDERBY语句对emp表中一切员工人为上下按次查询了局(默许是从低到高――升序)
mysql>select*fromemporderbyemp_sal;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|4000|1979-07-10|male|
|100002|丽鹃|27|8000|1979-12-31|fmale|
|100001|红枫|29|9000|1977-01-01|male|
+--------+----------+---------+---------+------------+---------+
3rowsinset(0.00sec)
用DESC关头字来举行从高到低排序――降序
mysql>select*fromemporderbyemp_saldesc;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100001|红枫|29|9000|1977-01-01|male|
|100002|丽鹃|27|8000|1979-12-31|fmale|
|100005|啸天|27|4000|1979-07-10|male|
+--------+----------+---------+---------+------------+---------+
3rowsinset(0.00sec)
2.6.4查询了局数目的限定
用LIMIT检察emp表中人为支出排名前两个员工的材料:
mysql>select*fromemporderbyemp_saldesclimit2;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100001|红枫|29|9000|1977-01-01|male|
|100002|丽鹃|27|8000|1979-12-31|fmale|
+--------+----------+---------+---------+------------+---------+
2rowsinset(0.00sec)
检察人为排名第2到第3的员人为料:
mysql>select*fromemporderbyemp_saldesclimit1,2;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100002|丽鹃|27|8000|1979-12-31|fmale|
|100005|啸天|27|4000|1979-07-10|male|
+--------+----------+---------+---------+------------+---------+
2rowsinset(0.01sec)
利用rand()抽样查询拜访,随机抽取2个员工,检察其材料
mysql>select*fromemporderbyrand()limit2;
如以下了局:(随机的)
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|4000|1979-07-10|male|
|100001|红枫|29|9000|1977-01-01|male|
+--------+----------+---------+---------+------------+---------+
2rowsinset(0.01sec)
2.6.5查询了局的字段团结和从头定名
mysql>selectconcat(emp_id,"",emp_name)fromemp;
查询了局:
+------------------------------+
|concat(emp_id,"",emp_name)|
+------------------------------+
|100005啸天|
|100001红枫|
|100002丽鹃|
+------------------------------+
3rowsinset(0.00sec)
用AS关头字从头给输入了局定名题目
mysql>selectconcat(emp_id,"",emp_name)asinfofromemp;
查询了局以下显现:
+----------------+
|info|
+----------------+
|100005啸天|
|100001红枫|
|100002丽鹃|
+----------------+
3rowsinset(0.00sec)
2.6.6日期查询的相干运算
能够经由过程YEAR()、MONTH()、DAYOFMONTH()函数来提取日期的构成元素
查询7月份出身的员人为料:
mysql>select*fromempwheremonth(emp_bir)=7;
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100005|啸天|27|4000|1979-07-10|male|
+--------+----------+---------+---------+------------+---------+
1rowinset(0.00sec)
能够使用英文月份来查询:
mysql>select*fromempwheremonthname(emp_bir)="January";
查询了局显现以下:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100001|红枫|29|9000|1977-01-01|male|
+--------+----------+---------+---------+------------+---------+
1rowinset(0.00sec)
使用TO_DAYS()函数能够查询出职工们从出身到如今所司理的工夫,单元是天数
mysql>selectto_days(current_date)-to_days(emp_bir)aslivingdaysfromemp;
查询后了局以下:
+------------+
|livingdays|
+------------+
|9425|
|10345|
|9251|
+------------+
3rowsinset(0.00sec)
盘算从如今入手下手履历100天后的日期
mysql>selectdate_add(now(),interval100day);
查询了局以下:
+----------------------------------+
|date_add(now(),interval100day)|
+----------------------------------+
|2005-08-0713:56:58|
+----------------------------------+
1rowinset(0.00sec)
盘算从如今入手下手履历100天后的日期
mysql>selectdate_sub(now(),interval100day);
查询了局以下:
+----------------------------------+
|date_sub(now(),interval100day)|
+----------------------------------+
|2005-01-1914:00:20|
+----------------------------------+
1rowinset(0.00sec)
2.6.7数据统计
利用COUNT()函数盘算表中的数据数量(好比emp表中的员工数量)
mysql>selectcount(*)fromemp;
查询了局以下:
+----------+
|count(*)|
+----------+
|3|
+----------+
1rowinset(0.01sec)
统计人为上5000的数量
mysql>selectcount(*)fromempwhereemp_sal>5000;
查询了局以下:
+----------+
|count(*)|
+----------+
|2|
+----------+
1rowinset(0.00sec)
统计男女职工数量:(GROUPBY语句分类)
mysql>selectemp_sex,count(*)fromempgroupbyemp_sex;
查询了局以下:
+---------+----------+
|emp_sex|count(*)|
+---------+----------+
|fmale|1|
|male|2|
+---------+----------+
2rowsinset(0.01sec)
利用数据统计函数(MIN(),MAX(),SUM(),AVG())
mysql>select
->min(emp_sal)asmin_salary,
->max(emp_sal)asmax_salary,
->sum(emp_sal)assum_salary,
->avg(emp_sal)asavg_salary,
->count(*)asemployee_num
->fromemp;
查询了局以下:
+------------+------------+------------+------------+--------------+
|min_salary|max_salary|sum_salary|avg_salary|employee_num|
+------------+------------+------------+------------+--------------+
|4000|9000|21000|7000.0000|3|
+------------+------------+------------+------------+--------------+
1rowinset(0.00sec)
2.6.8从多个数据表中检索信息
依据后面的办法,分离举行以下操纵:
1).在数据库asb中创建一个新表dept,表中有两项元素:
dept_id-->varchar(6)
dept_name-->varchar(10)
2).在表emp中拔出以下一行新纪录:
+--------+----------+---------+---------+------------+---------+
|emp_id|emp_name|emp_age|emp_sal|emp_bir|emp_sex|
+--------+----------+---------+---------+------------+---------+
|100003|小红|30|8000|1976-11-11|fmale|
+--------+----------+---------+---------+------------+---------+
3).在新表dept中,输出以下纪录
+---------+-----------+
|dept_id|dept_name|
+---------+-----------+
|100005|MTD|
|100001|MTD|
|100002|MTD|
|100003|HR|
+---------+-----------+
查询emp和dept这两个表中,员工的姓名和部门信息
mysql>selectemp.emp_name,dept.dept_namefromemp,dept
->whereemp.emp_id=dept.dept_id;
查询了局以下:
+----------+-----------+
|emp_name|dept_name|
+----------+-----------+
|啸天|MTD|
|红枫|MTD|
|丽鹃|MTD|
|小红|HR|
+----------+-----------+
4rowsinset(0.00sec)
多表查询时注重:
1).FROM子句必需给出所查询的表的全体称号
2).选择字段时分说明其所属表的称号(如emp表中的emp_id要暗示为emp.emp_id)
3).在Where子句中必需指明查询的前提(如,emp.emp_id和dept.dept_id是不异意义的元素)
----------------------我------------割--------------------------
2.7删除表双数据
2.7.1利用DELETE语句删除表单中的数据纪录
小红不在了哦,得删了吧
mysql>deletefromempwhereemp_name=小红;
实行乐成后会以下显现:
QueryOK,1rowaffected(0.06sec)
省略where是删除全体表中的纪录
2.7.2利用DRO删除表
(先任意创建一个数据库dt,并建张一时表fuck)
mysql>droptablefuck;
2.7.3利用DRO删除数据库
mysql>dropdatabasedt;
----------------------我------------割--------------------------
2.8改动数据表的布局
先创建一个新表id(内带一个属性id_namevarchar(6)),输出一行数据(xgw)
2.8.1对表从头定名
altertable数据表名renameas数据表的新名字;
把表id更名成name
mysql>altertableidrenameasname;
2.8.2给数据表增添一个字段
altertable数据表名add字段称号字段范例;
在悔改名的新表name中增添一个字段(idint(6))
mysql>altertablenameaddidint(6);
增添乐成后有以下显现:
QueryOK,1rowaffected(0.26sec)
Records:1Duplicates:0Warnings:0
2.8.3变动已创建的字段范例
altertable数据表名modify字段称号字段范例;
把name表中id属性的范例改成10个长度的字符范例
mysql>altertablenamemodifyidvarchar(10);

altertalbe语句另有良多功效,详细可查阅MySQL的手艺手册。
(thequestions,callmeanytime!E-mail:tt981@netease.com)
※※※※※※※※※※※※※※Mysql低级解读(所用版本:4.1.10)※※※※※※※※※※※※※※
                  CopyRightByFengLin,2005-4-29

DBaaS系统其实具有更大的市场机遇:像其他云服务一样,DBaaS意味着更短的销售周期,更少的启动费用,持续不断的收入,也意味着比之前更多的客户。

海妖 发表于 2015-1-17 21:05:31

如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。

精灵巫婆 发表于 2015-1-21 09:37:21

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书

兰色精灵 发表于 2015-1-30 13:51:02

从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。

小魔女 发表于 2015-2-6 13:11:44

SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.

柔情似水 发表于 2015-2-16 06:56:43

对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。

小妖女 发表于 2015-3-5 00:28:14

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

分手快乐 发表于 2015-3-19 15:08:26

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

山那边是海 发表于 2015-3-28 21:02:28

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
页: [1]
查看完整版本: MYSQL教程之Mysql数据库操纵老手进门,手把手的教会你