一旦创建了数据库和表,下一步就是向表里插入数据。通过INSERT或 REPLACE 语句可以向表中插入一行或多行数据。
语法格式如下:
语法说明如下:
列名:
需要插入数据的列名。如果要给全部列插入数据,列名可以省略。如果只给表的部分列插入数据,需要指定这些列。对于没有指出的列,它们的值根据列默认值或有关属性来确定,MySQL处理的原则如下。
1.具有AUTO_INCREMENT属性的列,系统生成序号值来唯一标识列
2.具有默认值的列,其值为默认值。
3.没有默认值的列,若允许为空值,则其值为空值;若不允许为空值,则出错。
4.类型为timestamp的列,系统自动赋值。
VALUES 子句:
包含各列需要插入的数据清单,数据的顺序要与列的顺序相对应。若表名后不给出列名,则在VALUES子句中给出每一列的值;如果列值为空,则值必须置为NULL,否则会出错。
表达式:可以是一个常量、变量或一个表达式,也可以是空值NULL,其值的数据类型要与列的数据类型一致。例如,列的数据类型为int,插入的数据是“aaa”时就会出错。当数据为字符型和日期型时要用单引号括起来。
DEFAULT:指定为该列的默认值,前提是该列原先已经指定了默认值。如果列清单和VALUES清单都为空,则INSERT会创建一行,每个列都设置
成默认值。
IGNORE:当插入一条违背唯一约束的记录时,MySQL不会尝试去执行该语句。
例1:向Bookstore数据库中的表book(表中列包括图书编号、图书类别、书名、作者、出版社、出版时间、单价、数量、折扣及封面图片)中插入一行数据“TP.9501,计算机,Dreamwearer,鲍里嘉,高等教育出版社,2020-08-16,33.25,50,0.8,NULL”。
代码中没有给出要插入的列的字段名列表,是因为如果在VALUES中给出了全部列的插入数据,则可以省略字段名列表。
例2:若表 book 中“图书类别”列的默认值为“计算机”,“封面图片”列的默认值为NULL,插入例1那行数据。
对于字段名列表中没有给出的字段,系统将用默认值代替,本例字段名列表中没有给出“图书类别”“封面图片”字段,“图书类别别”字段取默认值“计算机”,和要插入的数据项相同;“封面图片”定义是允许为空,所以字段名列表中没有出现,系统就以NULL 值代替。如果某个字段既没有在字段名列表中列出,又没有在表结构定义中给出默认值,也不能为空,则插入操作将出错,记录不能被插入。
上述命令执行结果与例1的结果相同, 还可以使用SET 子句来实现。
但是,如果例1正确执行,记录已经插入了, 再执行例2的SQL代码,系统将提
示 1062错误,这是因为两条记录的图书编号相同, 而图书编号是book表的主键,要求唯
一。当插入第二条相同编号的记录时,系统将提示错误,意为表中已有图书编号为“TP.9501’的记录,第二条记录不能插入。
使用REPLACE语句,可以用第二条记录替换第第一条记录。
REPLACE 语句用 VALUES 子句的值替换已经存在的记录。如果在例4-2代码的 INSERT 语句中使用IGNORE关键字,则 MySQL 不会尝试去执行该语句,原有记录保持不变,但INSERT 语句也不会提示出错。
另外,MySQL还支持图片的存储,存储图片的字段类型为blob,是一个二进制的对象,可以容纳可变数量的数据。blob类型有4种,分别是tinyblob、blob、mediumblob和longblob,它们只是可容纳值的最大长度不同。但是将图片直接存储在数据库中,会造成数据库文件很大,影响数据的检索速度,且读取程序烦琐,一般应尽量避免。插入图片可以通过直接存储图片的路径来实现,例4-3采用存储图片的路径的方法插入图片。
例3:向book表中插入一行数据“TP.2467,计算机,计算机基础,林华忠,高等教育出版社,2020-10-16,45.5,45,0.8,ic.jpg”。
其中,封面图片的存储路径为“D:\pic\ic.jpg”。
在一个单独的INSERT语句中可使用多个VALUES子句一次插入多条记录。
例4:向members表中插入两行数据“C0138,李华,女,123456,13822551234,2020-8-23”“C0139,张明,男,123456,13822555432,2020-9-23”。
从上面的SQL代码可以看出,当一次插人多条记录时,每条记录的数据要用括号
来,记录与记录之间用逗号分开。