建立数据库
- 显示所有的数据库
show databases;
- 直接创建数据库
create database chat; //显示1行受影响 成功
检测创建数据库:在创建的时候 检测该数据库是否存在 不存在创建
create database if not exists chat;
- 使用数据库
use mysql;//database changed
- 删除数据库
drop database chat;
建立数据表
- 显示汉字
set names gbk;
- 创建表: (表名、表的字段名、定义每个表的字段)
注意:字段的数据类型(int float double decimal date datetime varchar)
创建字段的时候 字段可以为null 也可以not null
auto_increment 自增列 默认每次自增+1 设置自增列得添加主外键
create table user( //直接创建
create table if not exists user( //检测创建的表是否存在 在创建
id int not null auto_increment primary key,
name varchar(50) ,
sex varchar(10),
brithday datetime
) default charset=utf8;
//设置表的编码格式可写可不写 编码格式和数据库引擎默认设置
- 查看表创建时的信息
show create table user;
- 删除表
drop table user;
drop table if exists user;
操作数据库里面的表
- 增加 数据表内容 insert into
insert into `user` (id, name,sex,birthday)
values
("1","trankle","女","1995-01-15 12:00:00"),
("2","youkusou","女","2020-01-15 13:00:00");
- 表创建好之后 添加列
alter table user add column columnname varchar(100) not null;
- 查询数据 select from
查询所有列select * from user
查询某列select liename1,liename2,liename3 from user
- 修改 update 条件判断 (否则会修改全部)
update `user` set name = "ROY" where id=3;
- 删除 delete from 条件判断 (否则会删除全部)
delete from `user` where id=3;
- 条件判断 where 条件语句(= != > < >= <= like “”)
- 模糊查找
like替代= ;like% %like %like%
select * from user where name like "张%"; //张***
//like后边没有使用%和等号效果一样
- 排序order by
asc 正序、desc 倒序;order by 子句可以和条件之类连用
select * from `user` order by id asc;
select * from `user` order by id desc;
- 分组 group by
对一个或者多个列进行分组 在分组的列上可以使用 count sum avg函数,
select * from `user` group by sex;
//列 起名
select sex,count(*) as sexcount from `user` group by sex;
select sex,sum(sexcount) as sum from `user` group by sex;
with rollup关键字 是在分组的情况下,做最终的统计 ;统计完成之后存在null空值 使用coalesce(,’’)-with rollup;方法处理列上的空值
select coalesce(name,'总数') as name,sum(count) as sum from `user` group by name with rollup;
- 多表链接查询
多表查询+分组以及虚拟表起别名
select user.id,user.name from user,(select name,sum(count)as count from user2 group by name) as login where user.name = user2.name;
多表查询+条件
select user.id,user.name from user,job where user.name = job.name;
子查询 使用关键字 in
select * from user where id in(select id from score where score>90);
添加主外键
主键primary key 外键foreign key 唯一键 unique key
- 主键(自增列是主键):不能为null 不重复
id int auto_increment primary key
联合主键(primarykey(id,name)
一张表存在多个主键)。
add表外添加主键alter table user add primary key (id);
drop表外删除主键alter table user drop primary key (id);
- 外键 :引用的主键
creata table 'user'( id int auto_increment primary key,
foregin key(userid) references user(id));
add表外添加外键 alter table 'user' add foregin key (userid) references user(id);
drop表外删除外键 alter table 'user' drop foregin key (userid) references user(id);
- 唯一键: 可为null不重复
id int unique key
联合唯一键(uniquekey(id,name)
add表外添加外键alter table 'user' add unique key (id);
drop表外删除外键alter table user drop unique key (id);
存储过程
定义存储过程
//关键语法 修改;为别的符号
delimiter &&
create procedure myinfo(in number int,out num int) // in 向存储过程传入值 out 传出值
//create procedure 存储过程名(参数)
//create function 存储函数名(参数)
begin
DECLARE num int (unsigned default 4000000);//变量定义
select count(*) into num from user where age>=number;
set count=num;
select count;
end&&
//存储过程创建完成之后把;修改回来
delimiter;
// 执行存储过程
@p=0; //变量赋值
call myinfo(20,@p);
删除存储过程
drop procedure myinfo;
连接
内连接:返回交集 inner join···on···
select user.id,name from user inner join user2 on user.id=user2.id;
左连接:返回左表全数据,右表的交集 left join···on···
select user.id,name from user left join user2 on user.id=user2.id;
右连接:返回右表全数据,左表的交集 right join···on···
select user.id,name from user right join user2 on user.id=user2.id;