1. 管理mysql的命令
- 列出mysql中所有的数据库: show databases;
- 使用某个数据库: use database_name; e.g use mysql;
- 列出当前数据库的所有表: show tables;
- 列出表中的列的信息: show tables from table_name; [会列出column的数据类型,是否为主键,约束,等等信息]
- 显示数据表中的详细索引信息,包括primary key: show index from table_name;
- Msql 创建数据库 : create databse 数据库名字;
- 删除数据库 : drop database 数据库名;
2. Mysql 的数据类型
2.1 日期和时间类型
DATA: 格式 YYYY-MM-DD 用作日期
TIME : 格式 HH:MM:SS 用作时间或者持续时间
YEAR: 格式 YYYY 用作年份值
DATETIME : 格式 YYYY-MM-DD HH:MM:SS 用作混合日期和时间值
TIMESTAMP: YYYYMMDDHHMMSS 用作混合日期和时间之,时间戳
2.2 数据类型和字符串类型
3. Mysql 数据表操作
3.1 创建表
create table 表名(列名1 列的数据类型 [关键字],
列名2 列的数据类型 [关键字],primary key(列命1,列名2));
关键字有:
NOT NULL > 不能为空
AUTO_INCREMENT > 自增,一般用于主键字段
3.2 删除数据表
drop table 表名;
3.3 向表中插入数据
insert into table 表名(列名1,列名2...) VALUES (数据1,数据2.....)
如果数据是字符类型,内容必须用单引号或者双引号括起来
4. Mysql查询
表:
例如:
表一:student表
+----+-----------+-----+--------------+
| id | name | age | school |
+----+-----------+-----+--------------+
| 1 | 张霄儿 | 20 | 北京大学 |
| 2 | kevin | 30 | 复旦大学 |
| 3 | claire | 30 | 复旦大学 |
+----+-----------+-----+--------------+
表二:company表
| id | name |
+----+-----------+
| 1 | baidu |
| 2 | alibaba |
| 3 | telent |
| 4 | shinetech |
+----+-----------+
表三:student_score表
+----+------------+--------+-------+
| id | student_id | course | score |
+----+------------+--------+-------+
| 1 | 1 | 数学 | 100 |
| 2 | 1 | 语文 | 100 |
| 3 | 2 | 数学 | 90 |
| 4 | 2 | 语文 | 90 |
| 5 | 3 | 数学 | 89 |
| 6 | 3 | 语文 | 79 |
| 7 | 4 | 语文 | 98 |
| 8 | 4 | 数学 | 98 |
+----+------------+--------+-------+
4.1 直接用逗号连接多个表查询
例如: select * from 表1,表2,表3
这种方式查询将会查询出所有表的笛卡尔积,例如,表1,表2,表3分别有2条数据,那么查出来的结果是2*2*2=8个结果。 但是如果其中有一个表中无任何内容, 则查询返回结果也是空。
4.2 limit以及offset关键字
select * from 表 [where 条件] [limit 数字] [offset 数字]
limit 表示限制显示查询的记录条数,offset表示显示查询结果的偏移量。
例如:select * from student,student_score limit 4, offset 1;
4.3 UNION查询操作符
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] UNION [ALL | DISTINCT] SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。
描述: union只能用于一下情况:
第一个select和第二个select语句的的select columns一致的时候, 将两个表的查询结果进行合并。默认会消除重复行。
例如:
进行UNION查询:
select id,name from student UNION select id,name from company;
4.4 查询分组
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数、
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
在使用group by的时候,select后面的列只能出现两种列:
第一: group by 后面的那个列
第二: function(column) function使用的列
使用 having可以对已经分组的数据进行类似于where的条件过滤
使用with rollup可以对已经分组了的数据再进行统计,sum,avg,count
例如:
#查询班上总分大于等于180分的学生 select student_id,sum(score) from student_score group by student_id having sum(score)>180;
#查询班上总分大于180且每一门功课大于等于90分的学生
select student_id,sum(score) from student_score where student_id not in (select distinct student_id from student_score where score < 90)
group by student_id having sum(score)>180;
对比这两个SQL, 如果要对分组里面的行的数据再进行判断,这时候就需要使用子查询了。
4. SQL select语句执行的顺序
以下流程图来自于: https://blog.csdn.net/bitcarmanlee/article/details/51004767
5. Mysql 更新表数据
update 表名 set 列名 = 新的值,列命1=新的值 [where 条件]
如果不指定where条件,则更新所有的列,如果指定where字段,则更新满足条件的列
如果需要批量修改某一个字段可以使用replace语法:
update 表名 set 列名=replace (列名,‘老的值‘,’新的值‘) [where 条件];
6. 删除表数据
delete from 表名 [where 条件];
如果没有指定where条件,则删除该表中的所有数据