MySQL必知必会 -- INSERT 插入数据

插入完整的行


MariaDB [test]> insert into linux value('user8','888','girl','19',null,null,2);\c
Query OK, 1 row affected (0.05 sec)

MariaDB [test]> select * from linux;
+-------+--------+------+------+-------+------------+-------+
| user  | passwd | sex  | age  | price | math_price | class |
+-------+--------+------+------+-------+------------+-------+
| user2 | 222    | girl | 23   | 155   | 36         |     1 |
| user3 | 333    | boy  | 12   | 78    | 66         |     1 |
| user4 | 444    | boy  | 22   | NULL  | NULL       |     2 |
| user5 | 555    | boy  | 30   | NULL  | 43         |     2 |
| user1 | 111    | boy  | 18   | 35    | 88         |     1 |
| user6 | 666    | girl | 16   | 35    | 43         |     2 |
| user7 | 777    | boy  | NULL | NULL  | NULL       |  NULL |
| user8 | 888    | girl | 19   | NULL  | NULL       |     2 |
+-------+--------+------+------+-------+------------+-------+
8 rows in set (0.00 sec)

数据在VALUES子句中给出,对每个列必须按顺序提供一个值。如果某个列没有值(如上面的cust_contact和cust_email列),应该使用NULL值(假定表允许对该列指定空值)。

  • 这种是不安全的,因为表中的列可能是变动的,所以应该在 VALUE 前列出表中的列,这样即使表的列顺序变动了,也能正确插入

在以下情况我们可以省略一些列:

  • 该列定义为允许NULL值(无值或空值)。
  • 在表定义中给出默认值。这表示如果不给出值,将使用默认值。

通常数据检索是最重要的,我们可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级,如 INSERT LOW_PRIORITY INTO

插入多个行

MariaDB [test]> insert into linux 
value('user9','999','boy','24','27','46',2),
('user10','000','boy','30','28','39',1);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> select * from linux;
+--------+--------+------+------+-------+------------+-------+
| user   | passwd | sex  | age  | price | math_price | class |
+--------+--------+------+------+-------+------------+-------+
| user2  | 222    | girl | 23   | 155   | 36         |     1 |
| user3  | 333    | boy  | 12   | 78    | 66         |     1 |
| user4  | 444    | boy  | 22   | NULL  | NULL       |     2 |
| user5  | 555    | boy  | 30   | NULL  | 43         |     2 |
| user1  | 111    | boy  | 18   | 35    | 88         |     1 |
| user6  | 666    | girl | 16   | 35    | 43         |     2 |
| user7  | 777    | boy  | NULL | NULL  | NULL       |  NULL |
| user8  | 888    | girl | 19   | NULL  | NULL       |     2 |
| user9  | 999    | boy  | 24   | 27    | 46         |     2 |
| user10 | 000    | boy  | 30   | 28    | 39         |     1 |
+--------+--------+------+------+-------+------------+-------+
10 rows in set (0.00 sec)

插入检索出的数据

MariaDB [test]> select * from linux;
+--------+--------+------+------+-------+------------+-------+
| user   | passwd | sex  | age  | price | math_price | class |
+--------+--------+------+------+-------+------------+-------+
| user2  | 222    | girl | 23   | 155   | 36         |     1 |
| user3  | 333    | boy  | 12   | 78    | 66         |     1 |
| user4  | 444    | boy  | 22   | NULL  | NULL       |     2 |
| user5  | 555    | boy  | 30   | NULL  | 43         |     2 |
| user1  | 111    | boy  | 18   | 35    | 88         |     1 |
| user6  | 666    | girl | 16   | 35    | 43         |     2 |
| user7  | 777    | boy  | NULL | NULL  | NULL       |  NULL |
| user8  | 888    | girl | 19   | NULL  | NULL       |     2 |
| user9  | 999    | boy  | 24   | 27    | 46         |     2 |
| user10 | 000    | boy  | 30   | 28    | 39         |     1 |
+--------+--------+------+------+-------+------------+-------+
10 rows in set (0.00 sec)

MariaDB [test]> select * from hour;
+--------+--------+------+------+------+----------+-------+
| user   | passwd | sex  | age  | num  | math_num | class |
+--------+--------+------+------+------+----------+-------+
| user11 | NULL   | NULL | NULL | NULL | NULL     |  NULL |
+--------+--------+------+------+------+----------+-------+
1 row in set (0.00 sec)

MariaDB [test]> insert into linux(user,passwd,sex,age,price,math_price,class)
    -> select user,passwd,sex,age,num,math_num,class
    -> from hour;
Query OK, 1 row affected, 2 warnings (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 2

MariaDB [test]> select * from linux;
+--------+--------+------+------+-------+------------+-------+
| user   | passwd | sex  | age  | price | math_price | class |
+--------+--------+------+------+-------+------------+-------+
| user2  | 222    | girl | 23   | 155   | 36         |     1 |
| user3  | 333    | boy  | 12   | 78    | 66         |     1 |
| user4  | 444    | boy  | 22   | NULL  | NULL       |     2 |
| user5  | 555    | boy  | 30   | NULL  | 43         |     2 |
| user1  | 111    | boy  | 18   | 35    | 88         |     1 |
| user6  | 666    | girl | 16   | 35    | 43         |     2 |
| user7  | 777    | boy  | NULL | NULL  | NULL       |  NULL |
| user8  | 888    | girl | 19   | NULL  | NULL       |     2 |
| user9  | 999    | boy  | 24   | 27    | 46         |     2 |
| user10 | 000    | boy  | 30   | 28    | 39         |     1 |
| user11 |        |      | NULL | NULL  | NULL       |  NULL |
+--------+--------+------+------+-------+------------+-------+
11 rows in set (0.00 sec)

用INSERT SELECT从hour中将所有数据导入 linux表,他们的列名不一定是需要匹配的,知识将第一列的值放入要 insert 的表的第一列。

还可以加 where 子句:

MariaDB [test]> insert into linux(user,passwd,sex,age,price,math_price,class) select user,passwd,sex,age,num,math_num,class from hour where passwd is not null;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

MariaDB [test]> select * from linux;
+--------+--------+------+------+-------+------------+-------+
| user   | passwd | sex  | age  | price | math_price | class |
+--------+--------+------+------+-------+------------+-------+
| user2  | 222    | girl | 23   | 155   | 36         |     1 |
| user3  | 333    | boy  | 12   | 78    | 66         |     1 |
| user4  | 444    | boy  | 22   | NULL  | NULL       |     2 |
| user5  | 555    | boy  | 30   | NULL  | 43         |     2 |
| user1  | 111    | boy  | 18   | 35    | 88         |     1 |
| user6  | 666    | girl | 16   | 35    | 43         |     2 |
| user7  | 777    | boy  | NULL | NULL  | NULL       |  NULL |
| user8  | 888    | girl | 19   | NULL  | NULL       |     2 |
| user9  | 999    | boy  | 24   | 27    | 46         |     2 |
| user10 | 000    | boy  | 30   | 28    | 39         |     1 |
| user11 |        |      | NULL | NULL  | NULL       |  NULL |
| user12 | 222    | boy  | 27   | NULL  | NULL       |  NULL |
+--------+--------+------+------+-------+------------+-------+
12 rows in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值