MySQL——DML(数据操作语言)
数据库——DML(数据操作语言)DML语言:数据操作语言insert添加update修改delete删除insert添加-- 插入语句(添加)-- insert into 表名([字段名1,字段名2,字段名3])values('值1'),('值2'), ('值3')-- 写插入语句,数据与字段要一一对应INSERT INTO `grade`(`gradename`) VALUES ('大三')--
·
数据库——DML(数据操作语言)
DML语言:数据操作语言
- insert 添加
- update 修改
- delete 删除
1、添加数据
SQL提供了INSERT
语句,用于将一行或多行插入表中。 INSERT
语句用于:
- 向表中插入一行
- 向表中插入多行
- 将行从一个表复制到另一个表中。
向表中插入一行
-- insert into 表名([字段名1,字段名2,字段名3])values('值1'),('值2'), ('值3')
-- 方式一:没有指明要添加的字段,要按照声明字段的先后顺序添加
insert into emp1 values(1,'wanli','2022-12-12',4000)
-- 由于主键自增我们可以省略
insert into emp1 values('wanli','2022-12-12',4000)
-- 方式二:指明要添加的字段,没有指明的字段值为null
INSERT INTO `grade`(`gradeid`,`gradename`) VALUES('11114','大七')
INSERT INTO `student`(`name`,`pwd`,`sex`,`birthday`,`address`,`gradeid`,`email`)VALUES('狗子','aaaaa','男','2020-3-02','赣州','111','email')
在表中插入新行时,应注意以下几点:
- 首先,值的数量必须与列数相同。 此外,列和值必须是对应的,因为数据库系统将通过它们在列表中的相对位置来匹配它们。
- 其次,在添加新行之前,数据库系统检查所有完整性约束,例如,外键约束,主键约束,检查约束和非空约束。如果违反了其中一个约束,数据库系统将发出错误并终止语句,而不向表中插入任何新行。
向表中插入多行
INSERT INTO dependents (first_name, last_name, relationship, employee_id)
VALUES
('Avg','Lee', 'Child', 192 ),
('Michelle','Lee', 'Child', 193);
将查询结果插入表中
将dependents
表中的所有行复制到dependents_archive
表中:
INSERT INTO dependents_archive
SELECT *FROM dependents;
查询字段和添加字段要一一对应。
2、修改数据
更改表中的现有数据,请使用UPDATE
语句。 以下是UPDATE
语句的语法:
UPDATE table_name
SET column1 = value1,
column2 = value2
WHERE
condition;
在上面的语法中 -
- 首先,在
UPDATE
子句中指明要更新的表。 - 其次,在
SET
子句中指定要修改的列。SET
子句中未列出的列的值不会被修改。 - 第三,指定
WHERE
子句中要更新的行。
UPDATE
语句根据WHERE
子句中的条件影响表中的一行或多行。 例如,如果WHERE
子句包含主键表达式,则UPDATE
语句仅更改一行。
但是,将修改WHERE
条件评估为true
的任何行。 因为WHERE
子句是可选的,所以,如果省略它,表中的所有行都将受到影响。
更新一行示例
将192号员工的姓名改为 ‘Zhang’
-- 修改语句 表名 属性 条件
UPDATE employees SET last_name = 'Zhang'
WHERE employee_id = 192;
-- 如果不指定条件,会改变所有的列
UPDATE `student` SET `name`='夏洛特'
-- 修改多个属性,用逗号隔开
UPDATE `student` SET `pwd`='654321' ,`sex`='女' WHERE id=2;
更新多行示例
把所有工资低于2500的员工全部提高到3000
UPDATE employees
SET
salary=3000
WHERE
salary<3000;
带有子查询的更新
UPDATE dependents
SET last_name = (
SELECT
last_name
FROM
employees
WHERE
employee_id = dependents.employee_id
);
由于省略了WHERE
子句,因此UPDATE
语句更新了dependents
表中的所有行。
3、删除数据
要从表中删除一行或多行,请使用DELETE
语句。 DELETE
语句的一般语法如下:
DELETE FROM table_name
WHERE condition;
- 首先,提供要删除行的表名称(
table_name
)。 - 其次,在
WHERE
子句中指定条件以标识需要删除的行记录。 如果省略WHERE
子句,则将删除表中的所有行记录。 因此,应始终谨慎使用DELETE
语句。
一般来说,DELETE
语句不会将结果集。 但是,它只返回已删除的行数。
-- 用delete删除表
-- 删除指定命令 不加条件就会删除整个表
DELETE FROM `student` WHERE id=1;
-- 用TRUNCATE删除表 完全清空一个数据库表,表的结构和索引不会变
TRUNCATE `student`;
-- 用TRUNCATE不能删除指定条件的数据, truncate的工作机制就是直接清空表的内容,例如,在Oracle中实际上只是将高水位线设为0,并没有对实际的数据进行操作,所以这个操作就很快。既然如此,也就不可能实现你所说的有条件的删除了。
-- 测试DELETE和TRUNCATE的区别,用delete不会影响自增, 用TRUNCATE删除表重置主键
-- 用delete删除表
INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3') -- 此时表test的主键id自动增量为4
DELETE FROM `test`; -- 还是4,用delete不会影响自增
INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3')-- 再执行一次,由于自增没变,所以id是从4开始
-- 用TRUNCATE删除表
TRUNCATE `test`;-- 表test的主键id自动增量为1,重置了
-- 补充
-- 用delete删除表的拓展:用delete删除后再重启数据库,如果引擎不一样,那重启的现象也不一样
-- 如果引擎是InnoDB ,自增列会重1开始(因为数据是存储在内存中,断电即失)
-- 如果引擎是MYISAM,继续从上一个自增量开始(因为是存在文件中的,不会丢失)
更多推荐
所有评论(0)