DDL数据定义语言,数据库操作
创建数据库,数据表
查看数据库 show databases;
创建数据库 create database db_xx charset utf8;
修改数据库字符集 alter database db_xx charset utf8; Windows装的时候用gbk
查看数据库的创建信息 show create database db_xx;
切换使用数据库 use db_xx;
查看当前工作数据库 select database();
删除数据库 drop database db_xx;
DDL数据定义语言,数据表操作
数据表操作
查看当前数据库中有哪些数据表 show tables;
常见数据表 create table t_xx(id int(显示宽度) primary key auto_increment,name char(储存的字符数) unique,address varchar(50) default '北京',gender enum(‘男’,‘女’) not null, cid int,foreign key(cid) references t_xxx(id));
ID 用unsigned修饰一下,无符号,就是全是正的
zerofill 零填充的意思(长度不够的都补上0,而且指定了zerofill的话,该字段自动被认为是unsigned的)
varchar 变长字符串
外键要关联的字段类型必须一致 int(5),那么都是int(5)
查看数据表的创建信息 show create table t_xx;
show create table t_xx \G
查看表结构 desc t_xx;
改-增字段 alter table t_xx add new_f_xx ty_xx;
改-修改字段类型 alter table t_xx modify f_xx new_ty_xx;
改-修改字段名 (同时可以修改字段类型) alter table t_xx change old_f_xx new_f_xx new_ty_xx;
改-删除字段 alter table t_xx drop f_xx;
删除数据表 drop table t_xx;
DML数据操作语言
主要完成 对数据的CUD
先使用数据库
先去借助一个查询语句,用来验证结果select * from t_xx;
插入数据
为所有字段插入单条数据 insert into t_xx value(v1,v2,v3,.....);
value 和values的区别是插入单条或多条时效率不同,单条前面效率高
为指定字段插入数据,要注意值得顺序和类型要和给定字段匹配
insert into t_xx(f_xx,f_xx,...) values(v_1,v-2,...);
插入多条数据 insert into t_xx(f_xx,f_xx,...) values(v_1,v-2,...),(v_1,v-2,...),....;
insert into t_xx values(v_1,v-2,...),(v_1,v-2,...),....;
修改更新数据 update t_xx set f_xx = v_xx; 对整表操作
update t_xx set f_xx = v_xx where f_xx = v=xx; 满足条件的记录进行修改
删除数据
删除整表,不经过事务,会重置auto_increment 编号
truncate t_xx;
不会重置编号,可以放到事务操作中的删除指令
delete from t_xx; 默认整表操作
delete from t_xx where f_xx = v_xx; 删除满足条件的数据
DQL数据查询语言
只实现查询操作select
查询所有数据select * from t_xx;
查询指定字段的数据 select f_xx,f_xx,..... from t_xx; 先去获取数据,再查询
给字段起别名 select f_xx as a_xx, f_xx a_xx,...... from t_xx as t_a_xx;
表也可以起别名
as可以写可以不写
数据的去重 select distinct f_xx from t_xx; 单字段去重;
select distinct f_xx,f_xx,..... from t_xx; 多字段去重,只有所有指定的字段值都相同,才认为是重复数据
条件查询 select * from t_xx where f_xx 条件运算符 v_xx;
关系运算符 > , < ,>= ,<= , = , != ,<>
逻辑运算符 and,or ,not
模糊查询 like, % 任意多个字符 ,_任意单个字符
范围查询 非连续值 in(v1,v2,....), 连续值between .. and ...
判断空 不能使用等于个不等于
只能使用 is null 和 is not null
not f_xx is null 效率要慢一点,两个运算符进行计算
排序 select * from t_xx order by f_xx asc; 单字段排序,默认是asc,可以不写
select * from t_xx order by f_xx desc; 降序
select * from t_xx roder by f_xx asc | desc, f_xx ase |desc,......; |代表或者
先以第一个主排序字段进行排序,如果有相同使用下一个
分页 limit
select * from t_xx limit 起始索引,显示条数;
默认起始索引从0开始,可以不写
第n页的其实索引计算公式 (n-1) * count
聚合函数 sum() avg() min() max() count() group_concat()
count()可以写*强制统计空值,其他除了grope_concat()都统计的非空值
一般情况下,聚合函数要和分组配合使用
分组 group by
select f_xx,f_xx from t_xx group by f_xx,f_xx; 分组时使用了那个字段进行分组,那么就只能查询哪个字段
分组可以实现去重的作用,但是比distinct更加强大
select 后除了分组字段外,只能写聚合函数
分组筛选条件
select f_xx from t_xx group by f_xx having f_xx =v_xx;
where 和 having的区别
where一般先于分组执行,而having是后与分组执行,就是对分组后的数据进行筛选。