MySQL之插入、修改、删除表数据

插入表数据:        

        一旦创建了数据库和表,下一步就是向表里插入数据。通过INSERT或REPLACE语句可以向表中插入一行或多行数据。

语法格式:

INSERT[IGNORE][INTO] 表名[(列名,...)]
VALUES({表达式|DEFAULT},...),(...),...|SET 列名={表达式|DEFAULT},...

 例:向Bookstore数据库中的表Book插入如下一行数据:

‘MySQL基础’,‘2010-08-16’,33.25,NULL

USE Bookstore;
INSERT INTO Book VALUES('MySQL基础','2010-08-16',33.25,NULL);

 另一种方式:使用SET语句

INSERT INTO Book
SET 图书名='MySQL基础',出版时间='2010-08-16',单价='33.25';

如果想替换,可以使用REPLACE语句 

REPLACE INTO Book
VALUES('MySQL基础','2011-08-08','30',NULL);

        REPLACE语句用VALUES()的值替换已经存在的记录。若在INSERT语句中使用IGNORE关键字,MySQL不会尝试去执行该语句,原有记录保持不变,但INSERT语句也不会提示出错。

        另外,MySQL还支持图片的存储,存储图片的字段类型为blob,是一个二进制大对象,可以容纳可变数量的数据。有多种blob类型,分别为tinyblob和blob、mediumblob和longblob,它们只是可容纳值的最大长度不同。

        图片一般可以以路径的形式来存储,即插入图片可以采用直接插入图片的存储路径,也可以直接插入图片本身,其用LOAD_FILE(file_name)函数读取文件。用LOAD_FILE(file_name)函数来读取文件时,图片文件的位置必须在服务器上,file_name必须指定路径全名,而且还必须拥有FILE特许权,文件必须可读取,文件容量必须小于max_allowed_packet字节。若文件不存在,或因不满足上述条件而不能被读取,则函数返回值为NULL。将图片直接存储在数据库中,会造成数据库文件很大,影响数据的检索速度,且读取程序繁琐,应尽量避免。

 例:向book表中插入图片,图片存储路径为:D:\TUP\ping.jpg

方法一:以路径的形式来存储

INSERT INTO book VALUES('D:/TUP/ping.jpg');

 方法二:使用LOAD_FILE()函数直接存储图片

INSERT INTO book VALUES(LOAD_FILE('D:/TUP/ping.jpg'));

 在1一个单独的INSERT语句中使用多个VALUES()子句一次插入多条记录。

例:向book表插入两行数据:

MySQL基础,2022-01-01,29.9

MySQL高级,2022-06-06,59.9

INSERT INTO book VALUES
('MySQL基础','2022-01-01','29.9'),
('MySQL高级','2022-06-06','59.9');

 从以上的SQL代码可以看出,当一次插入多条记录时,每条记录的数据要用()括起来,记录与记录之间用逗号分开。

修改表数据:        

         要修改表中的数据,可以使用UPDATE语句。UPDATE可以用来修改单个表,也可以修改多个表。

单表修改语法格式:

UPDATE[IGNORE]表名
SET 列名1=表达式1,列名2=表达式2
WHERE 条件;

 例:将Bookstore数据库中Book表的所有书籍数量都增加10。将Members表中姓名为“张三”的员工的联系电话改为123456789,密码改成123

UPDATE Book
SET 数量=数量+10;
UPDATE Members
SET 联系电话='123456789',密码='123'
WHERE 姓名='张三';

         执行SELECT *FROM Book;语句可以发现表中所有书籍数量已经都增加了10。因为UPDATE语句中没有WHERE子句,则更新所有行的数据。

        多表修改语法格式:

UPDATE 表名列表
SET 列名1=表达式1,列名2=表达式2
WHERE 条件;

 例:当t1中的id值和t2中id值相同时,将表t1中对应的pwd值修改为AAA,将表t2中对应的pwd修改为BBB。

UPDATE t1,t2
SET t1.pwd='AAA',t2.pwd='BBB'
WHERE t1.id=t2.id;

 当用UPDATE修改多个表时,要修改的表名之间用逗号分开,字段名因涉及多个表,用“表名.字段名”表示,就像上文的t1.pwd和t2.pwd,多表连接条件需要在WHERE子句中指定。

 删除表数据:

1、使用DELETE语句删除数据

单表删除语句格式:

DELETE FROM 表名
WHERE 条件;

 例:将Bookstore数据库的Members表中姓名为“张三”的员工的记录删除

USE Bookstore;
DELETE FROM Members
WHERE 姓名='张三';

 多表删除语法格式:

DELETE 表名1[.*],[表名2[.*]...]
FROM 表名列表
[WHERE 条件];

#或者
DELETE FROM 表名1[.*],[表名2[.*]...]
USING 表名列表
[WHERE 条件];

以上两种语法只是写法不同,作用都是可以同时删除多个表中的行,并且在删除时可以使用其他的表来搜索要删除的记录。对于第一种语法,只删除列于FROM子句之前的表中对应的行。对于第二种语法,只删除列于FROM子句之中(在USING子句之前)的表中对应的行。

 例:假设有3个表t1、t2、t3,它们都含有id列。删除t1中id值等于t2的id值的所有行和t2中id值等于t3的id值的所有行。

DELETE t1,t2
FROM t1,t2,t3
WHERE t1.id=t2.id AND t2.id=t3.id;

#或者
DELETE FROM t1,t2
USING t1,t2,t3
WHERE t1.id=t2.id AND t2.id=t3.id;

以上两组SQL代码只是写法不同,作用都是可以同时删除t1和t2表中的行,t3表中的记录没有删除,但t3.id被用来搜索t2表中要删除的记录(t2表中id与t3.id相同的记录才被删除)。

 2、使用TRUNCATE TABLE语句删除表数据

        DELETE语句删除记录时,每次删除一行,并在事务日志中为所删除的每行进行记录,若要删除表中所有记录,且表中记录很多时,则删除命令执行较慢。在删除表中所有数据时,使用TRUNCATE TABLE语句更加快捷。因此TRUNCATE TABLE语句也被称为清除表数据语句。

语法格式:

TRUNCATE TABLE 表名;

         TRUNCATE TABLE 在功能上与不带WHERE子句的DELETE语句相同。如TRUNCATE TABLE BOOK;与DELETE FROM BOOK;同样,二者均删除BOOK表中的全部行。但TRUNCATE TABLE比DELETE速度快,且使用的系统和事务日志资源少。这是因为DELETE语句每次删除一行,都在事务日志中为所删除的每行记录一项,而TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

        由于TRUNCATE TABLE语句将删除表中的所有数据,且无法恢复,因此在使用时必须十分小心!

猜你喜欢

转载自blog.csdn.net/qq_62731133/article/details/125861630