mysql数据库总结

眉间皱痕 提交于 2020-01-14 18:41:18

1MySQL数据库的特点:

持久化存储

读写速度极高

保证数据的有效性

对程序支持性非常好,容易扩展。

MySQL是一个关系型数据库,核心元素是

数据行(记录)

数据列(字段)

数据表(数据行的集合)

数据库(数据表的集合)

RDBMS

主要有两种类型的数据库:关系型数据库、非关系型数据库

2SQL

SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,不区分大小写。

SQL语句主要分为:

DQL:数据查询语言,用于对数据进行查询。

DML:数据操作语言,对数据进行增加、修改、删除

TPL:事务处理语言,对事务进行处理

DCL:数据控制语言,进行授权与权限回收

DDL:数据定义语言,进行数据库、表的管理

CCL:指针控制语言,通过控制指针完成表的操作

3MySQL

MySQL是一个关系型数据库管理系统。

数据类型

使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。

常用数据型有:

整数:intbit

小数:decimal

字符串:varcharcharr

日期时间:datetimedatetime

枚举类型enum

decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2

char表示固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为'ab '

varchar表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab'

字符串text表示存储大文本,当字符大于4000时推荐使用

对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径

1、约束

主键primary key:物理上存储的顺序

非空not null:此字段不允许填写空值

唯一unique:此字段的值不允许重复

默认default:当不填写此值时会使用默认值,如果填写时以填写为准

外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联表中查询此值是否存在,如果存在则填写成功,如果不存在则抛出异常

2、命令行连接

运行  MySQL -uroot -p密码

退出登录  quitexitCtrl+d

查询版本:select version();

显示当前时间:select now();

修改输入提示符:prompt  python>  \D完整日期  \U使用用户

3、数据库

查看所有数据库:show databases;

使用数据库:use 数据库名;

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

创建数据库:create database 数据库名 charset=utf8;

删除数据库:drop database 数据库名;

4、数据表

查看当前数据库中所有表:show tables

查看表结构:desc 表名;

创建表:create table 表名字(......

create table students(

    id int unsigned primary key auto_increment not null,

    name varchar(20) default '',

    age tinyint unsigned default 0,

    height decimal(5,2),

    gender enum('男','女','人妖','保密'),

    cls_id int unsigned default 0 )

auto_inncrement表示自动增长

修改表-添加字段

alter table 表名 add 列名 类型;

修改表-修改字段:重命名

alter table 表名 change 原名 新名 类型及约束;

修改表-修改字段:不重命名

alter table 表名 modify 列名 类型及约束;

修改表-删除字段

alter table 表名 drop 列名;

清屏:system clear

删除表:drop table 表名

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

4、增删改查(curd

创建create 、更新update、读取retrieve、删除delete

查询所有列:select * from 表名

查询指定列:select 1,列2... from 表名

1、增加

主键列是自动增长,但是在全列插入时需要占位,通常使用0或者 default 或者 null 来占位,插入成功后以实际数据为准

全列插入:值的顺序与表中字段的顺序对应

Insert  into 表名  values(...)

部分列插入:值得顺序与给出的列顺序对应

Insert into 表名(1....) values(1, .....)

全列多行插入:值得顺序与给出的列顺序对应

insert into 表名 values(...),(...)...;

例:insert into classes values(0,'python1'),(0,'python2');

insert into 表名(列1,...) values(值1,...),(值1,...)...;

例:insert into students(name) values('杨康'),('杨过'),('小龙女');

2修改

update 表名 set 1=1,2=2... where 条件

3、删除

Delete from 表名 where 条件

逻辑删除,就是修改操作

update students set isdelete=1 where id=1;

MySql建立Table时设置编码为utf8

设置数据库编码

create database dbname default charset utf8 collate utf8_general_ci;

设置数据表编码

CREATE TABLE 'author' (.......

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

mysql中两种数据库引擎 
ENGINE=MyISAM 
ENGINE=InnoDB

5、条件

使用where子句对表中的数据筛选

select * from 表名 where 条件;

where后面支持多种运算符,进行条件的处理

比较运算符、逻辑运算符、模糊查询、范围查询、空查询

模糊查询:like

%表示任意多个字符、_表示一个任意字符

select * from students where name like '%';

范围查询:in

In表示在一个非连续的范围内

select * from students where id in(1,3,8);

Between....and...表示在一个连续的范围内

select * from students where (id between 3 and 8) and gender=1;

空判断

判空:is null

select * from students where height is null;

判非空:is not null

select * from students where height is not null;

6、排序

select * from 表名 order by 1 asc|desc [,列2 asc|desc,...]

默认按照列值从小到大排序(asc2

asc从小到大排序,即升序

desc从大到小排序,即降序

select * from students where gender=1 and is_delete=0 order by id desc;

select * from students  order by age desc,height desc;

1聚合函数

总数

count(*)表示计算总行数,括号中写星与列名,结果是相同的

聚合函数不能在where中使用

select count(*) from students;

最大值max

最小值min

求和sum

平均值avg

2、分组

Group by含义:将查询的结果按照1个或多个字段进行分组,字段值相同的为一组

Group by可用于单个字段分组,也可用于多个字段分组

select gender from students group by gender;

Group by + group_concat()

Group_concat(字段名)可以作为一个输出字段来使用

表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值得集合

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

Group by +集合函数

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

Group by + having

having条件表达式:用来分组查询 后指定一些条件 来输出查询结果

having作用和where一样,但having只能用于group by

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

Group by + with rollup

With rollup 的作用是:在最后新增一行,来记录当前列里所有记录的总和

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

3、获取部分行

select * from 表名 limit start,count   start获取count条数据

select * from students where gender=1 limit 0,3;

select * from students where is_delete=0 limit (n-1)*m,m

4、连接查询

select * from 1 innerleftright join 2 on 1. = 表2.

inner join内连接

leftright join左右连接

7as起别名

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

自关联

sql文件中导入数据

source areas.sql;

8、子查询

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

主查询和子查询的关系

1、子查询是嵌入到查询中

2、子查询是辅助主查询的,要么充当条件,要么充当数据源

3、子查询是可以独立存在的语句,是一条完整的select语句

子查询的分类:标量子查询,子查询返回的结果是一个数据(一行,一列)

列子查询:返回的结果是一列(一列多行)

行子查询:返回的结果是一行(一行多列)

标量子查询

select * from students where age > (select avg(age) from students);

列级子查询

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

行级子查询

select * from students where (height,age) = (select max(height),max(age) from students);

子查询中特定关键字使用

in 范围

格式: 主查询 where 条件 in (列子查询)

查询的完整格式

select select_expr [,select_expr,...] [      

      from tb_name

      [where 条件判断]

      [GROUP BY {col_name | postion} [ASC | DESC], ...]

      [HAVING WHERE 条件判断]

      [ORDER BY {col_name|expr|postion} [ASC | DESC], ...]

      [ LIMIT {[offset,]rowcount | row_count OFFSET offset}]

]

完整的select语句

select distinct *

from 表名

where ....

group by ... having ...

order by ...

limit start,count

执行顺序为:

from 表名,where ....group by ...select distinct *having ...order by ...limit start,count

实际使用中,只是语句中某些部分的组合,而不是全部

As起别名在字段中:select x as y from xxx

给表起别名:select * from xxx as yyy

求平均数保留2位小数:select round(avg(price),2) as avg_price from goods;

将分组结果写入到goods_cates数据表

insert into goods_cates (name) select cate_name from goods group by cate_name

同步表数据

通过goods_cates数据表来更新goods

update goods as g inner join goods_cates as c on g.cate_name=c.name set g.cate_name=c.id;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!