dml: (基于数据表数据操作的命令)
select, update delete, insert into
ddl:(操作表结构属性有关的命令)
alter(add, modify, change,drop)
drop , create
dml基本语法
select * from table
update table set field='value'
delete from table
insert into table(field, field) values ('value', 'value'), ('value', 'value')
ddl本语法
create table 表名 (
字段名 类型(长度)| enum('value', 'value') 约束 comment '备注',
primary key(字段名),
unique(字段名),
unique index 名字(字段名),
index(字段名),
constraint 外键名 foreign key(本表字段名) references 外表名(外表字段名)
)ENGINE=INNODB DEFAULT charset=utf8 COMMENT '表备注';
create view
alter table add 字段名 类型(长度) 约束
alter table add constraint 外键名 foreign key(本表字段名) references 外表名(外表字段名)
alter table add index
分组函数
group by 与 count, avg, sum, avg, having, where
select avg(number) as avg_number from score group by user_id having avg_number > 60 where status = 1;
解释:从score表中 获取status = 1的结果集中,根据user_id分组,计算每个user_id的avg(number) 平均分得到的结果集后 再筛选平均分大于60的数据。
优先级 where > group by > having
distinct 从结果集中并去重
多表查询(子查询,联合查询)
子查询
select (select xxx) from (select xxx) join (select xxx) on where id in (select xxx)
联合查询
内连 inner join
外联
left join 获取join的右边表字段为空时设为null
right join 获取join的左边表字段为空时,设为null
内连与外联在于 ,前者需在所有联合的表中on的条件下 同时满足则返回数据,后者则如果不满足on条件,则获取的join表的字段为空时设为NULL
储存引擎
myisam 和 innodb (常用)
myisam
数据和索引储存在内存中,一旦断电,则可能丢失数据
多用于查询用,效率高
表级锁
可转换压缩文件,并提供只读,省空间
innodb
多用于数据更新
支持事物回滚
行级锁
支持联级表更新删除
数据库崩溃可自动恢复
视图
可以把查询复杂的语句存到视图中,减少工作量,提高开发效率
create view myview as select * from a join b on b.id = a.b_id
Show create view myview
Drop view if exists myview
如果a和b表数据更改了,view也更改,但创建view以后,开发人员直接是select * from myview 代替上面的复杂语句
数据库设计
一对一
一对多
多对多