mysql数据库的操作

数据库的创建和删除

数据库的创建

create database 数据库名 charset=utf8;

查看所有数据库

show databases;

查看当前使用的数据库 

select database();

数据库的删除

drop database 数据库名;

数据表的创建和删除

数据表的创建create

CREATE TABLE table_name(
字段名称 数据类型  可选的约束条件,
column1 datatype contrai,
column2 datatype,
column3 datatype,
.....
columnN datatype,
-- 主键说明可以放在字段中单独说明 也可以放在最后统一说明
PRIMARY KEY(one or more columns)
);

查看创表语句

show create table 表名;

数据表的删除 drop

drop table 表名;

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

show tables;

查看表结构dese

desc 表名;

修改表结构alter

添加字段
alter table 表名 add 列名 类型;
重命名字段
alter table 表名 change 原名 新名 类型及约束;
修改字段类型
alter table 表名 modify 列名 类型及约束;
删除字段 
alter table 表名 drop 列名;

数据的增删改查

数据的查找select

select 查询字段 from 表名;

where操作

select * from 表名 where 条件;
where比较运算
  • 等于: =

  • 大于: >

  • 大于等于: >=

  • 小于: <

  • 小于等于: <=

  • 不等于: != 或 <>

where逻辑运算
  • and,表示有多个条件时, 多个条件必须同时成立(值为True)
  • or, 表示有多个条件时,满足任意一个条件时成立
  • not,表示取反操作
where模糊查询
  1. like
  2. %表示任意多个任意字符
  3. _表示一个任意字符
where范围查询

1. in表示在一个非连续的范围内

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

注意: between A and B在匹配数据的时候匹配的范围空间是 [A,B]

where空值判断

1. null与''是不同的 

2. is null

优先级
  • 优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
  • and比or先运算,如果同时出现并希望先算or,需要结合()使用
总结
  1. 常见的比较运算符有 >,<,>=,<=,!=
  2. 逻辑运算符and表示and连接的多个条件同时成立则为真,or表示or连接的多个条件有一个成立则为真,not表示对条件取反
  3. like和%结合使用表示任意多个任意字符,like和_结合使用表示一个任意字符
  4. bettween-and限制连续性范围 in限制非连续性范围
  5. 判空用IS NULL 判非空用 IS NOT NULL

order排序

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

聚合函数

mysql数据库的操作_第1张图片

group分组查询

group by分组

group by + group_concat()

group by + 聚合函数

group by + having

group by + with rollup

limit限制记录

可以使用limit限制取出记录的数量,但limit要写在sql语句的最后。

select * from students limit 0,3; 意思是:从第下标为0的记录开始取,取3条。

分页查询

  1. 从start开始,获取count条数据
  2. start默认值为0
  3. 也就是当用户需要获取数据的前n条的时候可以直接写上 xxx limit n;
select * from 表名 limit start=0,count

连接查询

内连接

语法1

select 字段 from 表1 inner join 表2 on 表1.字段1 = 表2.字段2

语法2

select 字段 from 表1 , 表2 where 表1.字段1 = 表2.字段2
外连接

左连接

主表 left join 从表 on 连接条件;

右链接

从表 right join 主表 on连接条件;
自然连接
子查询 
select 字段名 from 表名 where 字段 in (select 字段名 from 表名);

数据的添加insert

insert into 表名 values (...)

mysql数据库的操作_第2张图片

数据的删除

物理删除,不可找回

delete from 表名 where 条件

逻辑删除,本质是修改

update students set isdelete=1 where id=1;

数据的更改update

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

事务

什么是事务

事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行。

事务的四个特性

原子性(atomicity)

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性

一致性(consistency)

数据库总是从一个一致性的状态转换到另一个一致性的状态。

隔离性(isolation)

通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。当一个事务操作数据时,其他事务的操作必须等待,当前事务提交后才可以执行。

持久性(durability)

一旦事务提交,则其所做的修改会永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)

查看表引擎

表的引擎类型必须是innodb类型才可以使用事务

show engines;  # 查看数据库服务器支持的表存储引擎

开启事务

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

begin;
或者
start transaction;

提交事务

将缓存中的数据变更维护到物理表

commit;

回滚事务

放弃缓存中变更的数据 表示事务执行失败 应该回到开始事务前的状态

rollback;

原子的ACID特性 

  • 事务有原子性、一致性、隔离性、持久性
  • 原子性强调事务中的多个操作时一个整体
  • 一致性强调数据库中不会保存不一致状态
  • 隔离性强调数据库中事务之间相互不可见
  • 持久性强调数据库能永久保存数据,一旦提交就不可撤销

关于事务需要注意的几个问题

  1. 修改数据的命令会自动的触发事务,包括insert、update、delete
  2. 在mysql命令行中会自动提交事务,所以当我insert语句执行完成后没有commit数据库也看到了提交的数据。
  3. 当我们不需要mysql命令行自动提交的时候 键入set autocommit=0即可
  4. SQL语句中有手动开启事务的原因是:可以进行多次数据的修改,如果成功一起成功,否则一起会滚到之前的数据
  5. 不可撤销的操作(隐式提交): 除了对表数据insert/update/delete语句之外的绝大多数语句都是不能撤销的,比如数据库、表结构的操作,大家可以动手验证。

索引

为什么使用索引(适用于不经常变动的表)

索引是一种数据结构,用于快速查找和访问表中的数据。它可以看作是一个目录,帮助我们在数据库表中快速找到所需的信息。索引的作用是提高查询效率,因为它能够减少数据库系统需要扫描的数据量,从而加快查询速度。

查看索引

show index from 表名;

创建索引

create index 索引名称 on 表名(字段名称(长度))

删除索引

drop index 索引名称 on 表名;

关于索引的使用问题

  • 索引可以明显提高某些字段的查询效率
  • 索引使用

    • 创建 create index xxx on 表名(字段名[(索引长度 字符串类型才需要指定)])
    • 查看 show index for xxx
  • 索引的副作用-索引虽好 不要贪杯

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

用户

查看所有用户

  • 所有用户及权限信息存储在mysql数据库的user表中
select host,user,authentication_string from user;
  • 主要字段说明:
    • Host表示允许访问的主机,%为所有主机都可以登录
    • User表示用户名
    • authentication_string表示密码,为加密后的值 

创建用户

create user '用户名'@'主机' identified by '密码';

给用户授权(需要刷新权限,重新登录)

grant 权限 on 数据库.表名 to '用户名'@'主机名';
flush privileges;

查看用户的权限

show grants for '用户名'@'localhost';

更改用户的权限(需要刷新权限重新登录)

grant 权限名称 on 数据库 to 账户@主机 with grant option;
flush privileges;

删除用户 

语法1

delete from user where user='用户名';

语法2 

drop user '用户名'@'主机';

修改用户的密码

ALTER user 'root'@'%' IDENTIFIED BY '密码';
flush privileges;

忘记密码时免密登录

先停止服务

编辑MySQL配置文件mysqld.cnf

添加跳过验证

[mysqld]段下加入一行“skip-grant-tables

启动服务

使用mysql -u root -p回车直接登录

修改密码,先设置为空

use mysql
update user set authentication_string='' where user='root';

注释或删除跳过验证

登录root用户修改密码

你可能感兴趣的:(数据库,mysql)