登陆数据库: mysql -u 用户名 -p || mysql -u 用户名 -p 密码
退出数据库:exti / quit / ctrl+d
提示操作数据库时一定要记得写 ;
数据库本版号:select version();
当前数据库时间 select now();
显示当前数据库: show databases;
创建数据库: create database 数据库名称 charset=utf8;
查看创建数据库语句: show create database 数据库名;
删除数据库:drop database 数据库名;
查看当前使用得数据库:select database();
切换数据库:use 数据库名;
数据库内表操作:
查看所有表:show tables;
创建表:create table 表名(字段 类型 约束,...);
例如: id int primary key not null auto_increment
字段:id
类型:int
设置为主键: primary key
不允许为空: not null
是否自动增长:auto_increment
查看表结构:desc 表名;
删除表:drop table 表名;
表结构操作:alter table add/modify/change/drop 表名 字段 类型 约束;
注意 :modify 修改时不该字段名,change修改时改名字,add 添加, drop,删除
数据操作:
插入数据:insert into 表名 values();
部分插入:insert into 表名 (插字列1,插入列2)values(数据1,数据2);
多行插入:insert into 表名 (插字列1,插入列2)values(数据1,数据2),(数据1,数据2);
insert into 表名 values(),(),();
修改数据:update 表名 set 列=值 where 列=值; # where 后为判断条件,不写默认全部修改
删除操作:物理删除:delete from 表名 where 条件;
逻辑删除:给表里增加一个是否删除的字段(bit 类型)根据值判断是否删除
查看表数据:
select * from 表名 where 条件; #where 后为条件判断,不写默认查询全部
select 列1 as 别名,列2 as 别名 from 表名 where; # 指定列查询;
select 表名.列名 ... from 表名; || select 别名.列名 ... from 表名 as 别名;|| select distinct 别名.列名 ... from 表名 as 别名;distinct #消除重复
比较运算符:select 列名 from 表名 where >, <, >=, <=, !=, <>, =
逻辑运算符:select 列名 from 表名 where and, or, not,
模糊查询:link, rlink
select 列名 from 表名 where 列名 link “例% ” || 列名 link “__ ” #%替换多个 _替换一个
select 列名 from 表名 where 列名 rlink “正则表达式” #正则匹配
范围查询:in(), between ... and ...
select 列名 from 表名 where 列名 in (1,2,3) # in 非连续
select 列名 from 表名 where 列名 not in (1,2,3) #不再 非连续
select 列名 from 表名 where 列名 between ... and ... # 连续的
select 列名 from 表名 where 列名 not between ... and ... # 不在 连续的
select 列名 from 表名 where not 列名 between ... and ... # 不在 连续的
判断空: is null
select 列名 from 表名 where 列名 is null;
select 列名 from 表名 where 列名 is not null;
排序:order by 字段 asc 从小到大 desc 从大到小 可以按照多个字段排
select 列名 from 表名 order by 字段 asc(默认) || desc ;
select 列名 from 表名 where ...条件 order by asc(默认) || desc ;
select 列名 from 表名 where ...条件 order by 字段 desc,字段 ase,字段 desc, .... ;
聚合函数:count 总是, max 最大值,min, 最小值 round 四舍五入 , sun 求和,avg 平均值
select count(*) as 别名 from 表名
select max (*) as 别名 from 表名
select min(*) as 别名 from 表名
select sun (*) as 别名 from 表名
select avg (*) as 别名 from 表名
select rount ( sum(列名) / count(*), 2 ) 别名 from 表名
分组:group by
select 列名 from 表名 group by 列名;
注意:聚合与分组混合使用:
select 列名,聚合函数 || group_concat(列名,"_", 列名 "_" , 列名,"_" ) from 表名 group by 列名 having count(*) > 3; # having 过滤
where 与 having 区别,where 对要查询的数据进行判断,having 对结果进行判断
分页:limit start, count
select 列名 from 表名 where limit = 起始条数,条数;
连接查询:
inner join 内链接 查询交集
select * from 表A inner join 表B on 表A.列名 = 表B.id;
select 表A.*, 表B.name from 表A inner join 表B on 表A.列名 = 表B.id;
select 别名A.*, 别名B.name from 表A as 别名A inner join 表B as 别名B on 表A.列名 = 表B.id;
外连接:找不到就显示null, left join 左连接,right join 右连接,
自关联:
存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大
子查询: 一个select 包含 另一个 select
select * from 表 where 字段 = (select 字段 from 表 where);