增删查改中的SELECT语句已经做过了详细介绍,接下来是增加数据(INSERT),删除数据(DELETE)和更新数据(UPDATE)的介绍。
1.INSERT-插入
先新建一个测试表,再进行插入
create table sale ( product_id int AUTO_INCREMENT not null PRIMARY KEY, product_name VARCHAR(256) not null, product_type VARCHAR(256) not null, sale_price FLOAT not null, purchase_price FLOAT not null, regist_date DATE not null );
##insert into语句格式 insert into table_name (columnA_name,columnB_name,......) values (valueA,valueB,....); insert into sale ( product_name, product_type, sale_price, purchase_price, regist_date) values ( '方便面', '食品', '3.5', '2.5', '2021-03-01');
在设置PRIMARY KEY的时候,如果找不到合适的,可以用递增数字来代替,上面创建的超市商品信息的表中就另外设置了product_id作为主键,同时采用AUTO_INCREMENT约束条件,在INSERT INTO插入数据的时候就不需要对product_id进行指定了,其他的列及数值要严格对应,否则会报错。
相似的还有DEFAULT默认值的用法,在这里用ALTER添加一列。
alter table sale add column remarks varchar(256) default 'x';
这里很明显可以发现新增的列会自动用DEFAULT的值自动补全,那么如果不做约束,会补全or报错呢?
alter table sale add column remarks varchar(256);
结果如图所示,依旧会补全,用NULL值进行了补全,那么要是设置了NOT NULL会出现什么情况呢?
alter table sale drop column remarks; alter table sale add column remarks varchar(256) not null;
出现了空的数据,这里并不是空的,是有数据的,根据VARCHAR的属性,这里默认是空字符串,再做测试发现INT和FLOAT默认添加的是0,用时间格式约束的时候会报错。
1.2 从其他表中复制数据
创建一个sale表的copy版本,和sale有相同的表结构,这里复制表结构采用的是SELECT语句来实现,把从sale表中查询到的数据作为sale_copy的输入,在这里我把column名称全省略了。
insert into sale_copy select * from sale;
除了上述的CREATE+COLUMNS方式创建新的表,还可以通过SELECT直接创建。
create table sale_copy select * from sale where 1=2;
这里的'where 1=2'是给了一个否定条件,其实复制表结构和数据非常的简单,把'where 1=2'去掉就可以了,这里给了否定条件就只复制表结构,不再复制数据了。
当然也可以进行一些复杂的select语句,比如排序等。
create table sale_copy select * from sale where 1=2; insert into sale_copy select * from sale order by product_type;
重点主要:不能从本表复制到本表的操作,会因为主键唯一产生冲突。
2.DELETE-删除
DELETE就比较简单了,记住它的操作对象是行数据就行,不能单独删除某个列的数据。
此外DELETE是对原始数据进行操作,与GROUP BY和HAVING联用的话没有意义,只能与WHERE联用来删除部分数据。
delete from table_name; #删除表中全部的数据,保留表结构 delete from table_name where restrict-clause #通过限制条件删除部分数据
DELETE删除数据的处理时间相对较长,在很多RDBMS数据库中都有TRUNCATE子句,该子句不能和WHERE联用,不能删除部分数据,只能全部删除,TRUNCATE比DELETE有优势的地方在于其处理速度要快的多,在删除大表的时候,可以用TRUNCATE来减少处理时间。
turncate table_name; #删除表中全部数据
3.UPDATE-更新
UPDATE语句和SELECT在使用WHERE语句上是一致的,UPDATE语句的构成可以分为三个字
UPDATE-->SET-->WHERE
实际的执行的顺序是先WHERE搜索到满足条件的行,然后再SET定位到指定的列以及更新的value,最后执行UPDATE操作
WHERE-->SET-->UPDATE
update sale set regist_date='2021-03-15';
update sale set regist_date='2021-03-01' where product_type='办公用品';
这里最后一列数据product_type是办公用品,因为篇幅限制,没有截图完全。
UPDATE可以对多列数据进行操作,也可以对数据进行四则运算。例如把食品类的注册日期全部调整为2021-03-01,以及所有食品类的都打9折。
update sale set regist_date='2021-03-01',sale_price=sale_price*0.9 where product_type='食品';
NULL值可以用于没有NULL值限制和主键的其他列的更新
上述set columnA=A,columnB=B的形式可以写成清单的形式,set (columnA,columnB) = (A,B),但是需要注意的是前者适用所有的DBMS中,但后者并不全部适用。
到这里MySQL的DML语句增删查改就介绍完了,还算是比较基础,多用用就熟了。