insert插入数据

这里为了示例,我们创建一个新的表:

use new_world;

create table productins

pro_id int not null,

pro_name varchar(100) not null,

pro_type varchar(32) not null,

sale_price int default 0,

purchase_price int ,

regist_date date ,

primary key (pro_id)

结果是:

要用insert插入数据有两种方式

方式一:

insert into productins (pro_id,pro_name,pro_type,sale_price,purchase_price,regist_date) values (1,"t恤衫","衣服",1000,500,"2019-09-17");

表名后面的括号叫做列清单,values后面括号里面的叫做值清单。

方式二:

insert into productins  values (1,"t恤衫","衣服",1000,500,"2019-09-17");

用insert插入多行内容:

insert into productins values

(2,"打孔器","办公用品",500,320,"2009-09-11"),

(3,"运动T恤","衣服",4000,2800,null)       #有设置not null约束的地方不可以设置null值

一般不建议用用insert插入多行内容。因为一旦出问题了,相对于逐行插入,多行插入很难找出问题的根源。

插入默认值

我们之前在创建表格的时候把sale_price设置成默认值0了。现在我们插入内容的时候就要注意默认值了。

insert into productins values(7,"擦菜板","厨房用具",default,790,"2019-09-18");

这样结果出来sale_price就为0了,因为我们创建的时候就默认它的默认值是0,这里指定输出默认值,所以结果是0。

从其他表中复制数据

我们之前创建过其他的表格,现在我们要把这些表格的内容都复制走。

假如我们现在有两个表,一个是test1,这个表里面是有数据的。

另一个表叫做productins,这个表是空表没数据的。

那么我们现在想要将test1里面的数据导入到productins里面该怎么做呢?

insert into productins  select *from test1;

这里要注意的是,首先productins和test1两个表格的列数量要一样,其次,他们各个列的数据类型也要一一对应,不可以一个是char一个是int,这样就无法复制。

还有一个复制的方式如下:

insert into productins (pro_id,pro_name,pro_type,sale_price,purchase_price,regist_date)

select id,name,type,quantity,price,pro_date from test;

这个方式其实和上面那个是一样的,只是这个代码更加详细的把每一个列名都列出来而已。

根据条件复制数据

我们先创建了一个表格,三个列分别是类型,数量的总和以及价钱的总和。同样的,我们将会根据type来分组,以及根据分组计算数量和价格的总和,然后将结果复制到我们这个test_type的表格中。

insert into test_type select type,sum(quantity),sum(price) from test group by type

这样就可以把分组计算后的数据复制导入到我们的新表当中。

除了group by以外还可以用where等任何sql语法,但是用order by并不会产生任何效果。

数据的删除:

如果想删除表可以用drop table,如果只想删除表中的数据,要用delete语句。

语法为delete from 表名

具体为:delete from test;

delete删除的对象不是表耶不是列,而是行。

删除指定对象数据:

现在我们有这个表格:

我们要将sum_quantity里面大于100的全部删除,代码为:

delete from test_type where sum_quantity >=100;

结果为:

我们成功删除了其中大于100的行。

这里要注意一下,第一次运行这个代码的时候往往会报错,报错提示为:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.。

这是因为mysql的安全机制造成的,是一个正常现象,我们只要在运行我们的代码之前先运行一行代码:

SET SQL_SAFE_UPDATES = 0;

将这行代码成功运行以后,那么你在运行delete删除代码就不会报错了。

delete语句中不可以使用group by、having、order by这三类子句,而只能使用where子句。原因很简单,无论是group by还是having都是用来选取数据的时候改变数据形式的,order by是用来指定结果的顺序的,所以在删除数据的时候,这些都起不到什么作用。

除了用delete删除数据以外还可以用truncate来删除,但是相对于delete来说,truncate只能删除表中的全部数据,而不能用where来删除指定数据,语法为:truncate 表明

具体为:truncate test_type

和delete比较起来truncate巨头速度快效率高的优势,如果你想把表中的数据全部删除的话,用truncate的速度会更快。

数据的更新(update):

对于表格数据的修改可以用update

我们现在有如下表格:

现在我们要用update来进行一个修改数据。

我们先把date里面的日期全部统一成2019年9月11号。代码如下:

update test_copy set date="2019-09-11"

结果是:

用这种方式修改的值,就算是null也会被修改成你指定的结果。

指定条件的update语句(搜索型update):

这是我们现在拥有的表格。

我们现在做如下修改:

update test_copy set price=price*2 where type="commodity"

当type是commodity的时候,我们将price的价格乘以2.

结果是:

可以看到,type是commodity的这两行价格都提高了两倍。

将数据更新为null:

我们现在有这个表格:

我们现在来将其中的一行数据里面的日期改为null,代码如下:

update test_copy set date = null where id =7

结果是:

可以看到,id为7的这一行,date这里变成了null。要注意,这里只能设置未设置not null约束的数据,如果设置了not null或者是主键约束,那么就无法修改成null。

多列更新:

如果要一次性修改多条数据的话,可以参照以下方式:

update test_copy set price=price+4,quantity=quantity-6 where type="pen"

这样当type是pen的时候price和quantity都会加4和减6.

要注意的是,执行这一条的时候有可能会报错,错误为1175,如果遇到这个报错要先执行:

SET SQL_SAFE_UPDATES = 0;

然后再执行修改代码即可。

事务是需要在同一处理单元中执行的一系列更新处理的集合。

语法为:

start transaction;

具体写法为:

假如我们要执行这两条语言,按理来说我们用update分别执行两次就可以了。但是有时候会造成只执行了一条,另一条忘记执行的情况,这里虽然只有两条一般不会忘记,但是如果要执行的特别多的话,难免会遗漏一两条,因此这里我们就要用到事务来处理这个情况。

start transaction;

update test_copy set price=price+4,quantity=quantity-6 where type="pen";

update test_copy set price=price*6,quantity=quantity+10 where type="ball";

用start transac和commit来开头结尾的即为一个事务。

rollback是取消事务包含的全部更新处理的结束指令,相当于文件处理中的放弃保存。,一旦回滚,数据库就会恢复到事务开始之前的状态。