数据操作语言(DML)
数据插入(增加数据)
形式一
insert into 表名(字段1,字段2,···) values(值 a1,值 a2,···),(值 b1,值 b2,···),···;
形式二
insert into 表名1(字段1,字段2,···) select 字段1,字段2,··· from 表名2;
形式三
//每个字段一次只能插入一个字段
insert into 表名1 set 字段名1=值1,字段名=值2,···;
形式四:适用于从本地文件中读取并生成表
load data infile ‘文件完整名(含路径)’ into table 表名;
注意
- 形式1和形式2每个字段可以一次插入多条数据
//形式1范例
inset into tab5 (f1,f2,f4,id2) values (1.23,12.3,'adasd1',100),
(1.33,13.3,'ada2sd1',101),(1.43,14.3,'adas3d1',1);
- 值得形式,数字直接写,字符串时间加单引号,但如果是函数值,不能加引号
- 不管哪种形式,都要理解为:插入数据的单位是"行"
- 有的字段不需要插入数据,此时插入时不要写该字段名:例如auto_increment,timestamp。
数据删除
形式
delete from 表名 [where条件] [order排序] [limit限定];
注意
- 通常,删除应该以行为单位进行
- 删除语句中,where条件不写将删除表中所有数据
- order排序和limit限定应用中通常不需要
order用于设定删除数据的先后数据
limit用于限定在设定的顺序情况下删除制定的某些行
类似删除语句truncate
形式
truncate [table] 表名;用于直接删除整个表(结构)并重新创建该表。
说明
- 该语法删除整个表
- 该语法会重新创建该表
- 跟delete语句不带where条件的区别:
主要影响的是auto_increment这种类型的字段值:truncate序号会重新计算,delete则继续按原来的序号增长
数据修改
形式
update 表名 set 字段名1=值表达式1,字段名2=值表达式2,....[where条件] [order排序] [limit限定];
注意
同数据说明注意
复制表
形式一
//这种方法,表复制的比较完整
//复制结构
create table tab2 like tab1;
//复制数据
insert into tab2 select * from tab1;
形式二
//同时复制结构和数据,但这种形式可能会丢失一些机构信息,例如:索引,约束,自增长属性
creat table tab2 select * from tab1;
数据查询语言(DQL)
基本查询
语法形式
select[all|distinct] 字段或字段表达式列表[from 子句][where 子句][group by 子句][having 子句][order by 子句][limit 子句]
select 语句作用是从"数据源"中,找出想要的数据,并作为该语句的结果返回,所谓数据源就是数据库中的表。
- [all|distinct]:用于设定所select出来的数据是否允许出现重复行
all:允许出现重复行,默认值
distinct:不允许出现重复行
- from子句:数据从那个表里面查
- where子句:相当于php或js中的if语句,结果为布尔值,本质就是为select设定一个if条件,通常和字段联合使用
where true,where 1,where 1=1 都表示true
where false,where 1=2 表示false
where中的运算符:算数运算符(+ - * / %),比较运算符(> = >= <= <>),扩展(== !=),逻辑运算符(and,or,not)
在MySql中的布尔值只是int类型非0和0的别名
在MySql中空为null,非空为not null
where子句中的between···and···语句相当于字段名>=值1 and 字段名<=值2
where子句中的in(值1,值2,值3···)语句相当于字段名=值1or值2or值3
where子句中的like语句:字段名 like '要查找的字符'
,主要用于对字符类型的字段进行字符匹配查找,有两个特殊含义字符是"%"和"",分别代表任意多个的任意字符和1个任意字符,如果要查找%或则用\转义。
where子句出现时必须出现from子句
- group by分组子句:
group by 字段1 排序方式1,字段2 排序方式2,···
,分组后得到的数据是组数据,而不是单行数据,按照某个字段进行分组,其他字段如果不一样,将会自动取第一个。
- having子句:概念跟where子句完全一样。have是只针对groupby之后的"组"数据进行条件判断。
select count(*) as f1,max(f1) as f2 from tab1 group by f3 having f1>5 and f2<1000