学习B站狂神的数据库记下的一点笔记
insert—增
形式:
INSERT INTO `表名` (`字段名1`, `字段名2`, ... ,`字段名n`)
VALUES (`值11`, `值12`, ... ,`值1n`),(`值21`, `值22`, ... ,`值2n`),(`值m1`, `值m2`, ... ,`值mn`)
实例:
-- 插入语句(添加)
-- insert into 表名 ([字段名1, 字段名2, 字段名3, ...]) values('值1'),('值2'),('值3'), (...)
INSERT INTO `grade` (`gradename`) VALUES ('大四')
-- 由于主键自增我们可以省略主键(如果不写表的子弹, 他就会一一匹配)
INSERT INTO `grade` VALUES ('大三')
-- 错误: Column count doesn't match value count at row 1
-- 一般写插入语句, 我们一定要数据和字段一一对应
-- 插入多个字段
INSERT INTO `grade` (`gradename`) VALUES ('大二'),('大一')
INSERT INTO `student` (`name`) VALUES ('张三')
INSERT INTO `student` (`name`,`pwd`,`gender`)
VALUES ('罗小黑','aaaaaa','男')
INSERT INTO `student` (`name`, `pwd`, `gender`)
VALUES ('李四','bbbbbb','女'),('王`,'888888','男'),('孙五','777777','男')
注意事项:
- 字段和字段之间使用英文逗号隔开
- 字段是可以省略的, 但是后面的值必须要一一对应!也就是说, 前面字段省略的话, 后面的值要写全了(自增的字段可以不用去管)
- 可以同时插入多条数据, VALUES后面的值需要使用,隔开VALUES(),()
update—改
-- 修改学生名字, 带了简介
UPDATE `student` SET `name`='丁午' WHERE id = 1;
-- 不指定条件的情况下, 会改动所有表, 如果是这样, 跑路去吧
UPDATE `student` SET `name`='苍老师'
-- 不要这样改
-- 语法:
-- update `表名` set column_name = '值' where [条件]
-- 修改多个属性, 逗号隔开
UPDATE `student` SET `name`='马邦德', `email`='1234567@qq.com' WHERE id = 1;
-- update `表名` set column_name1 = '值', column_name2 = '值' where [条件]
关于where子句运算符:
正好使用sql创建表格~
CREATE TABLE `after_where`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年纪id',
`操作符` VARCHAR(50) NOT NULL COMMENT '操作符',
`含义` VARCHAR(50) NOT NULL COMMENT '含义',
`范围` VARCHAR(50) NOT NULL COMMENT '范围',
`结果` VARCHAR(50) NOT NULL COMMENT '结果',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `after_where` (`操作符`,`含义`,`范围`,`结果`)
VALUES ('=','等于','5=6','false'),('<>或!=', '不等于','5<>6或5!=6','true')
INSERT INTO `after_where` (`操作符`,`含义`,`范围`,`结果`)
VALUES ('>','大于','5>6','false'),('<', '小于','5<6','true'),('>=','大于等于','5>=6','false'),('<=','小于等于','5<=6','true')
INSERT INTO `after_where` (`操作符`,`含义`,`范围`,`结果`)
VALUES ('BETWEEN...AND...','在某个范围内','[2,5]','null'),('AND','两个条件和','5>1AND1>2','false'),('OR','两个条件或','5>1OR1>2','true')
注意:
- column_name是数据库的列, 尽量带上``
- 条件是进行筛选的条件, 如果没有指定, 则会修改所有的列
- value, 是一个具体的值, 也可以是一个变量
- 多个设置的属性之间, 使用英文逗号隔开
delete—删
DELETE FROM 表名[where 条件]
delete和TRUNCATE的区别
- 相同点: 都能删除数据, 都不会删除表结构
- 不同:
TRUNCATE重新设置自增列, 计数器会归零
TRUNCATE不会影响事务(后面会学)
举个栗子
新建一张表
CREATE TABLE `test1`(
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `test1` (`coll`) VALUES ('1'),('2'), ('3')
执行delete之后:
DELETE FROM `test1`
-- 不会影响自增
右键改变表, 选择advanced标签,发现自动增量是4
这时我们再添加新的数据, 是从4开始计数的
如果使用TRUNCATE删除
TRUNCATE TABLE `test1`
表被删除
自动增量也被置1了
了解即可:delete删除的问题, 重启数据库存在一个现象
- innoDB, 重启的时候, 自增列会从1开始(因为数据库存在内存中, 断电即失)
- MyISAM: 重启的时候, 自增会从上一个自增量开始(存在文件中的, 不会丢失)
面试问你delete和truncate区别的时候, 可以把这个也带着提提