SQL语言学习笔记(4)DML(Data Manipulation Language):数据操作语言
前言
数据库通过插入、更新和删除等方式来改变表中的记录。
- 插入数据是向表中插入新的记录,通过insert语句来实现。
- 更新数据是改变表中已经存在的数据,使用update语句来实现。
- 删除数据是删除表中不再使用的数据,通过delete语句来实现。
1 插入数据
1.1 为表的所有字段插入数据
1.1.1 INSERT语句中不指定具体的字段名
在MySQL中,可以通过不指定字段名的方式为表插入记录。其基本语法形式如下:
INSERT INTO 表名 VALUES (值1,值2,...,值n);
其中,”表名“参数指定记录插入到哪个表中;“值n”参数表示要插入的数据。“值1”到“值n”分别对应着表中的每个字段。表中定义了几个字段,INSERT语句中就应该对应有几个值。插入的顺序与表中字段的顺序相同。而且,取值的数据类型要与表中对应字段的数据类型一致。
下面是给stu表格插入数据,stu表包含4个字段。那么INSERT 语句中的值也应该是4个。INSERT 语句如下:
INSERT INTO stu VALUES('s_1002', 'liSi', 32, 'female');
1.1.2 INSERT语句中列出所有字段
INSERT语句中可以列出表的所有字段,为这些字段来插入数据。其基本语法形式如下:
INSERT INTO 表名(属性1,属性2,...,属性n)
VALUES(值1,值2,...,值n);
其中,“属性n”参数表示表中的字段名称,此处必须列出表的所有字段的名称;“值n”参数表示每个字段的值,每个值与相应的字段对应。
下面向stu表中插入一条新记录。INSERT语句如下:
INSERT INTO stu(sid, sname,age,gender) VALUES('s_1001', 'zhangSan', 23, 'male');
1.2 为表的指定字段插入数据
基本语法形式如下:
INSERT INTO 表名(属性1,属性2,...,属性m)
VALUES(值1,值2,...,值m);
其中,“属性m”参数表示表中的字段名称,此处指定表的部分字段的名称;“值m”参数表示指定字段的值,每个值与相应的字段对应。
下面向stu表的sid和sname这2个字段插入数据。INSERT语句的代码如下:
INSERT INTO stu(sid, sname) VALUES('s_1001', 'zhangSan');
1.3 同时插入多条记录
同时插入多条记录,是指一个insert语句插入多条记录。当用户需要插入好几条记录,用户可以使用上面两个小节中的方法逐条插入记录。但是,每次都要写一个新的insert语句。这样比较麻烦。MySQL中,一个insert语句可以同时插入多条记录。其基本语法形式如下:
INSERT INTO 表名[(属性列表)]
VALUES(取值列表1),(取值列表2)
...
(取值列表n);
其中,“表名”参数指明向哪个表中插入数据:“属性列表”参数是可选参数,指定哪些字段插入数据,没有指定字段时向所有字段插入数据;“取值列表n”参数表示要插入的记录,每条记录之间用逗号隔开。
下面向Info表中插入3条新记录。INSERT语句的代码如下:
INSERT INTO Info (id,Cost,city)
VALUES (1,200, 'Pune'), (2, 150,'USA'), (3,345, 'France');
1.4 将查询结果插入到表中
INSERT语句可以将一个表中查询出来的数据插入到另一个表中。这样,可以方便不同表之间进行数据交换。其基本语法形式如下:
INSERT INTO 表名1 (属性列表1)
SELECT 属性列表2 FROM 表名2 WHERE 条件表达式;
下面将product表中所有数据查询出来,然后插入到medicine表中。语句如下:
INSERT INTO medicine
SELECT * FROM product;
2 更新数据
更新数据是更新表中已经存在的记录。通过这种方式可以改变表中已经存在的数据。其基本语法形式如下:
UPDATE 表名 SET 列名1=值1,…,列名n=值n [WHERE 条件];
举例:
UPDATE stu SET sname=’zhangSanSan’, age=’32’, gender=’female’ WHERE sid=’s_1001’;
UPDATE stu SET sname=’liSi’, age=’20’WHERE age>50 AND gender=’male’;
UPDATE stu SET sname=’wangWu’, age=’30’WHERE age>60 OR gender=’female’;
UPDATE stu SET gender=’female’WHERE gender IS NULL
UPDATE stu SET age=age+1 WHERE sname=’zhaoLiu’;
3 删除数据
删除数据是删除表中已经存在的记录。通过这种方式可以删除表中不再使用的记录。例如,学生表中某个学生退学了,这就需要从学生表中删除该同学的信息。
MySQL中,通过DELETE语句来删除数据。MySQL中,DELETE语句的基本语法形式如下:
DELETE FROM 表名 [WHERE 条件表达式];
语法2:
TRUNCATE TABLE 表名;
两者之间的区别: 虽然 TRUNCATE 和 DELETE 都可以删除表的所有记录,但有原理不同。DELETE的效率没有 TRUNCATE 高! TRUNCATE 其实属性 DDL 语句,因为它是先 DROP TABLE,再 CREATE TABLE。 而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。
下面删除product表中id值为1001的记录。语句如下:
DELETE FROM product WHERE id=1001;