mysql数据库操作
Posted unbelieveus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库操作相关的知识,希望对你有一定的参考价值。
1.mysql 数据库备份:
语法:
MYSQLDUMP -uUSER -pPASS DataBase > Path
其中:USER 是用户名,PASS 是密码,DataBase 是数据库名, Path 是数据库备份存储的位置。
备注:1)执行备份是在系统条件下,而非 mysql 状态下。
2)请使用正确的文件地址,在文件地址中要使用双斜杠 “\\” 来代替单斜杠 “\”。
2.mysql 数据库的恢复
语法:
mysql -uUSER -pPASS DataBase < Path
其中:USER 是用户名,PASS 是密码,DataBase 是数据库名, Path 是备份文件存储的位置。
3.实现跨数据库表的内容的复制
如实现将 db_database3 数据库中的 user 表复制到 database4 中的 user 表,在实现数据库表的内容复制时,需要在每个数据库表前要加上数据库的名称。
具体语法如:
insert into db_database4.user(column1,column2) select column1,column2 from db_database3.user;
备注:1)仍然需要你自己在 db_database4 中建立一个与 db_database3 结构一样的 user 表;
2)要保证表中字段的数据类型的一致性,否则会导致出入数据的错误。
4.使用 UNION ALL 语句批量插入数据
是用 UNION ALL 语句实现批处理,其语法如下:
INSERT tableName SELECT columnValue,... UNION ALL SELECT columnValue,......
1.tableName:要添加数据的数据表。
2.columnValue:要添加到数据表中的数据。
例如:往一个 user 表中一次插入多条数据:其中表结构如下:
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | varchar(20) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
我们使用常规的 insert into 插入语句如下:
mysql> insert into user values(‘1‘,‘tom‘);
Query OK, 1 row affected (0.06 sec)
mysql> insert into user values(‘2‘,‘kill‘);
Query OK, 1 row affected (0.09 sec)
mysql> insert into user values(‘3‘,‘bill‘);
Query OK, 1 row affected (0.09 sec)
而若使用 union all 语句如下:
mysql> insert user select ‘1‘,‘jim‘ union all select ‘2‘,‘kill‘ union all select ‘3‘,‘bill‘;
备注:我们常用的 insert into 语句每次只能实现插入一条语句,这样重复输入往往不方便,这个时候可以选择使用union all 来替代。
5.更新数据库中的表---其中包括:对表本身结构的更改与对表中数据的更改
1)对表本身结构的更改,使用 alter 语句。
语法:
alter table 表名
例如:
a.追加语法:alter table 表名
add (column datatype,column datatype,...);
例如:alter table tt_table add image blob; //在tt_table表中添加一个image列用来保存大头照
b.修改语法:alter table 表名 modify (column datatype,column datatype,...);
例如:alter table tt_table modify job varchar(60);//修改tt_table表的job列,使其长度为60
c.删除语法:alter table 表名 drop (column);
例如:alter table tt_table drop job; //删除tt_table表中的job列
d,修改表名:rename table 表名 to 新表名;
例如:rename table tt_table to tt;//修改tt_table表的表名为tt
e.将tt_table表的字符集修改为utf8
alter table tt_table character set utf8;
f.将tt_table原表中的列名food 属性为varchar(20)修改为sale_food 属性为varchar(40)
alter table tt_table change column food sale_food varchar(40);
2)对表中数据的更改,使用 update 语句。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
例1:我们为 lastname 是 "Wilson" 的人添加 firstname
UPDATE Person SET FirstName = ‘Fred‘ WHERE LastName = ‘Wilson‘ ;
例2:我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = ‘Zhongshan 23‘, City = ‘Nanjing‘ WHERE LastName = ‘Wilson‘;
备注:alter的修改只涉及表结构方面,而不能对其中保存的数据进行修改!掌握这点可以混淆使用 alter 和 update 。
6.将数据表清空-----DELETE 语句与TRUNCATE TABLE 语句
1)DELETE 语句
DELETE 语句用于删除表中的行。
语法:
DELETE FROM 表名称 WHERE 列名称 = 值
例1:删除lastname为wilson的行:
DELETE FROM Person WHERE LastName = ‘Wilson‘
例2:删除所有行,可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name
2)TRUNCATE TABLE 语句
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同,二者均删除表中的全部行;但 TRUNCATE TABLE 比 DELETE 速度快,而且使用的系统和事物日志资源少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每一行做一项记录;
TRUNCATE TABLE 则通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放,减少了日志空间的额占用。
TRUNCATE TABLE 语法:
TRUNCATE TABLE 数据表名
7.聚集函数 SUM 实现数据汇总
sum函数具体语法:
SUM ([ALL|DISTINCT] expression)
①ALL:对所有的值进行聚集函数运算。ALL 是默认值。
②DISTINCT:指定 SUM 返回唯一值的和。
③expression:是常量、列或函数,或者是算术、按位与字符串等运算符的任意组合。如果 expression 是精确数字或近似数字数据类型分类(bit数据类型除外)的表达式,则不允许使用聚集函数和子查询。
例如:统计一个班级语文,数学,英语各科的总成绩:
select sum(math),sum(chiense),sum(english) from tt_table ;
统计一个班级语文成绩平均分:
select sum(chinese)/count(*) from tt_table;
注意:a.sum仅对数值起作用,否则会报错。
b.对多列求和,逗号不能少。
c.在统计过程中,null 值将被忽略。
8.聚集函数 AVG 实现计算平均值
AVG函数具体语法:
AVG ([ALL|DISTINCT] expression)
①ALL:对所有的值进行聚集函数运算。ALL 是默认值。
②DISTINCT:指定 AVG 操作只能使用每个值的唯一实例,而不管该值出现多少次。
③expression:是常量、列或函数,或者是算术、按位与字符串等运算符的任意组合。如果 expression 是精确数字或近似数字数据类型分类(bit数据类型除外)的表达式,则不允许使用聚集函数和子查询。
例如:求一个班级的平均分
select avg(chinese) from tt_table;
9.聚集函数 MIN/MAX 求数据表中的最小/最大值
具体语法:
MIN|MAX ([ALL|DISTINCT] expression)
①ALL:对所有的值进行聚集函数运算。ALL 是默认值。
②DISTINCT:指定每个唯一值都被考虑。DISTINCT对MIN、MAX无意义。
③expression:该参数为表达式,由常量、列名、函数以及算术运算符、按位运算符和字符串运算符任意组合而成。
例如:求班级最高分和最低分
select man(chinese+english+maht),min(chinese+english+maht) from tt_table;
10.聚集函数 COUNT 返回表达式中值的个数
COUNT 函数是唯一允许使用通配符作为参数的聚集函数。
语法:
COUNT({[ALL|DISTINCT] expression} | * )
①ALL:若没有该参数,SQL 将对所有的值进行聚集函数运算。ALL 是默认值。
②DISTINCT:指定每个唯一值都被考虑。
③expression:该参数为表达式,其类型可以是除 uniqueidentifier、text、image 或 ntext 之外的任何类型。
④ * :指定应该计算所有行以返回表中行的总数。COUNT(*) 不需要任何参数,而且不能与 DISTINCT 一起使用。COUNT(*) 返回指定表中的行的数量而不消除副本,对每行分别进行计数,包括含有空值的行。
例如:统计一个班级共有多少学生:
select count(name) from tt_table;
或者
select count(*) from tt_table;//这种分页的时候用得比较多
统计总分大于250的人数有多少?
select count(*) from tt_table where (math+english+chinese)>250;
注意:count统计只有有值才计数。若统计的name列上有一个为null的值,则该行不计入count的计数结果之中。
11.在where子句中经常被使用的运算符
1) >大于 <小于 <=小于等于 >=大于等于 =等于 <>不等于
2) between...and ... 显示在某以区间的值
3) in(set) 显示在in列表中的值,定点查询。例in(100,200)即为显示查询列表中含有100和200这两个值的结果集。
4) like 模糊查询("%" 和 "_")
5) is null 判断是否为空
6) and 多个条件同时成立
7) or 多个条件任一成立
8) not 不成立
注意1:不等于运算符跟其它语言有点不一样,需要注意一下。
注意2:like语句中,"%"代表零个或多个任意字符,"_"代表一个字符。
例如:
查询英语分数在80--90之间的同学:
select name from tt_table where english>80 and english<90;
查询英语分数在80--90之间的同学:
select name from tt_table where english between 80 and 90;
查询数学分数为89,90,91的同学:
select name from tt_table where math in(89,90,91);
查询所有姓“李”的学生成绩:
select * from tt_table where name like ‘李%‘;
12.对数据进行排序查询---使用 ORDER BY 子句与 DESC|ASC 关键字
ORDER BY 子句的作用是分类输出,并且根据表中包含的一列或多列表达式将输出的值按升序或降序排列。他不改变数据库中行的顺序,只是简单的改变查询输出的值的显示顺序。
其语法格式如下:
SELECT ... WHERE ... ORDER BY expression [ASC|DESC],...
参数说明:
①expression:一个表达式,通常是一个输出时用来分类的字段。
②[ASC|DESC]:可选项,代表升序或降序。
③ ,... :指可以有多于一个的分类表达式,并且每一个表达式都可以为升序或降序。
例如:对 user 表中的图书价格进行降序排序输出
select * from user order by price desc;
13. group by 与 order by 之区别?
order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。
group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
什么是“聚合函数”?
像sum()、count()、avg()等都是“聚合函数”
使用group by 的目的就是要将数据分类汇总。
一般如:
select 单位名称,count(职工id),sum(职工工资) form [某表] group by 单位名称
这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。
在sql命令格式使用的先后顺序上,group by 先于 order by。
select 命令的标准格式如下:
SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ]
[ GROUP BY group_by_expression ] [ HAVING search_condition ]
例如:
select name,sum(total) sum from tb group by name order by sum asc;
备注:
SUM 函数只能用于数据类型是 int ,smallint,decimal,numeric,float,real,money 和 smallmoney的字段。
14.mysql 数据库中使用 LIMIT 子句来限制语句返回的行数
mysql 数据库中提供了 LIMIT 子句来限制 select 语句返回的行数。如果查询数据的 SQL 语句中包含 GROUP BY 与 ORDER BY 子句,则 LIMIT 子句放在 GROUP BY 子句与 ORDER BY 子句的后面。语法如下:
SELECT [DISTIN | UNIQUE] (*,columname[AS alias], ...) FROM table WHERE ... ORDER BY ... LIMIT([offset] , rows);
参数说明:
①offset:指定要返回的第一行的偏移量。开始行的偏移量是0;
②row:指定返回行的最大数目。
例如:
从 tb 表中查询最开始的3条记录。
select * from tb limit 0,3;
查询 tb 表中的最后的3条记录。
select * from tb order by id desc limit 0, 3;
备注 :
1.mysql 数据库提供了 LIMIT 子句,在SQL Server数据库提供了相应的 TOP n ,两者需要区别开来。
2.LIMIT 子句的参数中,第一个参数是可选参数。如果值给定一个参数,则代表偏移量为0的返回行的最大数目。例如,表达式 limit(3)与表达式 limit(0,3)是等价的。
3.如果查询数据的 SQL 语句中包含 GROUP BY 与 ORDER BY 子句,则 LIMIT 子句一定要放在 GROUP BY 子句与 ORDER BY 子句的后面。
////end
以上是关于mysql数据库操作的主要内容,如果未能解决你的问题,请参考以下文章