DML数据操纵语言,insert插入、update修改、delete删除。
样例表:
create table tb_user(
id bigint primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null,
birth data,
sex char default '男',
score bigint default 0
)engine=innodb default charset utf8;
insert 插入操作
语法1:insert into 表名称 values(值1,值2,...) values中的值和表的列一一对应。
insert into tb_user values("张三","123456","1999-03-25","男");
语法2:insert into 表名称(列名1,列名2,...) values(值1,值2,...) 括号中的列名顺序和values中的值一一对应,用于不需要每列都插入数据时使用。
insert into tb_user(username,password) values("李四","666666");
规范:
- 值与字段(表中定义的属性)必须对应,包括个数和数据类型
- 值必须在合理的字段类型范围内
- varchar、char和日期类型必须使用单、双引号包裹
- 如果没有任何限制,控制允许插入
- 没有指定列名时,必须给出完整数据,且数据赋值顺序和定义表时列的顺序相同
- 优化写法:指定列名称。无序遵循定义表时列的顺序,但要和执行列的顺序相同。
批量插入查询出的数据
insert into table1(列名1,列名2,...) select 列1,列2,...from table2;
insert into tb_user(username,password) select username,password from tb_newuser;
克隆旧表的表结构和表中数据
克隆了旧表的表结构和表中数据,但是会有约束丢失问题。
create table tb_newuser as select * from tb_user;
修改操作
语法1:update 表名称 set 列名1=值1,列名2=值2,...
update tb_user set username="陈信宏",password="19751206",sex="男" where id=1;;
上述例子修改了id为1的行中username和password列。如果不加where id=1,那么修改的就是所有行的username和password列。
修改表中所有行的指定列的值等号后面也可也时一个表达式计算。例如age增加5%
update tb_user set age=age*1.05;
pudate tb_user set age=25,sex="女";
语法2:update 表名称 set 列名1=值1,列名2=值2,...where 条件 用来修改表中满足条件的指定列的值,例如1999年之前的用户,积分增加10%
update tb_user set score=score*1.1 where year(birth)<1999;
删除数据
语法1:delete from 表名称; 删除表中所有数据,整表删除。
delete from tb_newuser;
语法2:delete from 表名称 where 条件; 删除表中满足条件的所有行。
delete from tb_user where year(birth)=1999 and sex="男";
|