【学习笔记】——Ubuntu下MySQL命令(一)

数据库:按一定的格式存储和管理的数据的仓库。

数据库的分类:

1、关系型数据库 :一张张二维表  表与表之间存在一定的关系

代表:MySQL、 SQL server、Oracle

2、非关系型数据库:数据采用键值对的方式存储

代表:mangoDB  Redis

特点:永久存储、读写速度高、保证数据有效性。

数据库和数据库管理系统的关系:数据库管理系统是管理数据库的的软件(应用软件)。

服务端软件:管理数据库。()

客服端软件:主要负责和服务端进行通信,向服务端传输数据和向服务端获得数据。

实现服务端与客户端通信的桥梁是SQL语言。

SQL语言主要分为:

1、DQL: data query language eg:select

2、DML:data manage language 

3、DDL:data define language

4、DCL:data control language

5、TPl:事务处理语言

MySQL:数据类型和约束

1、数据类型:int bit  decimal varchar char data time datatime enum

图片、音频、视频可以存在数据库中,但是我们不这么做,而是上传到某个服务器中,在数据库表中存储该文件路径。

当字符串大于4000(大文本)时推荐使用text表示。

2、约束类型:

(1)primary key mysq建议所有表主键字段都叫id,类型为int unsigned

(2)not null 

(3)unique

(4)default

(5)foregin key 

 

 

数据库的相关命令

安装MySQL相关

sudo apt-get install mysql-server

2、查看MySQL安装情况

apt-cacche show mysql-server


3、查看MySQL的状态

service mysql status


4、启动

service mysql start


5、停止

service mysql stop


6、重启

service mysql restart


7、查看配置文件的介绍
 

cd /etc/mysql/mysql.conf.dvim mysqld.cnf

port:默认端口号
datadir:数据库的保存路径
bind-address:表示服务器绑定的ip
6、登录MySQL

mysql -uroot -p  (回车后输入mysql密码)


7、退出数据库
exit、quit、ctrl+d

以下是SQL语言,每句以;(分号)结尾。

数据库相关操作

1、创建数据库

create database databaseName charset=utf8;

note:若不指定charset(编码格式)只能是英文。


2、查看数据库

show databases;


3、使用数据库

use databaseName;


4、查看当前所在数据库

select datadse();


5、删除数据库
 

drop database databaseName;  (这块我drop这个单词老是打错)


表结构的相关操作


1、创建表

create table 表名(属性1 类型 约束,属性2 类型 [约束],...);(不同字段间无空格)


2、删除整张表

drop tablename;


3、查看创表语句

show create table 表名;


查看表结构:

desc 表名;


4、修改表(alter)-添加字段

alter table tableName add 字段名 类型 约束;


5、alter - 修改字段属性或约束

alter table tableName modify 属性名 新类型 新约束;


7、alter-修改字段

alter table tableName change old属性名 new属性名 类型 约束;


8、alter-删除字段
 

alter table tableName drop 字段;

表数据的相关操作

基本操作——增删改查


1、向表中插入数据(insert into)
 

insert into 表名 valus(按字段一一添加);
insert into 表名(字段列表)values(按字段列表一一添加);
inser into 表名 values (第一行),(第二行)...;
inser into 表名(指定字段名) values(按字段第一行),(按字段第二行)...;


2、更新数据(update set)(note :update是e 结尾 不是a结尾!!!)
 

update 表名 set 属性=xx...[where 条件];

3、删除(delete  from 物理删除)

delete form 表名 where 条件;


物理删除,一旦删除就不容易恢复,使用逻辑删除的方式可以解决这个问题。

添加删除表示字段,0表示未删除 1表示删除

alter table tableName add isdelete bit default 0;


逻辑删除数据

update tableName set isdelete = 1 where id = n;  


note:对于自增列 给 0、default、null 都可以。

4、as关键字—取别名

 select name as 姓名, gender as 性别, height as 身高 from students;

5、distinct关键字—去重复
 

select distinct 字段一, 字段二 from tablename;

where 条件查询

下面的命令以

表名为table

字段名:id name gender age height isdelete

的表为例。

where条件查询支持的运算符

1、比较运算符

<

>

=

<=

>=

!=  <>

查询年龄小于18的学生

select * from students where age < 18;

查询年龄不小于16的学生

select * from student where age >= 16;

查询年龄不在16到18的学生

select * from student age>18 and age <16;

查询id不等于3的学生

select * from student where id !=3;

 

2、逻辑运算符

and

or

not

查询年龄大于16的男生

select * form student where gender='男' and age > 18; 

查询年龄不再10到18之阿金的学生

select * from student where not(age >= 10 and age <=18);

3、范围查询

between  and 

in 元祖

查询年龄在10到18之间的学生

select * form student where age between 10 and 18;

查询年龄不在10到18之间的男生

select * from student where (not id between 10 and 18)and gender='男';

4、模糊查询:like

通配符:-(单个字符)、%(任意多个字符)

查询姓牛的女学生

select * from student where like name='牛%' and gender='女';

5、空判断

is null

is not null

c查询没有性别的学生

select * from student where gender is null;

排序 order by

升序:asc

降序:desc

mysql 默认是升序

select * form 表名 order by 字段1 asc|desc,字段2asc|des,...asc|desc

语法说明:order by 对select的结果进行升序或者降序排序。

先按照列1排序,列1相同时再按列2排序。

查询学号前二十的女同学按升高降序排序

select * from student where id<20 and gender='女' order by height desc;

查询所有学生 按年龄从小到大排序,年龄相同按身高从大到小排序

select * from student order by age, height desc

分页查询

select * from 表名 limit start,count;

limit 关键字用于限制数据显示数量,start:开始索引 ,默认0 count: 查询条数

查询学生表获取第n 页数据

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

聚合函数

种类:

1、count(字段)

2、max(字段)

3、min(字段)

4、sum(字段)

5、avg(字段)

聚合函数默认自动忽略字段为 null的记录   可用ifnull(字段,values)对null做替换。

聚合函数一般结合分组来使用

分组查询——group by

分组查询在不使用聚合函数以及group_concat()的情况下,只显示分组字段。对一个字段进行分组的时候可用distinct实现。

语法:

group by 列名 [having 条件][with rollup]

根据性别分组

select gender from student group by gender;

根据性别和年龄进行分组——姓名和年龄都相同的才会分为一组。

select gender,name from student group by gender, name

group by + group_concat

按年龄分组 ,并显示每个分组姓名字段信息集合

select age, group_concat(name) from student group by age;

【学习笔记】——Ubuntu下MySQL命令(一)_第1张图片

group by + 聚合函数

统计不同性别人数

select gender, count(*) from students group by gender;

group by + having——having 过滤分组数据专用

根据性别进行分组 统计年龄大于20的人数

select gender, count(*) from students group by gender having age>18;

group by + with rollup

在记录最后新增一行,显示查询时聚合函数统计和计算结果

select gender,count(*) from students group by gender with rollup;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(MySQL)