【SQL语句】
insert into 表名 values(值,值,值..);
【说明】:
- into可以省略
- 值的个数要和该表中的列的个数相匹配
- 值的类型也要和列的类型相匹配
在SQL中,字符串既可以用’ ’ 也可以用 " " 来引用, 同时在SQL中没有字符类型
【指定列插入】
其他未被指定插入的列,填入默认值
insert into 表名 (列名) values(值);
【使用示例】
【insert语句一此插入多条记录】
在values的后面,带有多组( ),每组括号之间用,分隔
【性能比较】
在MySQL中一次插入一条记录,分多次插入,相比于一次插入多条记录要慢上很多,因为MySQL是一个客户端-服务器的程序,每次在客户端输入的命令sql都是通过网络进行传输的,同时在MySQL服务器中是通过一系列复杂的数据结构来组织数据的,每次插入操作都是比较耗时的(在数据结构中进行一定的遍历找到合适的位置),分多次插入自然就会更耗时
把整个表中的数据全部都查询出来
【SQL语句】
select * from 表名;
*是通配符,表示匹配任意的列
如果数据库中的数据特别多(上亿条数据),执行select * 会发生什么情况呢?
服务器先读取磁盘,把这些数据查询出来,在通过网卡把数据传输给客户端,但由于数据量非常大,很有可能就把磁盘IO吃满或者把网络带宽吃满,IO吃满或网络带宽吃满,都会导致服务器卡顿,如果当前操作的数据库是生产环境的数据库,因为select *就可能导致生产环境服务器的卡顿,从而影响到用户的体验
【SQL语句】
select 列名,列名... from 表名;
【使用示例】
当省略调一些不必要的列时,就可以节省大量的磁盘IO 和网络带宽
查询时带有表达式,让查询的结果进行一些计算
表达式查询,其中的运算都是指列和列之间的运算,而对于行和行之间的运算有其他方法
【代码示例1】
在查询结果中让每个同学的语文成绩都多10分
【代码示例2】
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
【SQL语句】
select 列名或表达式 as 别名 from 表名
使用distinct关键字对某列数据进行去重
【SQL语句】
select distinct 列名 from 表名
【代码示例】
如果distinct后面指定多个列,必须多个列的值都想同才会进行去重,否则不去重
【代码示例】
在查询过程中,对查询到的结果进行排序(针对临时表排序,对于数据库上原有的数据没有影响)
【SQL语句】
select 列名 from 表名 order by 列名;
【使用示例1】:升序排序
【使用示例2】:降序排序
【注意】:
- 默认情况下是升序排序(asc),如果想要降序排序需要在末尾加上desc
- 没有order by 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
- NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
- SQL中,如果用NULL和其他类型进行混合运算结果仍然是NULL
【使用示例3】:使用表达式和别名排序
【使用示例4】:可以根据多个字段进行排序,排序优先级随书写顺序、
指定条件,对于查询结果,进行筛选
select * from 表名 where 条件;
【注意】:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
【使用示例3】:观察AND 和 OR 的优先级
【使用示例4】:范围查询(between…and…)
【补充】:
我们使用and也可以实现范围查询,为什么还要有between…and…呢?
这就涉及到了MySQL中自身实现的优化手段,相比于使用and来说,between…and…是更好的进行优化的
【使用示例5】:范围查询(IN)
【使用实例6】:模糊查询(LIKE)
使用limit关键字限制返回的结果条数,使用offset来确定从第几条开始进行返回
在查询结果中,只取出其中的一部分,从而降低开销,加快查询速度。
例如,论坛类的网站,展示帖子的时候,往往会有分页展示的效果,一个论坛可有成千上万条帖子,在我们刚打开页面的时候,只能先看到其中的一小部分,点击翻页后能看到后续的内容
【SQL语句】
select 列名 from 表名 limit N offset M;
select 列名 from 表名 limit M,N;
上述两种写法等价,从第M条开始查询,最多返回N条记录
当offset M省略时,表示从第0条记录开始返回
【使用示例1】:
limit也可以和where、order by搭配使用的
在上面我们提到像select * 这样的操作,容易将数据库的服务器弄挂了,但是除了select* 之外,只要返回的记录足够多,就算是进行了where 的条件筛选后的查询也同样是有风险的,更稳妥的办法是加上limit
修改数据,是针对数据库服务器中的数据进行修改
【SQL语句】
update 表名 set 列名=值,列名=值.... where 子句;
修改操作是针对条件筛选之后,剩下的数据进行的修改,如果没写条件,意味着就是针对所有行进行修改
【SQL语句】:
delete from 表名 where 条件;
删除符合条件的行
delete from 表名;
把表里面的记录都删了,表只剩下一个空的表了,当表还在
drop table 表名;是将整个表都删掉了