MySql的简单使用,所有的代码基于MAC
Posted 新年新气象934060369
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql的简单使用,所有的代码基于MAC相关的知识,希望对你有一定的参考价值。
基础
安装mysql
brew install mysql
查看mysql安装路径
ps -ef|grep mysql
查看mysql的配置文件
mysql --verbose --help | grep my.cnf
启动
mysql.server start
登录mysql,可以在my.cnf的配置文件中加入skip-grant-table
mysql -u root -p
当前时间
select now();
显示版本
select version();
查询数据库
show databases;
创建数据库
create database test_db; create database test_db charset=utf8;//设置数据库的编码格式 create database test_db character set utf8;
显示创建的语句
show create database test_db;
删除数据库
drop database test_db;
切换数据库
use test_db;
当前选择的数据库
select database();
查看当前数据库的表
show tables;
创建一个数据表 primary key主键 not null不能为空 auto_increment自动增长
Create table students(id int unsigned not null auto_increment primary key,name varchar(20),age tinyint unsigned,hight decimal(5,2),gender enum(‘男‘,‘女‘,‘未知‘) default ‘未知‘);
删除表
drop table test;
给表添加字段
alter table students add birthday datetime;
修改表的字段类型
alter table students modify birthday date;
修改表的字段名字和类型
alter table students change birthday birth date default "1990-01-01";
删除一个字段
alter table students drop birth;
查看数据表结构
desc students;
插入数据
insert into students values (0,‘刘‘,18,1.72,‘男‘); insert into students values (0,‘刘‘,18,1.72,‘男‘),(0,‘刘‘,18,1.72,‘男‘); insert into students (name,hight) values ("测试",1.77); insert into students (name,hight) values ("测试",1.77),("测试",1.77);
查询数据
select * from students; select name,age from students; select name as 姓名,age as 年龄 from students; select s.name,s.age from students as s;
修改数据
update students set age = 30,name = "老王" where id = 1;
update students set hight = hight +1 where id = 30;
删除数据
delete from students where id = 6
进阶
查询去重
select distinct gender from students;
where使用
select * from students where gender <> "男"; select * from students where id > 3; select * from students where id = 3; select * from students where age>18 and age<40; select * from students where age>30 or age < 20; select * from students where not (age > 30); select * from students where (not age > 30) and name="刘"; select * from students where name like "测%";//查询以测开头的 select * from students where name like "__";//查询名字有两个字符的 select * from students where name rlike "^测.*";//正则 select * from students where age in (30,18);//年龄30,或者18的 select * from students where age not in (30,18);// select * from students where age between 18 and 30;//年龄18<=age<=30 select * from students where age not between 18 and 30;//年龄18<=age<=30 select * from students where age is NULL; select * from students where age is not NULL;
排序
select * from students order by age; select * from students where age is not NULL order by age;//asc 升序 select * from students where age is not NULL order by age desc;//降序
分组、统计
select count(*) from students where age = 18;//统计18岁的人数 select count(*) as 18岁人数 from students where age = 18 select max(age) from students ;//最大年龄 select min(age) from students ;//最小年龄 select sum(age) from students;//所有年龄总和 select avg(age) from students;//平均年龄 select sum(age)/count(*) from students;//平均年龄 select round( sum(age)/count(*),2) from students;//2代表保留两位小数 select gender from students group by gender;//分组 select gender, count(*) from students group by gender;//分组统计 select gender,group_concat(name) from students group by gender;//根据性别统计姓名 select gender,group_concat(name,age) from students where gender="女"; select gender,group_concat(name,"_",age) from students where gender="女"; select gender,group_concat(name) from students group by gender having count(*)>3;//分组的数大于3条记录 select gender,group_concat(name) from students group by gender having avg(age)>20;//分组的平均年龄大于20
分页
select * from students limit 2;//限制查询出来的个数,最多两条 select * from students limit 0,5;//从数据里面第0条开始查5条 select * from students limit 5,5;//从第五条开始查5条 select * from students limit 5,5;//从第五条开始查5条 select name from students where gender="未知" limit 2;
联合查询
if not exists的使用
Create table cls(id int unsigned not null auto_increment primary key,name varchar(20)); alter table students add cls_id int default 0;
Create table if not exists cls(id int unsigned not null auto_increment primary key,name varchar(20));
内连接,取交集
select * from students inner join cls ;//结果是count(students)*count(cls) select * from students inner join cls on students.cls_id = cls.id;//查出学生所在的班级对应的班级 select students.id,students.name,cls.name from students inner join cls on students.cls_id = cls.id;//显示指定的列 select s.*,c.name from students as s inner join cls as c on s.cls_id = c.id;//显示学生所有字段,给表设置别名 select s.*,c.name from students as s inner join cls as c on s.cls_id = c.id order by c.name,s.id;//排序 select * from students as s left join cls as c on s.cls_id = c.id ;//用students为基础,查cls,等价下面 select * from cls as c right join students as s on s.cls_id = c.id ; select * from students as s left join cls as c on s.cls_id = c.id having c.name is null;//查询没有班级的学生 select * from students as s left join cls as c on s.cls_id = c.id where c.name is null;//这个不建议
select s.id,s.name,c.name from students as s,cls as c where s.cls_id = c.id;//不建议
自关联,需要的数据
create table areas(aid int primary key,atitle varchar(20),pid int);
source aaa.sql;//如果aaa.sql是一个sql文件,可以使用这个,前提是ls必须路径里面必须有aaa.sql
Select areas.atitle from areas inner join areas as city on city.pid = areas.aid having areas.atitle="北京市区";
子查询
select * from students where hight = (select max(hight) from students where gender=‘男‘);//查询最高的男生信息 select * from students inner join (select max(hight) as hight from students group by cls_id) as stu on students.hight = stu.hight;//查询每个班最高的学生信息 select * from (select cls_id, max(hight) as hight from students group by cls_id) as stu left join students as s on stu.cls_id = s.cls_id and stu.hight = s.hight;//同上 select * from students inner join (select max(hight) as hight from students group by cls_id) as stu on students.hight = stu.hight having students.gender="女";//查询每个班最高的女学生信息 select * from students left join (select max(hight) as hight from students group by cls_id) as stu on students.hight = stu.hight having students.gender="女";//同上
//视图,主要是为了方便查询
select s.id,s.name,s.age,s.hight,s.gender,c.name from students as s inner join cls as c on s.cls_id = c.id;
删除
drop view students_cls_view;
事务:
start transaction;//或者begin update students set name="好人3" where id = 28; commit;//提交 rollback;//可以回滚
索引
set profiling=1;//开启时间运行监测 select * from students; show profiles;//查看查询的时间 set profiling=1; create index id_index on students(id);//如果是字符串,需要把id改成name(10) 删除 drop index id_index
show profiles;
以上是关于MySql的简单使用,所有的代码基于MAC的主要内容,如果未能解决你的问题,请参考以下文章
mac上编译雷神的《最简单的基于FFMPEG+SDL的视频播放器-最终版》代码
mac上编译雷神的《最简单的基于FFMPEG+SDL的视频播放器-最终版》代码