【MySQL数据的操作一】

一、插入数据记录

在MySQL软件中可以通过 “INSERT INTO” 语句来实现插入记录,该SQL语句可以通过如下四种方式使用:

  • 插入完整数据记录
  • 插入数据记录一部分
  • 插入多条数据记录
  • 插入查询结果

插入完整数据记录, 插入数据记录一部分, 插入多条数据记录中,不论哪种插入方式,其语法形式都很接近,因此只要记住插入多条完整数据记录的语法形式,其他的就会了。

1.1插入多条完整数据记录

语法形式:

INSERT INTO table_name(field1,field2,……fieldn)
	VALUES(value11,value21,……valuen1),
		  (value12,value22,……valuen2),
		  …………
		  (value1m,value2m,……valuenm);

参数 table_name 表示所要插入记录的表名,fieldn 表示字段名,记录 (value11,value21,……valuen1)表示要插入第一条记录的数值,以此类推。

注:

  • 在具体应用时参数 fieldn 与参数 valuen 应一一对应。
  • 由于我们指定了具体的 fieldn(字段) ,所以 field1, field2,……fieldn 的顺序可以与表中字段的顺序不一致。但是,必须满足上一条的要求。

例1:插入多条完整记录
首先创建一个名为 t_dept 的表,同时创建3个字段,并设置字段 deptno 为自动增加(AUTO INCREMENT)和 主键约束(PK),loc 字段设置默认值为 ‘shangxi’

mysql> #创建表#
mysql> CREATE TABLE t_dept(
    -> deptno INT PRIMARY KEY AUTO_INCREMENT,
    -> dname VARCHAR(20),
    -> loc VARCHAR(40) DEFAULT 'shangxi'
    -> );
Query OK, 0 rows affected (0.04 sec)

然后查看一下该表的字段

mysql> #查看表结构#
mysql> DESC t_dept;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| deptno | int         | NO   | PRI | NULL    | auto_increment |
| dname  | varchar(20) | YES  |     | NULL    |                |
| loc    | varchar(40) | YES  |     | shangxi |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)

插入多条完整记录

mysql> #插入2条完整记录#
mysql> INSERT INTO t_dept(deptno,dname,loc)
    -> VALUES(1,'cjgong1','shangxi1'),
    ->          (2,'cjgong2','shangxi2');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

效验:
插入了两条完整的记录

mysql> #效验是否插入成功#
mysql> SELECT * FROM t_dept;
+--------+---------+----------+
| deptno | dname   | loc      |
+--------+---------+----------+
|      1 | cjgong1 | shangxi1 |
|      2 | cjgong2 | shangxi2 |
+--------+---------+----------+
2 rows in set (0.00 sec)

例2:不按表的字段顺序进行插入完整记录
如果我们插入记录的时候,字段的顺序打乱一下,与表中的字段顺序不一致,只要保证数据与插入的字段一一对应,也可插入成功。

mysql> INSERT INTO t_dept(loc,dname,deptno)
    -> VALUES('shangxi3','cjgong3',3),
    -> ('shangxi4','cjgong4',4);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
4 rows in set (0.00 sec)

效验:插入的第3、4条记录

mysql> SELECT * FROM t_dept;
+--------+---------+----------+
| deptno | dname   | loc      |
+--------+---------+----------+
|      1 | cjgong1 | shangxi1 |
|      2 | cjgong2 | shangxi2 |
|      3 | cjgong3 | shangxi3 |
|      4 | cjgong4 | shangxi4 |
+--------+---------+----------+

可以看出:只要插入语句中记录的数值与字段的参数对应即可插入成功。
例3:插入

1.2插入多条部分记录

如果在上面的语法形式中字段参数 field中 包含表中的部分字段,而不是全部字段,且 VALUES 参数的记录数据与其一一对应,就可以实现插入部分记录了。

例: 在 dname 字段中插入两条记录:cjgong5 和cjgong6

mysql> INSERT INTO t_dept(dname)
    -> VALUE('cjgong5'),
    -> ('cjgong6');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

效验:
可以看出,虽然表中第5条与第6条是2条完整的记录,但是我们只操作了 dname 字段,deptno 字段的内容是因为该字段设置了自动增加(AUTO INCREMENT)约束,所以其数据是插入记录时自动分配的,而 loc 字段的内容,是因为我们在前面设置了其默认值为 ‘shangxi’ 的约束,它自动添加为该默认值。

mysql> SELECT * FROM t_dept;
+--------+---------+----------+
| deptno | dname   | loc      |
+--------+---------+----------+
|      1 | cjgong1 | shangxi1 |
|      2 | cjgong2 | shangxi2 |
|      3 | cjgong3 | shangxi3 |
|      4 | cjgong4 | shangxi4 |
|      5 | cjgong5 | shangxi  |
|      6 | cjgong6 | shangxi  |
+--------+---------+----------+
6 rows in set (0.00 sec)

注:
同样,插入多条部分记录时,插入的字段顺序也可以不按表中的顺序排列,只要插入的字段与插入的数据记录一一对应即可。

1.3 插入一条记录

插入一条记录同样分两种情况:插入一条完整记录、插入一条部分记录
语法形式与插入多条记录的一样,只是在 VALUES 参数处只有一组数据。
语法形式

INSERT INTO table_name(field1,field2,field3, …… fieldn)
	VALUES(value1,value2,value3 …… valuen)

例1:插入一条完整记录,并效验

mysql>##完整插入第7条记录##
mysql> INSERT INTO t_dept(deptno,dname,loc)
    -> VALUES (7,'cjgong7','shangxi7');
Query OK, 1 row affected (0.00 sec)

mysql>##效验##
mysql> SELECT * FROM t_dept;
+--------+---------+----------+
| deptno | dname   | loc      |
+--------+---------+----------+
|      1 | cjgong1 | shangxi1 |
|      2 | cjgong2 | shangxi2 |
|      3 | cjgong3 | shangxi3 |
|      4 | cjgong4 | shangxi4 |
|      5 | cjgong5 | shangxi  |
|      6 | cjgong6 | shangxi  |
|      7 | cjgong7 | shangxi7 |
+--------+---------+----------+
7 rows in set (0.00 sec)

例2:插入一条部分记录并效验

mysql>##在 dname 字段处插入一条数据##
mysql> INSERT INTO t_dept(dname)
    -> VALUES ('cjgong8');
Query OK, 1 row affected (0.00 sec)

mysql>## deptno 字段自动生成8 , loc 字段 默认 shangxi ##
mysql> SELECT * FROM t_dept;
+--------+---------+----------+
| deptno | dname   | loc      |
+--------+---------+----------+
|      1 | cjgong1 | shangxi1 |
|      2 | cjgong2 | shangxi2 |
|      3 | cjgong3 | shangxi3 |
|      4 | cjgong4 | shangxi4 |
|      5 | cjgong5 | shangxi  |
|      6 | cjgong6 | shangxi  |
|      7 | cjgong7 | shangxi7 |
|      8 | cjgong8 | shangxi  |
+--------+---------+----------+
8 rows in set (0.00 sec)

1.4 不指定字段插入完整记录

如果要插入完整记录,还可以不用指定字段名,但 VALUES 中的数据的顺序与数量必须与表中的字段顺序与数量一致

语法形式

INSERT INTO table_name
	VALUES(value11,value21,……valuen1),
		  (value12,value22,……valuen2),
		  ……
		  (value1m,value2m,……valuenm);

例1:插入一条完整记录
插入时,VALUES中的数据的顺序为 deptno dname loc三个字段

mysql>##插入一条完整记录##
mysql> INSERT INTO t_dept
    -> VALUES(9,'cjgong9','shangxi9');
Query OK, 1 row affected (0.00 sec)

验证
添加成功第9条记录

mysql>##验证##
mysql> SELECT * FROM t_dept;
+--------+---------+----------+
| deptno | dname   | loc      |
+--------+---------+----------+
|      1 | cjgong1 | shangxi1 |
|      2 | cjgong2 | shangxi2 |
|      3 | cjgong3 | shangxi3 |
|      4 | cjgong4 | shangxi4 |
|      5 | cjgong5 | shangxi  |
|      6 | cjgong6 | shangxi  |
|      7 | cjgong7 | shangxi7 |
|      8 | cjgong8 | shangxi  |
|      9 | cjgong9 | shangxi9 |
+--------+---------+----------+
9 rows in set (0.00 sec)

1.4 插入来自其他表的数据

可以将另一个表中的查询结果插入表中,从而实现表数据值的复制功能。

语法形式

INSERT INTO table_name1(field11,field12,field13,……field1n)
	SELECT (field21,field22,field23,……field2n)
		FROM table_name2
			WHERE ……

解释:
将表table_name2中满足WHERE 条件的指定的字段(field21~ field2n)复制并插入到表 table_name1 中 field11~ field1n的字段中。
注:
参数 (field11,field12,field13,……field1n) 与参数 (field21,field22,field23,……field2n) 的个数与类型必须一致。

例:
向数据库 company 中的表 t_loader 插入部门表(t_dept)中关于字段 dname 和 loc 的查询结果。

1、首先建立 t_loader 表

mysql> CREATE TABLE t_loader(
    -> id INT,
    -> name VARCHAR(20),
    -> dname VARCHAR(20),
    -> loc VARCHAR(40)
    -> );
Query OK, 0 rows affected (0.04 sec)

2、查看 t_loader 表和 t_dept 表

mysql> ##查看 t_loader 表的记录##
mysql> SELECT * FROM t_loader;
Empty set (0.01 sec)

mysql> ##查看 t_dept 表的记录##
mysql> SELECT * FROM t_dept;
+--------+---------+----------+
| deptno | dname   | loc      |
+--------+---------+----------+
|      1 | cjgong1 | shangxi1 |
|      2 | cjgong2 | shangxi2 |
|      3 | cjgong3 | shangxi3 |
|      4 | cjgong4 | shangxi4 |
|      5 | cjgong5 | shangxi  |
|      6 | cjgong6 | shangxi  |
|      7 | cjgong7 | shangxi7 |
|      8 | cjgong8 | shangxi  |
|      9 | cjgong9 | shangxi9 |
+--------+---------+----------+
9 rows in set (0.00 sec)

t_loader 表没有记录,t_dept 表有9条记录

3、复制表 t_dept 后三条记录至 表 t_loader 中

mysql> INSERT INTO t_loader(dname,loc)
    ->  SELECT dname,loc
    ->      FROM t_dept
    ->          WHERE deptno>6;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

查询条件为 deptno字段中的数据 > 6 ,在表 t_dept 中只有第7、8、9条满足条件。

验证:

mysql> SELECT * FROM t_loader;
+------+------+---------+----------+
| id   | name | dname   | loc      |
+------+------+---------+----------+
| NULL | NULL | cjgong7 | shangxi7 |
| NULL | NULL | cjgong8 | shangxi  |
| NULL | NULL | cjgong9 | shangxi9 |
+------+------+---------+----------+
3 rows in set (0.00 sec)

表 t_loader 被插入了3条记录,涉及到2个字段(dname 与 loc)


生词表

单词读音译文MySQL
Value英 [ˈvæljuː]n. (商品)价值;(与价格相比的)值,划算程度;用途;积极作用;是非标准;值
Field英 [fiːld]n.领域;田;地;牧场;(作某种用途的)场地;(覆盖…的或有…的)大片地方;专业;实地;运动场;守队;(比赛项目的)全体参赛者;行业;场;字段字段

如有错误敬请高人指点,书写的易读性可否,希望大家多提意见。
上一篇【MySQL 索引的操作】
下一篇【MySQL 数据的操作二】

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值