创建数据库
create database 数据库名 charset=utf8;
查看创建数据库的语句
show crate database ...
使用数据库
use 数据库的名
删除数据库
drop database 数据库名;
约束
主键 primary key:物理上存储的顺序
非空 not null:此字段不允许填写空值
唯一 unique:此字段的值不允许重复
默认 default:当粗填写此值时会使用的默认值
外键 foreign key:对关系字段进行约束,当为关系字段填写值时,会关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并跑出异常
查看表结构
desc tablename;
修改表-添加字段
alter table add 列名 类型;
修改字段
alter table modify 列名 类型及约束;
重命名字段
alter table change 原名 新名 类型及约束;
删除字段
alter table drop 列名;
添加数据
insert into tablename(...) values(...);
更新数据
update tablename set 字段名=vialue where 条件;
删除数据
delete from 表名 where 条件;
使用as给字段起别名
select 字段 as 名字 from tablename;
去重
select distinct 字段 from tablename;
条件查询
比较运算符
- >
select * from students where age >18;
- <
select * from students where age <18;
- >=
select * from students where age >=18;
- <=
select * from students where age <=18;
- =
select * from students where age = 18;
- != 或 <>
select * from students where age !=18;
逻辑运算符
- and
select * from students where age >18 and age<28;
- or
select * from students where age >18 or age<28;
- not
select * from students where not (age >18 or age<28);
模糊查询
like
% 替换1个或多个
_ 替换1个
- 以小开头
select name from students where name like "小%";
- 包含小
select name from students where name like "%小%";
- rlike 正则
- 以周开头
select name from students where name rlike "^周.*";
范围查询
in 表示在一个非连续的范围内
select name from students where age in (12,15);
not in 不非连续的范围之内
select name from students where age not in (12,15);
between ... and ... 表示在一个连续的范围内
select * from students where age between 18 and 35;
not between... and ... 表示不在一个连续的范围内
select * from students where age not between 18 and 35;
空判断
判空 is null
select * from students where age is null;
判非空 is not null
select * from students where age is not null;
排序
order by 字段
asc 升序
desc 降序
select * from students order by age asc/desc;
聚合函数
count 统计
select count(*) from students;
最大值
max
最小值
min
求和
sum
平均值
avg
四舍五入
round(12.23,1) 保留1位小数
分组
group by
select gender from students group by gender;
按照性别分组并统计人数
select gender,count(*) from students group by
gender;
按照性别分组并显示姓名
select gender,group_concat(name) from students
group by gender;
分页
limit start,count
select * from students limit 2;
每页显示2个,第2个页面
select * from students limit 2,2;
连接查询
内连接
inner join ... on
select ... from 表A inner join 表B;
select * from students inner join classes on students.cls_id=classes.id;
select students.name ,classes.id inner join classes on students.cls_id=classes.id;
select s.*,c.name from students as s inner join classes as c on s.cls_id=c.id;
左连接,以左表为准,左表显示所有数据,右表没有数据显示null
left join
以c.name排序然后再按s.id排序
select s.*,c.name from students left join classes as c on s.cls_id=c.id order by c.name,s.id;
右连接
right join ...
子查询
标量子查询
select * from students where age>(select avg(age) from students);
列级子查询
select name from classes where id in (select cls_id from studets);
行级子查询
select * from students where (height,age) = (select max(height),max(age) from students);
表关系 ER图
1对1
两张表任何一张表都可以建关联字段
1对多
在多的表中建关联字段
多对多
新建一张表建关联字段
三范式
第一范式
原子性,表的字段不可再拆分成更小的字段
第二范式
在满足第一范式的基础上,非主键必须完全依赖主键,而不是依赖主键的一部分。
第三范式
满足第二范式并且每个字段都不间接依赖于主键列
视图
视图是什么
视图就是一条select语句执行后返回的结果集
视图是对若干张基本表的引用,一张虚表,查询语句
执行的结果,不存储具体的数据
定义视图
create view 视图名称 as select语句;
查看视图
查看表会将所有的视图也列出来
show tables;
视图的用途就是查询
select * from v_stu_score;
删除视图
drop view 视图名称
drop view v_stu_score;
视图的作用
1.提高了重用性,就像一个函数
2.对数据库重构,却不影响程序的运行
3.提高了安全性能,可以对不同的用户
4.让数据更加清晰
事务
1 为什么要有事务
所谓事务,它是一个操作序列,这些操作要么都执行要么都不执行,它是一个不可分割的工作单位
事务的四大特性(简称 ACID)
原子性 Atomicity
一致性 Consistenvy
隔离性 Lsolation
持久性 Durablity
索引
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ),它们包含着对数据表里所有记录的引用指针
索引目的
索引的目的在于提高查询效率,可以类比字典
索引的抵用
查看索引
show index from 表名;
创建索引
如果指定的字段是字符串,需要指定长度,建议与定义字段时的长度一致
字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))
删除索引
drop index 索引名称 on 表名;
网友评论