数据库意义:数据存储,数据管理
DML语言:数据操作语言(insert、update、delete)
添加(insert)
语法:
insert into 表名(字段1,字段2,字段3,...) values('值1'),('值2'),('值3'),('...')
例:
①
--插入语句(添加)
INSERT INTO `grade`(`gradename`) VALUES ('大一')--由于主键自增我们可以省略(如果不写表的字段,他就会一一匹配)
INSERT INTO `grade` VALUES('大三')
②
CREATE TABLE IF NOT EXISTS `student2`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
插入语句:
--一个字段插入多个值
INSERT INTO `grade`(`gradename`) VALUES('大二'),('大一')
INSERT INTO `student`(`name`) VALUES('张三')--多个字段插入一个值
INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES ('张三','aaaaaa','男')--多个字段插入多个值
INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES ('李四','aaaaaa','男'),('王五','aaaaaa','男')--没有指定字段插入值
INSERT INTO `student` VALUES (5,'李四','aaaaaa','男','2000-01-01',1,'西安','email')
注意:
- 字段和值之间用英文逗号隔开
- 字段可以省略,但后面后面的值必须要一一对应,不能少
- 可以同时插入多条数据,VALUES后面的值,需要使用用英文逗号隔开即可
修改(update)
修改谁(条件) set原来的值=新值
语法:
UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];
例:
-- 修改学员名字
UPDATE `studenttest1` SET `name`='xiaoming' WHERE id = 1-- 不指定条件的情况下,会改动所有的表!
UPDATE `studenttest1` SET `name`='xiaohong'-- 修改多个属性,逗号隔开
UPDATE `studenttest1` SET `name`='小明',`email` = '123@qq.com' WHERE id =1;-- 通过多个条件定位数据 trim--可以删除多余逗号
UPDATE `student` SET `birthday` = CURRENT_TIME WHERE `name`='小红' AND sex='女'-- 语法:
-- UPDATE 表名 set colnum_name = value.[colnum_name = value,.....] where [条件]
where条件字句
可以简单的理解为:有条件地从表中筛选数据
运算符 | 含义 | 范围 | 结果 |
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5!=6 | true |
> | 大于 | 5>6 | false |
< | 小于 | 5<6 | true |
>= | 大于等于 | 5>=6 | false |
<= | 小于等于 | 5<=6 | true |
BETWEEN | 在某个范围之间 | BETWEEN 5 AND 6 | |
AND | 并且 | 5>1 AND 1>2 | false |
OR | 或 | 5>1 OR 1>2 | true |
例:
-- 通过多个条件定位数据
-- 修改学员名字,带了简介
UPDATE student SET `name`='小红' WHERE `name`='小明' WHERE id BETWEEN 2 AND 5
注意:
- column_name 为要更该地数据列,尽量带上 ` `
- value 为修改后的数据,可以为变量
- 条件如果没有指定,则会修改所有的列
- 多个设置的属性之间,使用英文逗号隔开
- trim可以删除多余的逗号
删除
DELETE命令
语法:
DELETE from 表名 [where 条件]
注意:如果不指定筛选条件,则会删除该表所有列数据
例:
-- 删除数据 (避免这样写,会全部删除)
DELETE FROM `student`-- 删除指定数据
DELETE FROM `student` WHERE id = 1;
TRUNCATE命令
作用:完全清空一个数据库表,表的结构、索引和约束不会变!
例:
-- 清空 student表
TRUNCATE `student`
DELETE 和 TRUNCATE 区别
- 相同点:
- 都能删除数据,都不会删除表的结构
- 不同点:
- TRUNCATE TABLE 重新设置自增列,计数器 AUTO_INCREMENT 会归零;且速度更快;不会影响事务
- DELETE 不会重新设置自增列,计数器会保留原来的值
测试 DELETE 和 TRUNCATE:
-- 创建一个测试表
CREATE TABLE `test` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8-- 插入几个测试数据
INSERT INTO test(coll) VALUES('row1'),('row2'),('row3');-- 删除表数据(不带where条件的delete)
DELETE FROM test;
-- 结论:如不指定Where则删除该表的所有列数据,自增当前值依然从原来基础上进行,会记录日志.-- 删除表数据(truncate)
TRUNCATE TABLE test;
-- 结论:truncate删除数据,自增当前值会恢复到初始值重新开始;不会记录日志.
扩展:
同样使用DELETE清空不同引擎的数据库表数据.重启数据库服务后
InnoDB:自增列从初始值重新开始 (因为是存储在内存中,断电即失)
MyISAM:自增列依然从上一个自增数据基础上开始 (存在文件中,不会丢失)