MySQL(七) 数据的更新操作-INSERT/DELETE/UPDATE

增删查改中的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语句增删查改就介绍完了,还算是比较基础,多用用就熟了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇