表数据操作
一.添加数据
1. 全列添加(creat)
insert into score values(, , ,);
建表
1.1 单行全列插入
注意:添加时如果不指定列,那么插入的值的顺序一定要和建表的顺序保持一致。
1.2 多行全列插入
insert into score values( , , , );
2. 指定列插入
insert into score( , , , ) values( , , , );
注意:
必须指定列
插入值的顺序一定要和指定列的顺序保持一致
扩展:表和表数据的存储目录(两种方法)
二. 查询数据(Retrieve)
1. 全列查询
select * from table_name;
全列查询可能会出现两个问题:
1.查询的列越多,意味着需要传输的数据量越大,会消耗大量的带宽信息,并且传输的速度会很慢;
2. 可能会影响索引的使用。
2.指定列查询
select 列名 from 表名
3. 表达式查询
select 表达式 from 表名;
SQL表达式的查询,不会修改表的原始数据
4. 别名查询(给指定列起别名)
select 指定列 as 别名 from 表名;
可以使用as 也可以不适用
5.去重distinct
5.1 单列去重
select distinct 去重列名 from 表名;
5.2distinct联合去重
规则:所有字段全部相同才会联合去重,否则不会去重。
6. 排序 order by
6.1 根据某一列升序asc—从小到大
select * from 表名 order by 列名 asc;
6.2 根据某一列降序desc—从大到小
select * from 表名 order by 列名 desc;
如果不指定asc或desc,默认情况下使用asc
6.3 根据总成绩升序
select 列名 from 表名 oeder by 列名 asc;
6.4 根据总成绩降序,总成绩使用别名
select 列名 from 表名 oeder by 列名 desc;
注意:order by可以使用别名进行排序
NULL在排序时是最小级别
6.5 多列排序
select name,math,chinese from score order by math,chinese desc;
7. 条件查询
注意:逻辑运算符 and 的执行优先级是高于or的,因此如果在一个查询中既有and查询又有or查询就需要给or查询添加(),作用是增加执行的优先权,加()的SQL语句优先执行。
满足以下两个条件才能发放奖学金:
1.数学成绩>=30或者英语成绩>=40;
2.语文成绩必须>=50.
7.1<=> 用法
7.2 null 用法
7.3where条件查询
7.3.1***注意事项:***
1.别名可以在 order by 中使用
where 条件查询中不能使用别名
select math+chinese+english as total from score order by total desc;
7.3.2.where 条件查询语法:
selest * from table_name where 查询条件;
为什么别名不能使用在where中,能使用在order by中
mysql执行顺序如下:
1.FROM 阶段
2.WHERE 阶段
3.GROUP BY阶段 分组查询
4.HAVING阶段 分组查询条件
5.SELECT阶段
6.ORDER BY阶段
7.LIMIT阶段 分页查询
别名是产生在第5个查询阶段。
别名有了之后,后面的阶段才能使用,也就是说别名只能是步骤5之后的查询才能被使用。
7.3.3查询英语缺考的人
7.3.4查询总成绩大于100的人
7.3.5 字段名 between x and y(可以包含x和y值的)
写法更优雅
7.3.6 in查询:所有满足条件集都会被查询出来
7.3.7 模糊查询like:
%------>可以匹配任意字符
where 字段名 like '% _';
_------->可以匹配一个任意字符
%和_ 可以用在任意位置
NMySQL所有查询应考虑最左原则,将能过滤最多条数的条件放在最左边
8.分页查询LIMIT :查询某一页面上的部分信息(截取了部分信息)
limit 3种写法:
- 限制 limit n;
select * from table_name limit n;
限制查询最多时300条,如果数据量不够,那么查询也不会报错
2.limit n offset s 偏移;
limit n offset s 偏移;
查询n条 跳过前s条
3.limit s,n;
查询n条,跳过前s条
注意:2.和3.的顺序是相反的
三. 修改数据
1.全部数据修改(很危险,一不小心改了全部数据)
updata table_name set 修改内容;
2.部分数据修改
limit
where
3.部分数据多列修改
set , , ,
4. 使用表达式修改
四. MySQL删除操作
1.delete 删除 DML语言
delete from table_name [where...] [order by...] [limit...]
删除行数据,表的结构是存在的
2.drop 删除 DDL语言
drop table table_name;
3.truncate 删除(不会删除表结构,只会删除表中所有数据)
truncate [table] table_name;
三者区别
1.删除的影响范围:
drop(表结构+数据)>truncate(删除所有数据)>= delete (删除所有或部分数据)
2. 查询条件 :delete可以where表达式添加查询条件,其他删除指令不行。
3. 命令的类型:
drop 属于DDL,
delete 属于DML(执行原理:在***InnoDB数据库引擎***下,delete并不是真正把数据删除掉了,而是给数据打了一个删除标签,标识当前的数据已经被删除了)
***truncate 属于 DDL***(执行原理:1.重新创建一个表2.将原来的表删除)
**4.数据恢复不同:**delete数据可以被恢复,但是truncate和drop删除的数据不可以被恢复
如果autocommit =1的情况下,delete可以恢复,删除日志 updata table table_name set iddel = 0;
执行SQL取反操作就可以恢复数据。前提条件是开启了数据库的日志记录。 可以提高数据库的执行性能,对于数据丢失不敏感的系统,可以关闭日志。
**5.执行效率:**drop > truncate > delete
数据量越大 ,上面的执行效率的差距也越大。
6. delete 删除不会重置子增值