1.介绍
是一个关系型数据库管理软件
Mysql中数据结构:
数据库 + 表的形式;
所有操作都是围绕表中数据;
表中的数据都有严格规则和关系。
1.1创建管理员用户
用户名baby,密码881212
CREATE USER 'baby‘@‘%’INENTIFIED BY‘baby’;
1.2给用户授予所有远程访问权限
GRANT ALL ON . TO 'baby‘@’%‘;
1.3使权限生效
FLUSH PRIVILEGES;
2.进入数据库
mysql -u用户名 -p密码;
3.库级命令
查看所有库名:show databases;
创建数据库:create database (~~if not exists~~) db_name;
删除数据库:drop database (~~if not exists~~) db_name;
进入数据库:use db_name;
4.表级命令
查看所有表名:show tables;
创建表:
create table tb_name(id int,
name varchar(64),
age int,
gender enum('male','female')
)
显示建表信息: show create table tb_name;
删除表:drop table (~~if exists~~) tb_name;
5.表操作 crud
查
select * from tb_name;
条件查询
select field from tb_name where ~~~~~;
and, or ,not语句
增
insert into tb_name (field) values (value);
insert into tb_name (field1, field2) values (value1, value2);
删
全删:delete from tb_name;
指定删:delete from tb_name where ~~~~~;
改:
修改一个字段的所有值:
update tb_name set field = 'value2' where field = 'value1';
6.数据类型
7.特殊查询
排序:order by
select * from tb_name order by age(~~desc~~) ;
(倒序)
限制:limit
select * from tb_name order by id limit 3;
查前三条
select * from tb_name order by id limit 1, 3;
查1之后的三条
去重:distinct
select distinct field from tb_name;
模糊查询:like
任意多个字符%
select * from tb_name where field like '%zh%';
查所有字段为field的值中包含zh的数据
任意一个字符_
使用方法类似%
范围查询:between a and b / in
select * from tb_name where age between 17 and 20;
连续查询
select * from tb_name where age in (17,31,56);
不连续查询
8.聚合
8.1统计个数 count
select count(id) from tb_name where age between 17 and 20;
注意:字段中值为null的不计数
8.2求和 sum
select sum(age) from tb_name where age between 17 and 20;
8.3 求平均值 avg
select avg(age) from tb_name where age between 17 and 20;
8.4 最值(max,min)
select max(age) from tb_name where age between 17 and 20;
8.5 分组 group by
select course , sum(pay) as total_pay from tb_name group by course;
8.6 子句 having
因为where无法与聚合函数一起使用,所以用having代替where。
8.7 嵌套
select * from student where age < (select avg(age) from student);
嵌套内容用括号包裹。
9.连接
9.1内连接 inner join
9.1.1 无条件内连接
又名交叉连接或笛卡尔连接,第一张表中的每一项与另一张表中的每一项依次组合。
select * from tb_name1 inner join tb_name2 ;
9.1.2 有条件内连接
将符合连接条件的内容连接在一起。
select * from tb_name1 inner join tb_name2 on field1 = field2;
9.2 外连接 left/right join
select * from tb_name1 left join tb_name2 on field1 = field2;
将符合连接条件的内容连接在一起,且在连接条件不匹配时,留下左表中的数据,右表中空数据用null代替。
10.表结构修改 alter
10.1改表名
alter table tb_name1 rename to tb_name2;
10.2 改字段名
alter table tb_name change field1 field field_type;
10.3改字段类型
alter table tb_name modify field field_type;
10.4添加字段
alter table tb_name add field field_type;
10.5 删除字段
alter table tb_name drop field;
包括数据一起删除
11.约束
11.1默认约束 default
create table tb_name(id int,
name varchar(64),
**age int default 18,**
gender enum('male','female')
)
未设置默认值时,默认为null
11.2 非空约束 not null
create table tb_name(**id int not null,**
name varchar(64),
age int default 18,
gender enum('male','female')
)
11.3 唯一约束 unique key
create table tb_name(**id int not null unique key,**
name varchar(64),
age int default 18,
gender enum('male','female')
)
11.4主键 primary key(非空且唯一)
create table tb_name(**id int primary key,**
name varchar(64),
age int default 18,
gender enum('male','female')
)
11.5 自增长 auto_increment
一般用在主键上,每个表只能有一个字段为自增长。
create table tb_name(**id int primary key auto_increment,**
name varchar(64),
age int default 18,
gender enum('male','female')
)
11.6 外键 foreign key
只能连接到另一张表的主键,被外键关联的数据无法删除。
foreign key (s_id) references tb_name( primary_key_name);
12.表关系 (用外键实现)
案例:选课系统
共4个表:
1.学院表college:
字段:
id int primary key auto_increment
name varchar(32)
2.学生表student:
字段:
id int primary key auto_increment
name varchar(32)
foreign key (scr_id) references college(id)
3.课程表course:
字段:
id int primary key auto_increment
name varchar(32)
foreign key (cc_id) references college(id)
4.课程表enroll:
字段:
foreign key (s_id) references student(id)
foreign key (cr_id) references course(id)
primary key(s_id,cr_id)