文章目录

  • 8.插入、更新和删除数据
  • 8.1 插入数据
  • 8.2 更新数据
  • 8.3 删除数据集
  • 8.4 为表增加计算列


8.插入、更新和删除数据

8.1 插入数据

在使用数据库之前,数据库中必须要有数据,MySQL中使用INSERT语句向数据库表中插入新的数据记录。可以插入的方式有插入完整的记录、插入记录的一部分、插入多条记录、插入另一个查询的结果,下面将分别介绍这些内容。
本章将使用样例表person,创建语句如下:

create table person 
(
	id int unsigned not null auto_increcement,
	name char(20) not null default '',
	age int not null default 0,
	info char(50) null,
	preimary key (id)
)
  • 为表的所有字段插入数据
    使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值。基本语法格式为:
insert into table_name (column_list) values (values_list)

table_name指定要插入数据的表名,column_list指定要插入数据的那些列,value_list指定每个列应对应插入的数据。注意,使用该语句时字段列和数据值的数量必须相同。
【例】在person表中,插入一条新记录,id值为1,name值为Green,age值为21,info值为Lawyer,SQL语句如下:

insert into person(id,name,age,info) values(1, ‘Green',21,'Lawyer');

INSERT语句后面的列名称顺序可以不是person表定义时的顺序。即插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与列字段的顺序相同就可以.
使用INSERT插入数据时,允许列名称列表column_list为空,此时,值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同

insert into person values (3,'Mary',24,'Musician');
  • 为表的指定字段插入数据
    为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。
    【例】在person表中,插入一条新记录,name值为Willam,age值为20,info值为sportsman,SQL语句如下:
insert into person(name,age,info) values ('Willam',20,'sports man');

在插入记录时,如果某些字段没有指定插入值,MySQL将插入该字段定义时的默认值。

  • 同时插入多条记录
    INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开,基本语法格式如下
insert into table_name(column_list) values (value_list1),...(value_listn)
  • 将查询结果插入到表中
    INSERT语句用来给数据表插入记录时指定插入记录的列值。INSERT还可以将SELECT语句查询的结果插入到表中,如果想要从另外一个表中合并个人信息到person表,不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。基本语法格式如下:
insert into table_name1(column_list1) select (column_list2 ) from table_name2 where (condition)

table_name1指定待插入数据的表;column_list1指定待插入表中要插入数据的哪些列;table_name2指定插入数据是从哪个表中查询出来的;column_list2指定数据来源表的查询列,该列表必须和column_list1列表中的字段个数相同,数据类型相同;condition指定SELECT语句的查询条件
【例】从person_old表中查询所有的记录,并将其插入到person表中。首先,创建一个名为person_old的数据表,其表结构与person结构相同,SQL语句如下:

create table person_old
(
	id int unsigned not null auto_increcement,
	name char(20) not null default '',
	age int not null default 0,
	info char(50) null,
	preimary key (id)
);

向person_old表中添加两条记录,接下来将person_old表中所有的记录插入person表中,SQL语句如下

insert into person(id, name,age, info) select id, name, age, info from person_old;

8.2 更新数据

表中有数据之后,接下来可以对数据进行更新操作,MySQL中使用UPDATE语句更新表中的记录,可以更新特定的行或者同时更新所有的行。基本语法结构如下:

update table_name
set column_name1=value1,...column_namen=valuen where (condition);

column_name1,column_name2,……,column_namen为指定更新的字段的名称;value1,value2,……,valuen为相对应的指定字段的更新值;condition指定更新的记录需要满足的条件。更新多列时,每个“列-值”对之间用逗号隔开,最后一列之后不需要逗号。
【例】在person表中,更新id值为11的记录,将age字段值改为15,将name字段值改为LiMing,SQL语句如下:

update person set age=15, name='LiMing' where id=11;

【例】在person表中,更新age值为19~22的记录,将info字段值都改为student,SQL语句如下:

update person set info='student' where id between 19 and 22;

8.3 删除数据集

从数据表中删除数据使用DELETE语句,DELETE语句允许WHERE子句指定删除条件。DELETE语句基本语法格式如下:

delete from table_name [where<condition>]

table_name指定要执行删除操作的表;“[WHERE ]”为可选参数,指定删除条件,如果没有WHERE子句,DELETE语句将删除表中的所有记录
【例】在person表中,删除id等于11的记录,SQL语句如下

delete from person wherer id =11;

【例】删除person表中所有记录。

delete from person ;

8.4 为表增加计算列

什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。增加计算列的语法格式如下:

col_name data_type [generaterd always ] as (expression) [virtual|stored] [unique[key]] [comment commment] [not null|null][[primary ]key]

在MySQL 8.0中,CREAE TABLEALTER TABLE中都支持增加计算列。下面以CREAE TABLE为例进行讲解。
【例】定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的值。
首先创建测试表tb1,语句如下:

create table tb1(
	id int(9) not null auto_increment,
	a int(9) default null,
	b int(9) default null,
	c int(9) generated always as ((a+b)) virtual, 
	primary key ('id') 
)

插入演示数据,语句如下:

insert into tb1(a,b) values(100,200);

mysql8新增用户 error 1726 mysql新增数据语句_SQL


更新数据中的数据,语句如下:

update tb1 set a=500;

mysql8新增用户 error 1726 mysql新增数据语句_sql_02


从结果可以看出,字段c中的数据始终是字段a和字段b的和,随着字段a和字段b中数据的变化,自动重新计算a+b的值。