CRUD(新增、查询、修改、删除)操作在sql中很常见。创建表后进行CRUD,使用idea远程连接mysql服务器来学习这些语法,你也可以使用mysql客户端。idea远程连接mysql方法如下:
使用idea可以随时更改sql命令,使用起来比较方遍。使用快捷键ctrl+回车执行sql命令。
新增
insert into 表名(字段1, 字段2, ...)
values (value1, value2, value3);
先创建一个学生表,然后插入数据。
# 创建学生表
create table student
(
-- 学生id
id int,
-- 学生姓名
name varchar(20)
);
如果是字符型,必须使用单引号或双引号。上面的都是全列插入,MySQL还支持指定列插入。
查询
select 查询的列,查询的列
from 表名
[where 满足的条件] # 可选
[order by 排序] # 可选
[limit n][offset m]; # 可选
全列查询
查询刚刚插入的学生表的所有列,使用*。
通常情况下不建议使用*全列查询。列越多,意味着需要传输的数据量很大,同时可能影响索引效率。
指定列查询
只查询部分列,比如name列,可以把*改为name。多个列之间用,隔开。
指定列查询的时候不需要按照表定义的顺序来。
查询字段为表达式
对于字段是数字类型的,在查询的时候可以进行加减乘除等数学运算。
可以看到,id增加了1。
别名
如果想对红色框中的id + 1起别名,可以使用as,以别名作为该列的名称。
去重
如果我们插入的数据中有重复的值,想要去掉,就可以使用distinct关键字对某列数据去重。在插入一个“3 王麻子”。
条件查询
有的时候,对表中的某些数据需要进行筛选,这个时候,就可以使用where关键字进行筛选。比如查看学生中名字不叫王麻子的同学。
条件查询的一些运算符号如下:
注意点:
(1)like模糊匹配。%的用法,比如查找‘王%’,表示查找王开头的任何字符串,王后面跟零个字符,一个字符,多个字符都是可以的,但是这样查找的效率不高。_的用法,比如查找‘王_’,就只能查找王后面带一个字符的,其他数量的字符都不行;
(2)where条件可以使用表达式,也可以加括号,但是不能使用别名;
(3)and优先级高于or,同时使用需要加()。
(4)如果这个时候,使用查看列表操作,会发现两个王麻子。不是去重了吗,实际上,查询所有的操作都是在临时表上进行操作的,对磁盘上的数据没有影响。要对磁盘上的数据进行修改,需要使用修改操作。
排序
使用order by进行排序。asc为升序(默认),desc为降序。现在对id以降序方式排序。
分页查询
有的时候我们不想查询的结果显示太多,那么就可以使用limit进行分页查询。查询从0下标开始。
比如,查询前两个数据。
总结:
(1)查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。这种查询就是多表查询,我们在这里不讨论;
(2)select 命令可以读取一条或者多条记录;
(3)可以使用星号(*)来代替其他字段,select语句会返回表的所有列的数据;
(4)可以使用 WHERE 语句来包含任何条件;
(5)可以使用 LIMIT 属性来设定返回的记录数;
(6)可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0;
(7)查询中做的更改都是在临时表上操作的,对磁盘中的数据没有影响。
修改
修改操作才能修改磁盘上的数据。
update 表名
set 修改的列(多个列用, 隔开)
[where...]
[order by...]
[limit ...];
修改赵六的id为4。
删除
delete from 表名
[where ...]
[order by ...]
[limit ...];
删除王麻子这个数据。
delete操作主要针对表中的数据进行删除,但是不会删除这个表,而是把表中的内容清空;drop针对表操作,不仅会删除表中数据,还会删除表。
删除操作是很危险的,要谨慎操作。
关于进一步的增删改查操作,下一次再讨论。