一 MYSQL的安装和环境配置
建议不要安装最新的版本,5.5即可使用。具体安装配置见官网。
二 MySQL–结构型数据库
MySQL是结构型数据库,存储的是表格关系型的。
什么是数据库?
叫Database 用来按照数据的结构组织、存储、管理数据一个仓库 。
三 命令面板操作
- 显示所有的数据库
show databases;
- 使用数据库
use mysql;
- 显示表
show tables;
mysql这个数据库里面,user表是用户的信息表;
4. 创建数据库
create database chat;
显示1行受影响 ,则创建成功;
5. 删除数据库
drop database chat;
- 在创建的时候,检测该数据库是否存在 ,不存在时创建:
create database if not exists chat;
- 创建表: (表名、表的字段名、定义每个表的字段)
注意:字段的数据类型 (int 、float 、 double 、 decimal 、date 、 datetime、 varchar)
直接创建。创建字段的时候 ,字段可以为null ,也可以not null;
auto_increment: 自增列,默认每次自增+1 ;设置自增列得添加主外键;
create table user(
id int not null //(auto_increment这个必须得在添加主外键的时候才能用,不然会出错),
name varchar(50),
sex varchar(10),
brithday datetime
) default charset=utf8; //设置表的编码格式可写可不写 编码格式和数据库引擎默认设置
检测创建的表是否存在,再创建:
create table if not exists user(
id int not null auto_increment,
name varchar(50),
sex varchar(10),
brithday datetime
)
- 查看表创建时的信息 :
show create table user;
- 删除表 :
drop table user;
也可以判断 :
drop table if exists user;
- 操作数据库里面的表:增删改查。
增加数据:
varchar 双引数据,必须是双引号,单引号出错。
如果是按照下面这种方式添加数据 (必须写不为空的字段,为空的字段可写可不写)
insert into user(id,name,age,sex,birthday)
values
(1,"毛豆",20,"男","2020-04-13 12-30-05");//写的数据按照上面列的顺序去写保证数据类型一致
增加之后查看数据若显示乱码 :
set names gbk;
就能正常显示
增加数据的时候不写列 ,指的是表里面所有的列都得添加数据;
insert into user
values
(1,"毛豆",20,"女","2020-12-30 01-20-22");
还可以一次性插入多条数据:
insert into user
values
(),(),(),(); //这种写法是一次增加多条数据
- 查询数据:
select * from user;
星号指表里面所有的列;
查找表里面的固定几个列:
select id,name,sex,age from user;
查找表时候列起别名 使用 ==as == 起别名:
select id as userid,name,sex from user;
- 表中数据修改:update 。 修改数据语法, 添加条件语句 ,不加则修改整张表的。
update user set name='李四'
- where 条件语句
update user set name="毛豆" where id=3;
多条件: 使用and关键字:
update user set name="小红" where id=3 and sex='男'
条件语句查询使用:
select * from user where sex="男";//也可以多条件过滤
- 删除数据操作 :
delete from user
不加条件整张表数据全部删除 , 需要添加条件;
delete from user where id=1;
- like子句 , 模糊查找:
select * from user where name like "张三";
like后边没有使用%和等号效果一样
select * from user where name like "%张";
select * from user where name like "张%";
select * from user where name like "%张%";
- 排序 :order by 子句 可以和条件之类连用;
select * from user order by age asc; //正序
select * from user order by age desc; //倒序
- group by: 语句分组 ,对一个或者多个列进行分组。在分组的列上可以使用 count 、sum 、avg函数;
select sex,count(*) as count from user group by sex;
select name,sum(count) as sum from userlogin group by name;
with rollup:关键字 , 是在分组的情况下,做最终的统计 ;
统计完成之后存在null空值 ,使用coalesce方法处理列上的空值;
select coalesce(name,'总数') as name,sum(count) as sum from userlogin group by name with rollup;
- 多表链接查询:
多表查询+分组以及虚拟表起别名
select user.id,user.name,age,sex,count from user,(select name,sum(count) as count from userlogin group by name) as login where user.name=login.name;
多表查询+条件:
select user.id,user.name,age,sex,job from user,job where user.name=job.name;
子查询: 使用关键字 in
select * from user where id in (select id from score where score>90);
- mysql 数据库里面添加 :主键 primarykey、外键 foreignkey、 唯一键 unique;
- 主键是值不能为null, 不能重复;
- 外键是引用的主键;
- 唯一键是值可以为null ,不能重复;
添加主外唯一键 ,在创建表的时候可以直接添加。主键分为单主键 、联合主键(一张表存在多个主键)。自增列必须是主键;
create table user(
id int auto_increment primary key,
name varchar(100));
添加多个主键:
create table user(
id int auto_increment,
name varchar(100),
age int,
primary key(id,name));
添加外键,外键引用的是主键,外键值必须和主键保持一致:
create table score(
id int auto_increment primary key,
userid int,
sc int,
foreign key(userid) references user(id));
主外键可以让数据统一,表之间的关系。
表外添加主键:
alter table user add primary key (id);
表外添加外键:
alter table score add foreign key (userid) references user (id);
添加唯一键 ,主要约束数据的。
表内添加:
create table user(
id int auto_increment primary key,
name varchar(100) unique key,
age int,);
联合唯一键:
create table user(
id int auto_increment primary key,
name varchar(100),
age int,
unique key(name,age));
外部添加唯一键:
alter table user add unique key(name);
删除主键 :
alter table user drop primary key;
删除外键 :
alter table user drop foreign key 外键名称;
表创建好之后 ,添加列:
alter table user add column newcolumn varchar(100) not null;
- 存储过程 ,为了安全
关键语法 ,修改;为别的符号 ,in: 向存储过程传入值 ; out :传出值;
delimiter &&
create procedure myinfo(in number int)
begin
select * from user where age>=number;
end&&
//存储过程创建完成之后把;修改回来
delimiter ;
//执行存储过程
call myinfo(20);