栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

mysql数据库

mysql数据库

mysql数据库

DBMS(数据库操作系统)

对数据库进行操作时需要用到sql语言,sql语言分为DQL、DML、DDL、TCL、DCL

DQL:堆数据库中的数据进行查询操作(select)(重点)

DML:对数据进行增删改操作(insert、delete、update)(重点)

DDL:对数据库中的表结构进行增删改(create、drop、alter)

TCL:事物控制语言,对事物进行提交(submit)、回滚(rollback)

DCL:数据控制语言,进行授权grant、撤销权限revoke

DQL:

对数据进行查询操作,基础语法是select 字段名1,字段名2,… from 表名 where 条件

create table student(id int auto_increment primary key,

​ name varchar(20),

​ age int);

  1. 基本应用

    select id,name,age from student where name =‘xiaoma’;

    可以查询得到一张表,表头是id、name、age以及对应的数据信息

  2. 查询并对字段名重命名

    select id,name as sname from student

    这条语句把字段名name改成了sname,用关键字as,不过as可以省略不写,中间用空格隔开

    select id,name sname from student

  3. 条件查询

    where后面可以加查询条件,连接符有= != > < >= <= <> between and is null id not null in not in and or like等,其中在使用like时,%代表任意个字符,_ 表示单个字符

  4. from 从哪张表中查询

    from student A:从student表,并把student表当成A表。

  5. group by 和 having

    group by 是分组,group by class 以班级为单位进行分组,group by后面可以接两个字段名,先对第一个进行分组,如果第一个字段相同,再对第二个字段名进行分组

    having:分组之后的过滤,having后面可以写分组函数(count、sum、max、min、avg5个,如果遇到null自动省略)

  6. order by排序

    order by 字段名1,字段名2,… asc/desc,对字段1进行升序/降序排列,如果字段1相同,再对字段2进行排序。

  7. limit分页

    limit start_index,length start_index代表从第几个数据开始分页,(下标是从0开始,不写时默认从0开始),length表示当前页要显示几条数据。

    一般limit pagesize*(pageno-1),pagesize pageno表示当前是第几页,pagesize表示每页的数据条数。

  8. select 字段 from 表 where 条件 group by 分组字段 having 分组后过滤 order by 排序 limit 分页

    ​ ⑤ ① ② ③ ④ ⑥ ⑦

DML:

insert:insert into 表名(字段1,字段2,…) values(值1,值2,…) 向表中插入数据,其中字段名可以省,省略时表示从第一个字段开始插入

delete:delete from 表名 where 条件,从表中删除满足条件的数据

update:update 表名 set 字段名1 = 值1,字段名2 = 值2,… where 条件;从表中修改满足条件的数据

数据类型

int 整数型

bigint 长整数型

float 浮点型

double 浮点型(精度更高)

char 字符型,固定长度,声明时要加上长度

varchar 可变字符型,声明时也要加上最大长度

date 日期

BLOB 二进制对象,可以存储照片、视频等对象

CLOB 大文本型,可以存储较大的字符串类型,(比如4G的文本)

char与varchar的区别:char 的长度是固定的,比如声明char(6),如果写入的数据是‘ma’,在内存中这个变量也是占了6个字符的内存;声明varchar(6),写入‘ma’,在内存中这个变量只占了2个字符内存

DDL:

对表结构进行增删改(create、drop、alter),一般是直接用工具对表结构进行操作,不用sql语言

create table 表名(字段名1 数据类型 约束,字段名2 数据类型 约束,…);

drop table 表名;

约束条件:

非空:not null,该字段不能是null空值

唯一:unique,该字段在整个表中是唯一的,可以是null值;

​ 对单一字段声明唯一:username varchar(100) unique

​ 对两个字段合起来是唯一:unique(studentname,studentage) studentname和studentage两个字段合起来必须是唯一的, 单个字段可以重复,但两个字段合起来不能重复

主键(PK):primary key 声明了主键之后自动变成非空且唯一,一个表中只能有一个主键

自增:auto_increment

外键(FK):foreign key 声明方式,在建表时,在values中加入 foreign key(字段名1) references 表2(字段名2) 该表中的字段名1是外键,连接表2中的字段名2, 那么会产生父子表,表2是父表,该表是子表,创建时先创父表,再创子表,而删除时先删子表,再删父表。向该表插入数据时外键值可以为null

存储方式/引擎

MyISAM方式:最常用,它在内存中产生三个文件.frm(存表结构的文件) .MYD(数据文件) .MYI(索引),

​ 优点:可以被压缩,节省空间,可以转为只读表

​ 缺点:不支持事务

InnoDB(默认):表结构存在.frm文件中,数据存在tablespace中(逻辑概念)

​ 优点:支持事务,最安全,支持行级锁、外键等,MySQL崩溃时可以自动恢复

MEMORY:数据存在内存中,容易丢失数据,断电就没,不支持事务,不能存储CLOB BLOB类型的数据

​ 优点:查询最快

事务:

transaction:事务,一个完整的业务逻辑单元,不可再分,用来保证数据的安全性、完整性。常用在银行转账中,打款和收款这两步必须同时成功或失败,就可以用事务来控制。

事务特性:ACID

​ A:原子性,事务是最小的工作单元,不可再分

​ C:一致性,必须保证多条DML语句同时成功或者失败

​ I:隔离性,事务A与事务B具有隔离

​ D:持久性,最终数据必须持久化到硬盘中,事务才算成功

事务隔离级别:

​ 一级:READ uncommitt读未提交,两个事务可以读取到对方的数据,产生脏读问题

​ 二级:READ committed读已提交,事务A提交之后,事务B可以读取到A提交之后的数据,这会导致一个问题:不可重复读的问题,事务B读取同一个表可能返回的结果不一样,可能是A提交之前的,也可能是A提交之后的

​ 三级:Repeated read可重复读,解决不可重复读的问题,但产生幻读问题:事务A对表数据修改提交后,导致事务B的数据毫无意义

​ 四级:Serializable 序列化读/串行化读,解决脏读、不可重复读、幻读问题,但是事务之间要排队等候。

MySQL默认是三级隔离级别,事务是自动提交

数据库设计三范式:

第一范式:每个表都有主键,且每个字段不可再分。

第二范式:在第一范式的基础上,非主键字段完全依赖主键,不能产生部分依赖。即一张表上的数据是相关的,不能产生没有关系的数据。(学生表中出现饮水机的厂家,这两个就不想关)

第三范式:在第二范式的基础上,每一张表的非主键字段都直接依赖主键,不能间接依赖。(订单表上出现客户id即可,避免出现客户地址、姓名等其他信息,会造成数据冗余)

由三范式设计表时,如果是多对多的关系(学生与老师),设计三张表:学生表(主键)、老师表(主键)、学生_老师关系表(主键+2个外键);如果是一对多的关系(学生与班级,一个学生只有一个班级,一个班级有多个学生,学生是多,班级是一),设计两张表,学生表(主键+外键),班级表(主键)。

总结:多对多,三张表,关系表俩外键;一对多,两张表,多的表加外键

不过在实际开发中,还是以客户需求为主,有时也可以用冗余换速度。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285754.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号