(1)Mysql操作语句
2016-01-22 19:29
405 查看
简介:MySql包含三种类型的语句
DDL(Data Defination Language)
DCL(Data Control Language)
DML(Data Manipulation Language)
增加字段:ALTER table tableName add 字段定义 after 字段 (first)
修改字段定义:使用modify、change关键字,但是modify关键字不能改名,change可以改名。
Alter table tableName change 旧字段 新字段;
更改表名:Alter table tableName rename 新表名
增加:INSERT 删除:DELETE 改:UPDATE 查:SELECT
一:增加:INSERT
标准用法:INSERT INTO tablename (field1,field2…) VALUES(value1,value2,…);
简略用法:INSERT INTO tablename VALUES (value1,value2,…) 但是,value的值要和field的值一一对应。
含有空字段、非空但有默认值的字段、自增字段,可以不出现field。
但是使用简略写法的时候,空字段、非空但有默认值的字段、自增字段,要有相应的value出现。所以,最好是使用标准用法。
二:删除:DELETE
1:删除表内容全部 DELETE FROM tablename
2:单表删除内容 DELETE FROM tablename WHERE …
3:多表删除内容 DELETE tablename1,tablename2 FROM tablename1,tablename2 WHERE…
三:更新:UPDATE
1:单表更新:UPDATE FROM tablename SET field=XXX WHERE …
2:多表更新:UPDATE tablename1,tablename2 SET tablename1.field=xxx,tablename2.field=xxx where …
四:查询:SELECT
1:查询所有的记录:SELECT * FROM tablename
2:查询不重复记录:SELECT distinct name FROM tablename 查询不重复的记录,使用关键字distinct
3:条件查询:SELECT * FROM tablename WHERE (id=1)… 除了=,可以使用>、<、>=、<=、!=等比较运算符。多个条件之间可以使用or、and等逻辑运算符。
4:排序:SELECT * FROM tablename WHERE … ORDER BY field1,,field2 [DESC,ASC]默认是自增,即ASC。按多个字段排序,如果field1相同,则按照field2排序。
5:限制:SELECT * FROM tablename WHERE … LIMIT offset_start,row_count offset_start 默认的起始偏移为0,即第1条记录。
6:聚合:SELECT [field1,field2] fun_name FROM tablename [WHERE] [GROUP BY] [HAVING where_condition]
fun_name表示要做到聚合操作:sum()求和、count(*)记录总数、max()最大值、min()最小值。
HAVING 表示对结果再过滤
GROUP BY 表示要进行分类聚合的字段 比如按照name统计人口数量,则GROUP BY name
with rollup 表示对统计的结果再汇总
mysql> select content,count(10) from content group by content;
+———+———–+
| content | count(10) |
+———+———–+
| thank | 1 |
| xiexie | 2 |
+———+———–+
2 rows in set (0.00 sec)
统计内容总数大于1的内容
mysql> select content,count(10) from content group by contenthaving count(10)>1;
+———+———–+
| content | count(10) |
+———+———–+
| xiexie | 2 |
+———+———–+
1 row in set (0.00 sec)
对统计的结果再汇总
mysql> select content,count(10) from content group by contentwith rollup;
+———+———–+
| content | count(10) |
+———+———–+
| thank | 1 |
| xiexie | 2 |
| NULL | 3 |
+———+———–+
对id求和
mysql> select content,sum(id) from content GROUP BY content;
+———+———+
| content | sum(id) |
+———+———+
| thank | 35 |
| xiexie | 67 |
+———+———+
2 rows in set (0.00 sec)
7:表连接
①:内连接:仅仅选出两张表中互相匹配的记录
②:外连接:会选出其他不匹配的记录
内连接:
mysql> select name,content from user,content where content.id=user.id;
+——-+———+
| name | content |
+——-+———+
| david | xiexie |
+——-+———+
1 row in set (0.00 sec)
外连接:分为左连接、右连接
左连接:包含所有左表中的记录,以及右表中没有与他匹配的记录;
右连接:包含所有右表中的记录,以及左表中没有与他匹配的记录。
右连接:mysql> select name,content from user right join content on user.id=content.id;
+——-+———+
| name | content |
+——-+———+
| david | xiexie |
| NULL | xiexie |
| NULL | thank |
+——-+———+
3 rows in set (0.00 sec)
8:子查询
某些情况下,当查询时,需要的条件是另外一个SELECT语句的结果,这个时候,要用到子查询。
关键字:IN、NOT IN、=、!=、exists、not exists等。
mysql> select * from content where id IN (select id from user);
+—-+———+
| id | content |
+—-+———+
| 33 | xiexie |
| 34 | xiexie |
+—-+———+
2 rows in set (0.00 sec)
9:记录联合
UNION,会去除联合后的重复结果。UNION ALL 不会去除重复结果。
mysql> select id from user union all select id from content;
+—-+
| id |
+—-+
| 33 |
| 34 |
| 33 |
| 34 |
| 35 |
+—-+
5 rows in set (0.00 sec)
mysql> select id from user union select id from content;
+—-+
| id |
+—-+
| 33 |
| 34 |
| 35 |
+—-+
3 rows in set (0.00 sec)
grant insert,select on database.* to ‘user’@’localhost’
收回用户权限
revoke insert on database.* from ‘user’@’localhost’
DDL(Data Defination Language)
DCL(Data Control Language)
DML(Data Manipulation Language)
DDL语句
诸如ALter、Create、Drop等语句,是对数据库以及表的定义。着重介绍Alter语句。增加字段:ALTER table tableName add 字段定义 after 字段 (first)
修改字段定义:使用modify、change关键字,但是modify关键字不能改名,change可以改名。
Alter table tableName change 旧字段 新字段;
更改表名:Alter table tableName rename 新表名
DML语句
DML语句是指对数据库中的数据进行操作。包括对数据的增、删、改、查。增加:INSERT 删除:DELETE 改:UPDATE 查:SELECT
一:增加:INSERT
标准用法:INSERT INTO tablename (field1,field2…) VALUES(value1,value2,…);
简略用法:INSERT INTO tablename VALUES (value1,value2,…) 但是,value的值要和field的值一一对应。
含有空字段、非空但有默认值的字段、自增字段,可以不出现field。
但是使用简略写法的时候,空字段、非空但有默认值的字段、自增字段,要有相应的value出现。所以,最好是使用标准用法。
二:删除:DELETE
1:删除表内容全部 DELETE FROM tablename
2:单表删除内容 DELETE FROM tablename WHERE …
3:多表删除内容 DELETE tablename1,tablename2 FROM tablename1,tablename2 WHERE…
三:更新:UPDATE
1:单表更新:UPDATE FROM tablename SET field=XXX WHERE …
2:多表更新:UPDATE tablename1,tablename2 SET tablename1.field=xxx,tablename2.field=xxx where …
四:查询:SELECT
1:查询所有的记录:SELECT * FROM tablename
2:查询不重复记录:SELECT distinct name FROM tablename 查询不重复的记录,使用关键字distinct
3:条件查询:SELECT * FROM tablename WHERE (id=1)… 除了=,可以使用>、<、>=、<=、!=等比较运算符。多个条件之间可以使用or、and等逻辑运算符。
4:排序:SELECT * FROM tablename WHERE … ORDER BY field1,,field2 [DESC,ASC]默认是自增,即ASC。按多个字段排序,如果field1相同,则按照field2排序。
5:限制:SELECT * FROM tablename WHERE … LIMIT offset_start,row_count offset_start 默认的起始偏移为0,即第1条记录。
6:聚合:SELECT [field1,field2] fun_name FROM tablename [WHERE] [GROUP BY] [HAVING where_condition]
fun_name表示要做到聚合操作:sum()求和、count(*)记录总数、max()最大值、min()最小值。
HAVING 表示对结果再过滤
GROUP BY 表示要进行分类聚合的字段 比如按照name统计人口数量,则GROUP BY name
with rollup 表示对统计的结果再汇总
mysql> select content,count(10) from content group by content;
+———+———–+
| content | count(10) |
+———+———–+
| thank | 1 |
| xiexie | 2 |
+———+———–+
2 rows in set (0.00 sec)
统计内容总数大于1的内容
mysql> select content,count(10) from content group by contenthaving count(10)>1;
+———+———–+
| content | count(10) |
+———+———–+
| xiexie | 2 |
+———+———–+
1 row in set (0.00 sec)
对统计的结果再汇总
mysql> select content,count(10) from content group by contentwith rollup;
+———+———–+
| content | count(10) |
+———+———–+
| thank | 1 |
| xiexie | 2 |
| NULL | 3 |
+———+———–+
对id求和
mysql> select content,sum(id) from content GROUP BY content;
+———+———+
| content | sum(id) |
+———+———+
| thank | 35 |
| xiexie | 67 |
+———+———+
2 rows in set (0.00 sec)
7:表连接
①:内连接:仅仅选出两张表中互相匹配的记录
②:外连接:会选出其他不匹配的记录
内连接:
mysql> select name,content from user,content where content.id=user.id;
+——-+———+
| name | content |
+——-+———+
| david | xiexie |
+——-+———+
1 row in set (0.00 sec)
外连接:分为左连接、右连接
左连接:包含所有左表中的记录,以及右表中没有与他匹配的记录;
右连接:包含所有右表中的记录,以及左表中没有与他匹配的记录。
右连接:mysql> select name,content from user right join content on user.id=content.id;
+——-+———+
| name | content |
+——-+———+
| david | xiexie |
| NULL | xiexie |
| NULL | thank |
+——-+———+
3 rows in set (0.00 sec)
8:子查询
某些情况下,当查询时,需要的条件是另外一个SELECT语句的结果,这个时候,要用到子查询。
关键字:IN、NOT IN、=、!=、exists、not exists等。
mysql> select * from content where id IN (select id from user);
+—-+———+
| id | content |
+—-+———+
| 33 | xiexie |
| 34 | xiexie |
+—-+———+
2 rows in set (0.00 sec)
9:记录联合
UNION,会去除联合后的重复结果。UNION ALL 不会去除重复结果。
mysql> select id from user union all select id from content;
+—-+
| id |
+—-+
| 33 |
| 34 |
| 33 |
| 34 |
| 35 |
+—-+
5 rows in set (0.00 sec)
mysql> select id from user union select id from content;
+—-+
| id |
+—-+
| 33 |
| 34 |
| 35 |
+—-+
3 rows in set (0.00 sec)
DCL语句
对数据库用户赋予权限grant insert,select on database.* to ‘user’@’localhost’
收回用户权限
revoke insert on database.* from ‘user’@’localhost’
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- Android之获取手机上的图片和视频缩略图thumbnails
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- 数据库链接字符串查询网站
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法