MySQL基础

数据库类型

关系型数据库:Relational Database Management System RDBMS

所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

核心元素:

  • 数据行(记录)
  • 数据列(字段)
  • 数据表(数据行的集合)
  • 数据库(数据表的集合)

非关系型数据库

安装mysql数据库:

1.打开虚拟机终端(小黑框)

2.输入 sudo apt-get install mysql-server

启动数据库sudo service mysql start
查看进程中是否存在mysql服务ps ajx|grep mysql
停止服务sudo service mysql stop
重启服务sudo service mysql restart

关系型数据库的主要产品:

oracle:在以前的大型项目中使用,银行,电信等项目

mysql:web时代使用最广泛的关系型数据库

ms sql server:在微软的项目中使用

sqlite:轻量级数据库,主要应用在移动平台

支持多种存储引擎:

MyiSAM

InnoDB

MEMORY(HEAP)

MERGE

BDB(BerkeleyDB)、EXAMPLE、FEDERATED

ARCHIVE、CSV、BLACKHOLE

在终端进入mysql:mysql -uroot -p(输入密码,可直接跟,例如(-p密码))

如果-p后不加空格,则默认为密码,如果加空格,则为数据库名称,如果无此数据库,则报错(无论密码正确与否)

退出:quit / exit / ctrl+d

查看版本:select version();

查看当前时间:select now();

创建数据库:

create database 名字 charset=utf8; (选择解释语言,可以识别中文)

create database 名字;

查看创建的数据库:show create database 名字;

查看当前使用的数据库:select database();

查看所有数据库:show databases;

删除数据库:drop database 名字;

选择数据库:use 名字;

数据类型:
整数Int , bit(1/8字节)
字符串Varchar(数字) 表示字符上限 Char(数字) 字符上限,若不够自动补空格
日期时间date, time,datetime
枚举类型enum(’’,’’…)多选一
浮点型decimal(3,2)表示共3位,小数点后有两位
约束:
int unsigned无符号整形
auto_increment表示自动增长
not null表示不能为空
default默认值
primary key表示主键
unique唯一的
foreign key外 键

创建表:create table 表名(字段 类型 约束 [,字段 类型 约束]);

查看所有表:show tables;

查看表结构:desc 表名;

查看创建表语句:show create table 表名;

Demo:

创建 classes 表(id、name)
create table classes(
id int unsigned primary key auto_increment not null,
name varchar(20) not null
);

创建 students 表(id、name、age、high (decimal)、gender (enum)、cls_id)
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) not null,
age int unsigned,
high decimal(5,2),
gender enum("男性","女性","中性","保密") default "保密",
cls_id int unsigned
);

修改表名: alter table 表名 rename to 新表名;

修改列(改名字):alter table 表名 change 原名 新名类型及约束;

(不改名字):alter table 表名 modify 列名 类型;

修改表-删除字段:
alter table 表名 drop 列名;删除列
alter table 表名 add 列名;添加列

​ 数据表的增删查改

查: select

select * from 表名;查询所有列
select id,name from 表名;查询指定列
select name as ‘名字’ , age as ‘年龄’ from 表名;本次查询将name改为名字。。。
select distinct name from student;取消重复的行

条件查询:

使用where筛选:

select id,name from classes where id=1;

where 后可支持多种运算符:

比较运算符:> ,< ,<= ,>= ,!= ,=

select id,name,age from student where id>3

逻辑运算符:and , or , not

select id,name,gender from student where id>3 and gender=‘女’;

模糊查询:like

% 表示多个任意字符

Select * from students where name like ‘黄%’;(黄开头

Select * from students where name like ‘%黄%’;(包含黄

_ 表示一个任意字符,有几个表示几个字符

Select * from students where name like ‘黄_’;(两个字,黄开头

Select * from students where name like ‘’;(三个字,中间有黄

范围查询:between …and \ in (1,2,3,…)

select name from student where age between 20 and 30;

空判断: is null

查询身高为空的信息

select * from students where height is null;

判断非空 :is not null

查询身高为非空的信息

select * from students where height is not null;

优先级问题:
小括号>not>比较运算符>逻辑运算符

and 比 or 先运算,如果同时出现并希望先算or,需要结合()使用

增: insert
括号里跟内容,有多少列就应该跟多少字段
部分列插入,值的顺序与给出的列对应
改: update

update 表名 set 列名=值,列名=值… where 条件

例:update students set name=‘张四’ where id=3;把id=3 的地方的名字改为张四
删: delete
物理删除:

delete from 表名 where 条件;

例:delete from students where id=5;

**逻辑删除:**本质就是修改操作,加一个标志代表已经删除,其实并没有删除。

update students set is_delete=1 where id = 2;

排序:order by 字段

升序:asc

降序:desc

例:

查询年龄大于20,按年龄升序排列

select * from students where age > 20 and order by age asc;

显示所有的学生信息,先按照年龄从大–>小排序,当年龄相同时 按照身高从高–>矮排序

select * from students order by age desc,height desc

常用的5个聚合函数:

总数count(*)

select count(*) from stundents;(查学生总数

最大值max(列)

select max(age) from students;(查年龄最大的

最小值min(列)

select min(age) from students;(查年龄最小的

求和sum(列)

select sum(age) from students;(求年龄的和

求平均值avg(列),

round(avg(),1) 保留一位小数…

select avg(age) from students;(求年龄的平均值

去重:distinct(列)

select distinct(name) from students;(去掉重复的信息

分组:

group by

select gender from students group by gender;

group by + group_concat() 显示分过组的信息

select gender,group_concat(id) from students group by gender;

group by + 聚合函数

select gende,max(id) from students group by gender;(最大id

group by + having 在group中,不用where,用having

按gender分组,查询id数量大于三的分组

select gender,group_concat(id) from students group by gender having count(id) > 3;

group by + with rollup

在最后新增一行,来记录当前列里所有记录的处理

最后会在末尾新增一行,输出所有的年龄,不分组

select gender,group_concat(age) from students group by gender with rollup;

最后会在末尾新增一行,输出所有数据的平均数

select gender,avg(age) from students group by gender with rollup;

分页: limit

start代表开始,count代表获取数量

select * from 表名 limit start,count

求第n页的数据

select * from students limit (n-1)*m,m;

连接查询:join

内连接查询(inner join):查询结果为两个表匹配到的数据

select * from students inner join classes;

右链接查询(right join):查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充

select * from students as s right join classes as c on s.cls_id = c.id;

左链接查询(left join):查询结果为两个表匹配到的数据,左左表特有的数据,对于右表中不存在的数据使用null填充

select * from students as s left join classes as c on s.cls_id = c.id;

子查询:在一个select中嵌入了另一个select语句,被嵌入的称为子查询

标量子查询

列子查询

行子查询

主查询:主要的查询对象,相对于子查询

(主查询)select * from students where age > (select avg(age) from students(子查询));

子查询特定关键字:in

select *from students where cls_id in (select id from classes);

外键:保证数据的完整性和准确性,在一定程度上起到了相互约束的作用

从文件中导入数据到mysql

1.在同一路径下打开mysql

2.source 文件名.sql

自关联:起别名,自己关联自己

查询省的名称为“山西省”的所有城市

select city.* from areas as city inner join areas as province on city.pid=province.aid where province.atitle=‘山西省’;

显示每种商品平均价格:

select cate_name(商品分类字段) avg(price) from goods group by cate_name;

查询每种类型的商品中 最贵、最便宜、平均价、数量

select cate_name,max(price),min(price),avg(price),count(*) from goods group by cate_name;

查询所有价格大于平均价格的商品,并降序

select id,name,price from goods where price > avg(price) order by price desc;

查询每种类型中最贵的电脑信息

select * from goods inner join (select cate_name,max(price) as max_price from goods group by cate_name) as good on goods.cate_name = good.cate_name and goods.price = good.max_price;

更新表结构(同步数据,修改表结构),添加外键

同步数据: update (goods inner join goods_cates on goods.cate_name = goods_cates.name) set goods.cate_name = goods_cates.id;

修改表结构: alter table goods change cate_name cate_id int unsigned not null;

添加外键: alter table goods add foreign key(cate_id) references goods_cates(id);

开启运行时间监测:set profiling = 1;

查看执行时间:show profiles;(用于查看有索引和无索引运行所需时间差)

视图

视图的作用:

1.提高了重用性,就像一个函数

2.对数据库重构,却不影响程序的运行

3.提高了安全性能,可以对不同的用户

4.让数据更加清晰

创建视图:create view 视图名称 as select语句;

查看视图:show tables;

使用试图:select * from 视图名称;

删除视图:drop view 视图名称;

事务

事务:开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中

事务四大特性(简称ACID)

原子性(Atomicity)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

开启事务:start transaction \ begin

回滚事务:rollback;

提交事务:commit;

事务存储点:savepoint s1(名称);

事务存储点回滚:rollback to s1;

注意:

1.修改数据的命令会自动的触发事务,包括insert、update、delete

2.而在SQL语句中有手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起会滚到之前的数据

索引

索引:索引的目的在于提高查询效率
注意:

1.要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。

2.建立索引会占用磁盘空间

创建索引:create index 索引名称 on 表名(字段名(数字限制));

create index index_name on goods(name(10));

查看索引: show index from 表名;

show index from goods;

删除索引:drop index 索引名称 on 表名

drop index index_name on goods;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值