Msql数据管理2
insert 插入单条数据:
语法:
方式1: 注意列名和值的顺序要一 一对应
INSERT INTO ‹表名› (‹列名1› ,‹列名2›, … ‹列名n›) VALUES (值1,值2,… , 值n);
方式二: 要插入的数据的列名在 SET 子句中指定,等号前面 为指定的列名,等号后面为指定的数据,而对于未指定的列,列值会指定为该列的默认值。
INSERT INTO ‹表名› SET ‹列名1› = ‹值1›, ‹列名2› = ‹值2›, ...;
方式三:
INSERT 语句中没有指定插入列名,只有一个值列表。在这种情况下,值列表为每一个字段列指定插入的值,并且这些值的顺序必须和 表中字段定义的顺序相同。
INSERT INTO ‹表名› values (值1,值2,....)
插入多条数据
语法:
只需要在增加多个值列表即可,值列表之间用,分隔开
INSERT INTO ‹表名› (‹列名1› ,‹列名2›, … ‹列名n›) VALUES (值1,值2,… , 值n), (值1,值2,… , 值n), ... (值1,值2,… , 值n);
实战
插入一条数据到学生表
-
插入一条学生数据(‘赵雷’ , ‘1990-01-01’ , ‘男’)
insert into student ( sname, birthday, sex) values ('赵雷' , '1990-01-01' , '男');
-
插入一条学生数据 (2 , ‘钱电’ , ‘1990-12-21’ , ‘男’),这次包含id
insert into student values (2 , '钱电' , '1990-12-21' , '男');
-
插入一条学生数据: ‘孙风’ , ‘1990-12-20’ , ‘男’
insert into student set sname='孙风',birthday='1990-12-21',sex='男';
插入多条数据
批量插入如下数据
('04' , '李云' , '1990-12-06' , '男')
('05' , '周梅' , '1991-12-01' , '女')
('06' , '吴兰' , '1992-01-01' , '女')
('07' , '郑竹' , '1989-01-01' , '女')
('09' , '张三' , '2017-12-20' , '女')
('10' , '李四' , '2017-12-25' , '女')
('11' , '李四' , '2012-06-06' , '女')
('12' , '赵六' , '2013-06-13' , '女')
('13' , '孙七' , '2014-06-01' , '女')
sql语句:
insert into student values ('04' , '李云' , '1990-12-06' , '男'), ('05' , '周梅' , '1991-12-01' , '女'), ('06' , '吴兰' , '1992-01-01' , '女'), ('07' , '郑竹' , '1989-01-01' , '女'), ('09' , '张三' , '2017-12-20' , '女'), ('10' , '李四' , '2017-12-25' , '女'), ('11' , '李四' , '2012-06-06' , '女'), ('12' , '赵六' , '2013-06-13' , '女'), ('13' , '孙七' , '2014-06-01' , '女');
select 查询数据
查询学生表中名字为钱电的所有信息
select * from student where sname='钱电';
查询学生表中生日 小于 ‘1991-12-01’ 的学生信息
select * from student where birthday‹'1991-12-01';
查询学生表中 生日小于’2013-06-13’的女生 和 所有男生 的学生信息
解析:
生日大于’2013-06-13’的女生 : birthday ‹ 2013-06-13 and sex = ‘女’
所有男生 : sex = ‘男’
select * from student where (birthday ‹ '2013-06-13' and sex = '女') or sex='男';
LIKE 关键字主要用于搜索匹配字段中的指定内容。其语法格式如下:
[NOT] LIKE '字符串'
其中:
-
NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。
-
字符串:指定用来匹配的字符串。“字符串”可以是一个很完整的字符串,也可以包含通配符。
LIKE 关键字支持百分号“%”和下划线“_”通配符。
通配符是一种特殊语句,主要用来模糊查询。当不知道真正字符或者懒得输入完整名称时,可以使用通配符来代替一个或多个真正的字符。
% 通配符
% 代表任何长度的字符串,包括长度0;
例如:
以 王 开头的字符 : 王%
包含 王 的字符 : %王%
以 王 结尾的字符: %王
_ 通配符
“_”只能代表单个字符
例如:
第二个字符为王 : _王%
倒数第二个字符为王 : %王_
第三个字符为王 : __王%
LIKE BINARY
BINARY 关键字用于区分大小写,默认like 不区分大小写
例如:
like ‘t%’ 可以查询 T 和 t 开头的字符
LIKE BINARY ‘t%’ 只可以查询 t 开头的字符
LIKE BINARY ‘T%’ 只可以查询 T 开头的字符
实战:
查找学生表中姓 赵 的学生
select * from student where sname like '赵%';
查找学生表中 不姓赵 的学生
select * from student where sname not like '赵%';
查找学生表中姓名包含兰的学生
select * from student where sname like '%兰%';
插入几个外国学生,查询大写J开头的学生信息
insert into student ( sname, birthday, sex) values ('Jim Green' , '1990-01-01' , '男'), ('Dave Brice' , '1990-01-01' , '男'), ('Ann King' , '1990-01-01' , '男'), ('Rose Rice' , '1990-01-01' , '男'), ('jack Washton' , '1990-01-01' , '男');
查找学生表中姓名第三字为七的学生
select * from student where sname like '__七%';
查找学生表中姓孙的男生
select * from student where sname like '孙%' and sex = '男';
update
修改表中的数据
语法:
UPDATE ‹表名› SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]
不加 where 子句也可以,那样会修改整张表的数据,在工作中一定要加where子句,减少对其他同事的测试数据造成影响。
实战
修改赵雷的生日为1990-01-02
update student set birthday = '1990-01-02' where sname='赵雷';
修改sid=14的学生姓名为David,生日为 1997-02-02
update student set sname='David',birthday = '1997-02-02' where sid=14;
修改孙九九的性别为女
update student set sex = '女' where sname = '孙九九';
DELETE (删除表中数据)
语法:
DELETE FROM ‹表名› [WHERE 子句]
WHERE 子句:可选项。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行。
实战
删除 姓名为D开头的学生
delete from student where sname like 'D%';
删除 姓孙的 男生
delete from student where sname like '孙%' and sex = '男';
TRUNCATE (清空表数据)
语法:
TRUNCATE 表名
TRUNCATE 用于完全清空一个表
与DELETE 的区别
DELETE 是逐行一条一条删除记录的;TRUNCATE 则是直接删除原来的表,再重新创建一个一模一样的新表,而不是逐行删除表中的数据,执行数据比 DELETE 快。因此需要删除表中全部的数据行时,尽量使用 TRUNCATE 语句, 可以缩短执行时间。
DELETE 删除数据后,系统不会重新设置自增字段的计数器;TRUNCATE 清空表记录后,系统会重新设置自增字段的计数器。
总结
当不需要该表时,用 DROP;当仍要保留该表,但要删除所有记录时,用 TRUNCATE;当要删除部分记录时,用 DELETE。
实战
清除 teacher 表
truncate teacher;