mysql学习
一、基础部分
1.逻辑删除:重要数据不要直接删除,增加一个域isDelete
增加isDelete域 bit 0/1
2.登录mysql -u root -p
3.命令行模式:
*select version(); 查看版本
*select date(); 查看时间
*数据库的库操作:
*create database demo charset = utf8; 添加数据库
*show databases; 显示数据库
*drop database demo; 删除数据库
*use demo; 切换数据库
*select database(); 查看当前使用的是哪个库
*数据库的表操作
*show tables 查看表
*create table students(
id int auto_increment primary key not null,
name varchar(10) not null,
gender bit default 1,
birthday datetime
) 创建表--必须记住!!!
*desc students; 查看表结构
*alter table students add|drop|change isDelete bit default 1; 修改表结构,不建议经常使用
*drop table students; 删除表
*show create table students 查看创建表语句
*数据库的数据操作
*insert into students values(1,'haha',1,'1990-10-02') 全部插入
*insert into students(gender,name) values(0,'小龙女') 部分插入
*insert into students(name) values('小龙女'),('杨过'),('郭襄') 部分多条插入
*select * from students;
*update students set name = '大龙女' where name = '小龙女'; 修改
*delete from students where name='大龙女';删除 不要做物理删除,用isDelete 逻辑删除
*备份与恢复
*mysqldump -u root -p >~/Desktop/备份备份.sql
*mysql -u root -p <~/Desktop/备份备份.sql
二、查询
1.比较运算: (>= > < <= !=) select from students where id>=/<=/!=/>/<3;
2.逻辑运算: (and or not) select * from students where id>=3 and gender=1
3.模糊查询: (like % _ ) select * from students where name like 'lz_'; _匹配任意一个字符
4.范围、判空: (in,between and) select * from students where id in (1,5select * from students where id between 1 and 4;
5.分组 :(group by ) select gender as 性别,count(*) from students group by gender;
* select * from students group by name having id=1; 这里注意having和where的区别。having根group
6.排序: (order by 列名 asc/desc) select * from students order by gender asc,name asc 默认正序(asc),当第一个排序一样时候,第二个按照顺序进行排列。
7.聚合: count() max() min() avg() sum() 这五个函数。
8.分页:(limit start num) select * from students limit (n-1)*m m (n为页数,m为每页显示的数量)
9.编写的顺序:
*select * from students where ...
group by ... having...
order by ...
limit start nums
10.去重: select distinct * from students;
三、高级
1.关系:先确定关系,在再关系的基础上建立外键。
*foreign key(stuid) references students(id)
*create table scores(id int auto_increment primary key not null,
score decimal(4,1),
stuid int,
subid int,
foreign key(stuid) references students(id),
foreign key(subid) references subject(id));
2.外键的级联操作:(意义不大,了解概念就行)
*restrict 抛异常
*cascade
*set null
*no action
*这些操作都不好,如果该表被其他表引用的话,做逻辑删除isDelete = 1
3.连接查询(这个很重要!!!):
*select students.name,subject.name,score from scores
inner join students on scores.stuid = students.id
inner join subject on scores.subid = subject.id;
当结果来源于多张表的时候需要考虑连接查询。不可忽略join 和 on
left join,right join 和inner join 的区别:
INNER JOIN: 两个表中都有数据,才能够显示出来
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
四、总结:
这句话诠释了很多东西。
select * from students inner join scores on students.id = scores.stuid where gender=1 group by gender order by gender asc
未完。