MySQL数据库

MySQL概述

什么是数据库

数据库是计算机中一种专门管理数据资源的系统

数据库系统
标记: Database System

数据库 Database
标记: 存放了所有的数据

数据库管理系统
标记: Database Management System

MySQL

MySQL是小型的关系型数据库,开源免费

MySQL支持SQL语句(结构化查询语言)

MySQL是客户机/服务器体系软件结构 C/S软件体系

SQL 结构化查询语言

概述:SQL是一种专门查询和修改数据库里的数据,以及对数据库进行管理和维护的标准化语言

数据库定义语言 DDL

定义和管理数据库对象,如 create ,drop

数据库操作语言 DML

用于操作数据库对象中所包含的数据,如 insert update delete

数据库查询语言 DQL

用于查询数据库中存储的数据,如 select

数据库控制语言 DCL

管理权限及数据更改,如 grant,revoke

MySQL的常用命令操作

数据库的连接与关闭

mysql -h 主机地址 -u 用户名 -p 密码
标记: 只有客户机所在的主机被授予权限才能去连接MySQL服务器

注意事项

1.每一个SQL命令都需要使用分号来完成

2.可以将一行命令分割成多行

3.可以通过\c取消当前行命令

4.可以通过\q 、exit、 Ctrl+c、 quit 退出当前客户端

5.将查询后的数据立起来 \G

6.显示当前服务器的状态 \s

7.显示帮助信息 \h

8.更改执行符号 mysql -u root -p --prompt="\[email protected]\h[\d]" 执行后 mysql变为 [email protected][(none)]

数据库操作

创建数据库 create database [if not exists] 数据库名;
标记: 每创建一个数据库在data目录下创建一个以此数据库命名的文件夹

删除数据库 drop database [if exists] 数据库名;

显示当前数据库服务器下所有的数据库列表 show databases;

选择数据库 use 数据库名;

显示当前所使用的数据库 select database();

显示当前登录的用户 select user();

数据表操作

创建表 create table [if not exists] demo(
字段1 信息,
字段2 信息.....
)[engine=MyISAM default charset=utf8];

删除表 drop table [if exists] 表名

数据表内容的简单管理

插入数据 insert into 表名[(字段1,字段2,...)] value(前面对应的值);

查询数据库 select 字段名1,字段名2.... from 表名

更新数据 update 表名 set 字段名称=新修改的值(where 条件)

删除数据 delete from 表名[where条件]

修改表结构

语法: alter table 表名 action

用户权限管理

创建新用户并授权 grant 权限 on 数据库.数据表 to 用户名@登录主机 identified by "123"

刷新权限 flush privileges;(在不重启服务器的情况下,使权限生效)

显示用户的所有的权限 show grants for 用户名@'主机名';

移除数据库的权限 revoke 权限 on 数据库.数据表 from 用户名@'主机地址'

删除用户 delete from mysql.user where user='huxiaoshuai';

数据库字段类型

数值类数据
标记: 在设置为无符号时,类型不变,值的范围增大一倍

tinyint 非常小的整数 范围 -128 ~ 127

int 标准整数

float 浮点类型 float(6,2) 6表示长度 2表示精度

字符串类型数据

char() 定长度 执行效率相对较高

varchar() 可变长度 执行效率相对较低

text 文本类型 存储大量的文字

enum 枚举类型 enum('fish','apple','dog') 选择一个

数据字段属性

unsigned 无符号

zerofill 自动补零

auto_increment 自增

default 设置默认值

null 允许为空 not null 不允许为空

创建索引

主键索引 primary key 唯一 不重复 不能为空
标记: 每张表都有多个唯一索引,只有一个主键索引

唯一索引 unique

常规索引

创建常规索引 alter table 表名 add index 索引名(字段名);

删除普通索引 alter table 表名 drop index 索引名

删除主键索引 alter table 表名 drop primary key

查看表中的所有索引 show indexes from 表名;

索引的作用提高查询效率,但过多的索引或影响查询效率

全文索引

设置字符集

\s 可以查看服务器的状态

Server characterset 服务器的字符集

Db characterset 当前数据库字符集

Client characterset 客户端字符集

Conn. characterset 连接数据库的字符集

MySQL的增删改查

增: insert
标记: 添加新数据

第一种方式: insert into 表名[(字段1,字段2,字段3....)] value(值1,值2,值3....);

第二种方式:insert into 表名[(字段1,字段2,字段3...)] values(值1,值2,值3...);

删:delete
标记: 删除记录

delete from 表名 [where条件][order by字段][limit行数]

改:update
标记: 更新数据表中已经存在的数据

update 表名 set 字段名=表达式[,...][where 条件][order by 字段][limit 行数]

查:select
标记: 查询数据

select查询的完整格式: select [all|distinct] 字段名 [as 别名]from 表名
[where 语句] -- where条件
[group by][having...] 分组
[order by...] 排序
[limit count] 查询条数

查询特定的字段 select username,userpwd from 表名
标记: *代表所有,方便用户操作,当时有时会浪费

为字段起别名

第一种 select count(*) as num from user;

第二种 select count(*) num from user;

distinct 关键字取消重复的数据

select distinct sex from user;

在select语句中使用表达式

算数表达式 select 1.23*10;

逻辑表达式 select 3>9;

SQL函数表达式

select version(); --查看版本

select md5(123); -- 查询123被md5()之后的数据

select rand(); -- 生成一个0-1之间的随机数

select count(*);-- 计算有多少条数据

select sum(字段); -- 计算该字段进行加和

select max(字段名) -- 获取该字段的最大值

select min(字段名; -- 获取该字段的最小值

select avg(字段名); -- 获取该字段的平均值

使用where条件

逻辑操作符

比较操作符

between
标记: 在....之间

select * from user where id between 100 and 150;
标记: 查看id在100和150之间的所有的数据

not between
标记: 不在...之间

like 查询

精确查询或模糊查询

% 代表了任意长度个字符

select * from user where username='%三%';
标记: 查找名字中有三的所有用户信息

_ 代表了一个字符

in 范围查询

select * from user where id in (10,20,12);

group by 字段名 having 子条件

按照字段名进行分组(子条件)

select sex,count(*) from user group by sex having sex>1;
标记: 按照sex进行分组,查询sex>1的每个性别有多少人

order by 对查询出的结果进行排序
标记: DESC 降序 ASC 升序

select score from user order by score DESC;
标记: 查询user表中的score按照score进行降序排列

limit 限定结果行数
标记: 可用来做分页

select * from user order by id DESC limit 10;
标记: 查询user表中的所有数据按照id降序排列,取出10条

select * from user order by id DESC limit 10,10;
标记: 查询user表中的所有数据按照id降序排序,跳过10条取出10条

多表联查

关联查询,两个表中至少有某一字段是相关联的

where 条件直接关联查询

select stu.,grade. where stu.id = grade.uid;
标记: 查询stu表和grade表的所有的信息 条件是 stu.id=grade.uid

左关联查询

select stu.,grade. from stu left join grade on stu.id=grade.uid;
标记: 左关联以前面的表作为参照物,后面表中无数据自动补 null

右关联查询

select stu.,grade. from stu right join grade on stu.id=grade.id;
标记: 右关联以后面的作为参照物,前面的表无数据自动补 null

MySQL数据库.jpg