数据库

数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)

为什么使用数据库呢?

文件安全问题;

文件不利于检索和数据管理;

文件不利于存储海量数据;

文件在程序中不利于控制;

连接数据库:mysql -h+Ip地址 -u 用户 -p

下面就看看SQL语句的分类:

DDL:数据定义语言,用来维护存储数据的结构(create,drop)

DML:数据操作语言,用来对数据进行操作(insert,delete,update)

DCL:数据控制语言,主要负责权限管理和事务(grant,revoke,commit)

1.数据库的库表操作:

1.1数据库操作:

字符集:一套符合数据库的编码(show charset)

 校验规则:会影响数据库中的数据的大小写,和排序(show collation)

create database databaseName default charset=utf8 collate utf8_general_ci(创建数据库时指定字符集和校验和)

1.2数据库表操作:

修改数据库表:alter table tableName

添加:alter table tableName  add column  datatype ( alter table users add assets varchar(100) after birthday;)

更改:alter table tableName modify column datatype columnName   column定义

删除:alter table tableName drop column columnName

改名:alter table tableName change column oldName newName  column定义

1.3命令:

查看当前连接到数据库的连接:show proceesslist;

杀掉指定的ID的连接:kill id

显示错误警告:show warnings

2.数据类型与约束:

2.1数据类型

int,int unsigned

bit 位字段类型,范围是1-64,bit在显示的时候,是按照ASCII码对应的值显示

float占用4字节,decimal占用16字节,高精度

char固定的字符串长度,单位是字符,最大长度255

varchar:可变的字符串长度,单位是字符,最大存储65535

datetime:日期格式:YYYY-MM-DD HH:MM:SS

date:日期格式:YYYY-MM-DD 

timestamp:时间戳范围:1970-01-01 00:00:01.000000 UTC to 2038-01-19 03:14:07.999999 UTC

eum:枚举类型,其实就是单选类型;该设定是提供了若干个选项值,最终一个单元格,实际只存了一个值。

set:就是多选类型;该设定值只是提供了若干个选项的值,最终一个单元格中,设计可存储了任何其中的多个值。

2.2 表约束

空属性:数据库默认字段是null

默认值default:数据在插入的时候不给字段赋值,会选择默认值

列描述comment:无实际含义,描述列信息,创建表时语句保存。

zerofill:用作格式化显示

主键:primary key;不可重复,不能为null,一张表只能有一个主键;

自增长:auto_increment;整形数据适用,一张表最多只能有一个自增长列,默认从1开始。

唯一键:unique key 唯一约束字段中的数据,不可重复,可以为null,null不做唯一判断。

外键:外键用于定义主表和从表之间的关系,外键约束主要定义在从表,主表则是必须要有主键约束或唯一键约束;外键数据必须在主键的主键列存在或者为null

create table myclass (        id int primary key,        name varchar(30) not null comment'班级名'    );

create table stu (        id int primary key,        name varchar(30) not null comment '学生名',        class_id int,        foreign key (class_id) references myclass(id)    );

3.CRUD和聚合函数:

3.1CRUD增删改查

新增:插入数据应该与字段的数据类型相同;插入数据的大小应在规定的范围内;在values中指定的数据位置必须与加入的列的位置相对应;字符和日期类型应该包含在单引号中;插入空值,不指定或者null

insert into tableName ( 字段列 ... ) values (列的值 ...) on duplicate key update 字段=新值, ...(主键冲突时);

删除:delete,truncate(都是删除整个表中的数据,表结构还存在;truncate删除速度快,delete返回删除的记录数,truncate返回0,delete可以带where,删除灵活,但不适合通过where删除所有数据);

更新:update用新的值更新表中原有的值,set指定要修改的列和值,where指定更新的行;

3.2 聚合函数

count():返回某一列的行总数

sum():返回满足where条件的行指定列的和

avg():返回满足where条件的指定平均值;

max()/min():返回满足where条件的最大最小值

3.3 字句

where过滤

order by排序(默认升序asc,desc降序)

group by分组,过滤使用having

3.4合并查询

union:取两个结果集的并集,会自动去除重复行

union all :取两个结果集的并集,不会去除重复行

3.5内连接

接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选(inner join)

3.9外连接

left join:显示左侧的表

right join:显示右侧的表

4.高级特性:

4.1索引

提高数据库的性能。

常见索引分为:主键索引(primary key),唯一索引(unique),普通索引(index),全文索引(fulltext)

占用磁盘空间 当添加一条记录,除了添加到表中,还要维护二叉树(索引会形成一棵二叉树),速度有影响,但不大。 当我们添加一个索引,不能够解决所有查询问题,需要分别给字段建立索引;索引是以空间换时间 。

主键索引:创建列的时候定义(id int primary key),列定义之后指定(primary key (id)),修改表添加索引(alter table tableName add primary key (id));

唯一索引:创建列的时候定义(id int unique key),列定义之后指定(unique key (id)),修改表添加索引(alter table tableName add unique key (id));

普通索引:唯一索引:创建列的时候定义(index(name)),修改表添加索引(alter table tableName add index(name));创建索引(create index indexName on tableName(name))如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

全文索引:当对文章字段或有大量文字的字段进行检索时,会使用到全文索引;列定义之后指定
    fulltext(titile,body);全文检索要使用  match(字段列表) against (条件内容)

CREATE TABLE articles (    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,    title VARCHAR(200),    body TEXT,    FULLTEXT (title,body) );

查询有没有database数据;

 SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database');

查看索引:show keys from tableName;show index from tableName;

删除索引:alter table tableName drop primary key;alter table tableName drop index indexName;drop index indexName on tableName

使用原则:比较频繁作为查询条件的字段应该创建索引;唯一性太差的字段不适合单独创建索引;更新频繁的字段不适合创建索引;不会出现在where字句的字段不该创建索引

4.2事务

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句执行时要么全部成功,要么全部失败,是一个整体。MySQL提供的事务机制保证了达到这样的效果。

开启事务  start transaction

设置保存点 savepoint  pointName

回滚到某个保存点  rollback to pointName

如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用rollback(要求是:事务还未提交)

如果一个事务提交了(commit),则不可以回滚(rollback)

事物的隔离级别:

分类

读未提交 (read uncommitted) 发生脏读,不可重复读,幻读,不加锁读

读已提交(read committed) 发生不可重复读,幻读,不加锁

可重复度(repeatable read)不加锁

串行化(serializable)加锁

脏读 一个客户端(事务)会读取到另外一个客户端(事务)未提交的修改数据

不可重复读 同一个查询在同一事务中多次进行,由于其他事务提交所做的修改或者删除,导致每次返回不同结果集合

幻读 同一个查询在同一个事务中多次进行,由于其它事务提交所在的插入操作,每次返回不同的结果集

设置事务隔离级别:set session transaction isolation level read uncommitted

事务ACID特性:

原子性(Atomicity) 原子性指事务是一个不可分割的工作单元,事务中的操作要么都发生,要么都不发生

一致性(Consistency) 一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的 时间并发事务有多少。

隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离

持久性(Durability) 持久性是指一个事务一旦提交,它对数据库中的数据的修改就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

4.3视图

视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化会影响到视图。

创建视图:create  view viewName as select columns from tableName

删除视图:drop view viewName

表要占用磁盘空间,视图不需要

视图不能添加索引

使用视图可以简化查询 视图可以提高安全性​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值