在我们需要根据现有表格来创建新的表格(副表),或者其他需要现有表格建表语句时,可以使用以下方法显示建表语句
显示建表语句使用 show create table table_name
show create table jiaoyuting
--结果
CREATE TABLE `jiaoyuting` (
`id` int NOT NULL,
`deptName` varchar(255) DEFAULT NULL,
`catalogName` varchar(255) DEFAULT NULL,
`serviceName` varchar(2550) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
数据库通过插入、更新和删除等方式来改变表中的记录。插入数据是向表中插入新的记录,通过 INSERT 语句来实现。更新数据是改变表中已经存在的数据,使用UPDATE 语句来实现。删除数据是删除表中不再使用的数据,通过DELETE 语句来实现。
插入数据是指向表中插入新的记录,通过这种方式增加表中的记录。在MYSQL 中通过INSERT语句来插入数据的。
使用INSERT语句可以为表中所有的列插入数据,也可以为表中指定列插入数据,可以插入多条记录,也可以插入从别的表中查询到的数据
如果要插入的数据覆盖了表中的所有的列,可以通过两种方式来插入数据。一种是省略了表的列名,第二种是列出表的列名。
当要插入的数据覆盖了目标表的全部列时,insert语句可以不指定具体的列名
具体语法为
insert into 表名 values(值1,值2,...,值n);
期中表名是指目标表的表名,“值n”参数表示要插入的数据。“值1”到“值n”分别对应着表中的每个字段。表中定义了几个字段,INSERT语句中就应该对应有几个值。插入的顺序与表中字段的顺序相同。而且,取值的数据类型要与表中对应字段的数据类型一致。
示例:
先创建一个目标表
SELECT * FROM `gzb`
--根据现有的表创建目标表
-- 显示表gzb的建表语句
show create table gzb
--根据gzb的建表语句创建表gzb_v2
CREATE TABLE `gzb_v2` (
`id` int NOT NULL,
`name` varchar(255) DEFAULT NULL,
`zhiwei` varchar(255) DEFAULT NULL,
`sex` varchar(2550) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
向表gzb_v2插入数据
--向表gzb_v2插入数据
insert into gzb_v2 values ('1','张三','会计','男');
select * from gzb_v2
注意插入的值的个数必须要个目标表的列的个数相同且顺序也必须要一样
如果不对所有列插入数据,或者不按列的顺序插入数据,则需要列出要插入列的列名(列名的顺序可以不按照目标表列的顺序)
其基本语句为
insert into 表名 (列1,列2 ,列3……) values (值1,值2,值3……)
示例
1,对目标表的所有列插入数据
--对目标表的所有列插入数据
insert into gzb_v2 (id,name,zhiwei,sex) values ('2','李四','财务','女')
select * from gzb_v2
2,对目标表的所有列插入数据,但是列的顺序和目标表的列的顺序不一致
--2,对目标表的所有列插入数据,但是列的顺序和目标表的列的顺序不一致
insert into gzb_v2 (id,zhiwei,name,sex) values ('3','项目经理','王五','男')
select * from gzb_v2
--3,对目标表的指定列插入数据
insert into gzb_v2 (id,name,sex) values ('4','张龙','男')
select * from gzb_v2
结果:
注意:没有赋值的字段,数据库系统会为其插入默认值。这个默认值是在创建表的时候定义的。如上面function字段和address字段的默认值为NULL。如果某个字段没有设置默认值,而且是非空,这就必须为其赋值。不然数据库系统会提示“Field’name’ doesn’t have a default value”这样的错误。
同时插入多条记录,是指一个 INSERT语句插入多条记录。当用户需要插入好几条记录,用户可以使用上面两个小节中的方法逐条插入记录。但是,每次都要写一个新的INSERT 语句。这样比较麻烦。MySQL 中,一个 INSERT语句可以同时插入多条记录。其基本语法形式如下:
insert into 表名 (列1,列2,列3……) values (值1.1,值1.2,值1.3……),(值2.1,值2.2,值2.3……)……
向MySQL的某个表中插入多条记录时,可以使用多个INSERT语句逐条插入记录,也可以使用一个 INSERT语句插入多条记录。选择哪种方式通常根据个人喜好来决定。如果插入的记录很多时,一个INSERT 语句插入多条记录的方式的速度会比较快。
示例:
插入多条记录
--插入多条记录
insert into gzb_v2 (id,name,zhiwei,sex) values
('5','王五','会计','女'),
('6','李六','开发','男'),
('7','赵七','开发','女')
select * from gzb_v2
结果
注意:如果要插入的是目标表的全部列,列名可以省略掉,和1.1.1介绍的是 一样的
insert语句可以将一个表的查询结果插入的另一个表中,这样可以方便的进行不同表的数据交换。其基本语法如下:
insert into 表名 (列1,列2,列3……)
select 值1,值2,值3…… from 表名2 where 条件表达式;
期中表名为目标表的名称,列n为目标表的列名。表2为要查询的表,值n为要插入的数据,条件表达式为查询语句的限制条件
使用这种方法时,必须保证“列n”和“值n”中的字段个数是一样的。而且,每个对应的字段的数据类型是一样的。如果数据类型不一样,数据库系统会报错。然后,阻止INSERT语句向下执行。
注意:将查询结果插入到目标表,没有关键字values
示例:
将查询结果插入到目标表
--向目标表插入查询到的数据
insert into gzb_v2 (id,name,zhiwei,sex)
select id,deptName,catalogName,serviceName from gzb where id > 7
select * from gzb_v2
更新数据是更新表中已经存在的记录。通过这种方式可以改变表中已经存在的数据。例如,学生表中某个学生的家庭住址改变了,这就需要在学生表中修改该同学的家庭地址。在MySQL中,通过UPDATE语句来更新数据。
在 MySQL中,UPDATE语句的基本语法形式如下:
update 表名
set 属性名1=取值1,属性名2=取值2,
...,
属性名n=取值n
where 条件表达式;
其中,“属性名n”参数表示需要更新的字段的名称;“取值 n”参数表示为字段更新的新数据;“条件表达式”参数指定更新满足条件的记录。
示例:
把表gzb_v2,中名字叫张三的职位改成项目经理
表gzb_v2更改前的数据是这样的
结果:
进行更改
--更新数据把张三的职位改成项目经理
UPDATE gzb_v2
set zhiwei = '项目经理'
where name = '张三'
select * from gzb_v2
结果变成这样
注意:更新数据时,满足限制条件数据不止一条,这时update语句将会更改所有满足限制条件的语句,比如下面的示例:
示例:
把职位为会计的职位改为人事
改之前是这样的
--把职位为会计的职位改为人事
UPDATE gzb_v2
set zhiwei = '人事'
where zhiwei = '会计'
select * from gzb_v2
结果是这样
!!!使用UPDATE语句更新数据时,可能会有多条记录满足WHERE条件。这个时候一定要特别小心,最好先执行SELECT语句判断满足WHERE条件的记录是否确实是需要更新的。如果其中有些记录不需要更新,应该重新设置WHERE条件.
删除数据,是删除表中已经存在的记录。例如有某个员工离职了,需要把这个员工删除,这个时候就需要删除这个员工的数据记录。
删除表中记录的语句为DELETE
MySQL中,DELETE语句的基本语法形式如下:
delete from 表名[where条件表达式】;
其中,“表名”参数指明从哪个表中删除数据;“WHERE条件表达式”指定删除表中的哪些数据。如果没有该条件表达式,数据库系统就会删除表中的所有数据。
示例:
删除名字叫张三的记录
--删除名字叫张三的记录
DELETE from gzb_v2
where name = '张三'
同时 DELETE可以删除多条记录
示例:
删除职位为人事的记录(从上图可以看到王五和李八的职位均为人事)
--删除职位为人事的记录
delete from gzb_v2
where zhiwei = '人事'
select * from gzb_v2
delete 如果不加上where条件表达式,则delete语句会删除所有的记录
示例:
不添加where条件表达式,删除所有的记录
--不添加where条件表达式,删除所有的记录
delete from gzb_v2
select * from gzb_v2
因为执行DELETE语句后,会将记录从表中删除。删除过程中不会有任何提示,因此必须要特别小心。在条件允许的情况下,最好先用SELECT语句查询准备删除的记录。这样可以确认这些记录确实是需要删除的。