-- 查看当前所有数据表 show tables; -- 查看表结构 desc 名字 -- 删除表 drop table 名字 -- 查看表的创建语句 show create table 名字 -- 创建表 create table 表名(字段名字 数据结构 约束,字段名字 数据结构); create table people( id int unsigned primary key not null auto_increment, age int unsigned, height decimal(5,2) default 1.70 gender enum("男","女","保密") default "保密" name varchar(30) ); -- 这个表id是主键,且不能空,且自动增长;age是无符号类型;height是2位小数的5位(包括小数位)数;gender只能有三种值,默认为保密
-- 增删查改字段 alter table 名字 操作 字段名字 数据结构 约束 -- 添加 alter table people add birthday datetime -- 修改-不重命名 alter table people modify birthday date -- 修改-重命名 alter table people change birthday birth date -- 删除 alter table people drop height
-- 增加 -- 完全插入:参数必须对应字段 insert into 表名字 values(字段参数) -- 若有些字段不想写,且可以不用写,可用null或者default占位 insert into people(default,13,1.80,"男","Tom") -- 部分插入 insert into 表名字 (字段名) values (加入的数据) insert into people (age, name) values (13,"Jack") -- 多行插入 insert into 表名字 values (字段参数1),(字段参数2) insert into 表名字 (字段名) values (加入的数据1),(加入的数据2)
-- 修改 -- 修改所有记录该字段的值 update 表名字 set 字段1=新值1,字段2=新值2 -- 修改一定某个记录中字段的值 where update 表名字 set 字段=新值 where 字段与值关系(可用大于小于号) update people set age = 18 where id=1
-- 删除 -- 清空表!别用! delete from 表名字 -- 删除某个记录 delete from 表名字 where -- 逻辑删除,新增一个is_delete操作,标记这行可不可用 alter table 表名字 add is_delete bit default 0 update 表名字 set is_delete where ...
-- 查询(基本) -- 查询表所有记录 select * from 表名字 -- 查询某个记录 select * from 表名字 where 字段与值关系 -- 查询某个字段 select 字段名字 from 表名字 -- 指定别名,指定别名后不能用本名了 select 字段名字 as 别名 from 表名字 as 别名 select 表名.字段名 from 表名 -- 指定列的顺序 select 第一个字段,第二个字段 from 表名字 -- 去重 select distinct 字段 from 表名
-- 条件查询 -- 使用where关键字 > < >= <= -- 和别的语言一样 = -- 单等于表示判断 <> != -- 不等于 and or not -- 与或非,同Python () -- 括号,优先级很高
-- 模糊查询 -- 使用like关键字 -- % 替换0个或多个 | _ 替换一个 | [charlist] 字符列中任意单一字符 | []不在字符列中的任何单一字符 select name from people where name like "T%" -- 名字以T开头 -- 使用rlike关键字 -- 正则表达式 select name from people where name rlike "正则表达式"
-- 范围查询 -- (非连续)使用in和not in关键字 select name from people where age in (12,18,6) -- {12,18,6} -- (连续)使用between...and...关键字和not between...and...关键字 左闭右闭区间 select name from people where age between 6 and 18 -- [6,18]
-- 空判断 -- 使用is null关键字和is not null关键字 select name from people where age is null
排序
1 2 3 4 5 6 7
-- order by 字段 -- asc 升序(从小到大) desc 降序 select name from people order by age select name from people order by age asc -- order by 多个字段 -- 在第一个字段相同情况下,再按第二个字段排... select name from people order by age asc, id desc
聚合函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- 聚合函数只能输出一个结果 -- count 总数 -- 就是计算输出的东西一共多少行,结果表头是count(*),可用as select count(*) from people select count(*) as "人数" from people -- max 最大值 min 最小值 select max(age) from people select min(height) from people -- sum 求和 select sum(age) from people -- avg 平均 select avg(age) from people select sum(age) / count(*) from people -- select后可以用运算和多个函数 -- round(x,保留小数位数) 四舍五入 select rount(avg(age),1) from people -- 保留平均数的一位小数
-- group by -- xxx是能唯一标记分组后各组之间不同的字段 -- xxx不能填* select gender from people group by gender -- 1*
-- 与聚合函数一起用,查找不同性别各自的人数 select gender,count(*) from people group by gender
-- group_concat(字段1,字段2) 写什么有什么,链接所有参数 -- 查询group中某字段的总和 select gender,group_concat(name) from people group by gender -- 2* select gender,group_concat(name,age) from people group by gender select gender,group_concat(name,"_",age) from people group by gender -- 3*
-- 与where一起用,先判断,然后从中分组 select gender,group_concat(name) from people where age<18 group by gender
-- having 显示符合条件的分组,与where不同的是写在group后面 -- 所以where是对表进行判断,having是对分组结果进行判断 select gender,group_concat(name) from people group by gender having min(age)<5 -- 4*
1* 的结果
gender
count(*)
男
5
女
3
2* 的结果
gender
group_concat(name)
男
Mike, Leo, Tom
女
Lucy, Mary
3* 的结果
gender
group_concat(name,“_”,age)
男
Mike_12, Leo_18, Tom_6
女
Lucy_12, Mary_3
4* 的结果
gender
group_concat(name)
女
Lucy, Mary
分页
1 2 3 4 5 6 7 8 9 10 11
-- 使用limit限制 -- limit 数字m 查询前m个 select * from people limit 5 -- limit 数字n,数字m 查询从n开始,查询共m个 -- n从0开始 select * from peolpe limit 2,6 -- [3,9] select * from peolpe limit 0,5 -- [1,5] select * from peolpe limit 5,5 -- [6,10] select * from peolpe limit 10,5 -- [11,15] -- limit放最后 select * from peolpe order by age limit 0,5 -- 按age排序的[1,5]
# 执行sql语句 返回生效行数 cursor.execute("""insert into people(name, age) values("Ash", 31);""") # 增 cursor.execute("""delete from people where id=6 ;""") # 删 cursor.execute("""update people set age=18 where name="Tom";""") # 改
name = input("请输入你要查询的人的名字:") cursor.execute("""select * from people where name = "{}" """.format(name)) # 输入 Tom # 结果 (1,18,1.80,"男","Tom") # 输入 "or 1=1 or "1 # execute内容: select * from people where name = ""or 1=1 or "1" # 结果输出所有人的名字 # SQL注入!!!!!
# 防止方法 # 构建参数列表 params = [name] sql = "select * from people where name=%s, id=%d, age=%d " cursor.execute(sql,params) # 自动填充