假如student表的结构如下:
CREATE TABLE `student` ( `student_id` int NOT NULL, `student_name` varchar(50), `score` decimal(5,2) DEFAULT NULL, `teacher_id` int, PRIMARY KEY (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
向表中所有字段插入数据
语法如下:
insert into 表名 values(第1个字段的值,第2个字段的值,...);
示例:
insert into student values(1,'张三',82.5,4);
由于没有指定插入目标表的字段名和字段顺序,因为values后的值的个数、数据类型与顺序,必须与表结构中一致。
向表中指定字段插入数据
语法如下:
insert into 表名(字段1,字段2,...) values(第1个字段的值,第2个字段的值,...);
示例:
insert into student(student_id,student_name) values(1,'张三');
对于未指定值的字段,将会使用默认值赋值。如果没有设置默认值,则使用NULL值赋值。如果字段被设置为不允许NULL,此时会报错。
被设置为auto_increment的字段,不需要指定值,会使用自增序号自动赋值。
一次插入多条数据
语法如下:
insert into 表名(字段1,字段2,...) values(第1个字段的值,第2个字段的值,...),(第1个字段的值,第2个字段的值,...),(第1个字段的值,第2个字段的值,...)...;
示例:
insert into student(student_id,student_name) values(1,'张三'),(2,'李四'),(3,'王五');
对于数据库来说,一次插入的数据条数并不是可以无限大的。这受数据库允许的最大的包大小限制。
使用show variables like ‘max_allowed_packet’命令可以查看数据库允许的最大的包大小。
mysql> show variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 4194304 | +--------------------+---------+ 1 row in set, 1 warning (0.01 sec)
上面的查询结果表示,一条SQL允许的最大大小为4M。注意:这里的4M指的是SQL语句文本占用的存储空间大小,而不是允许的数据条数。允许的数据条数需要根据单条数据的大小来计算。比如,单条数据大小为1K,那么一条SQL允许的最大数据条数为4M/1K=4*1024K/1K=4096条。
复制另一个表的数据
语法如下:
insert into 目标表名(字段1,字段2,...) select 字段1,字段2,... from 源表名;
示例:
insert into school.student(student_id,student_name) select student_id,student_name from school.studetn_bak;
根据查询结果插入数据
语法如下:
insert into 目标表名(字段1,字段2,...) select 查询语句;
示例:
insert into school.student(student_id,student_name) select student_id,student_name from school.studetn_bak where age > 10;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。