MySQL数据库学习笔记

一、数据库介绍
1、为什么需要数据库
内存掉电后数据丢失,计算机的资源有限,因此需要把程序中用的数据存储下来以便于关机后还能继续使用(数据持久化),而保存数据最简单的方法就是把数据以文件形式写入到磁盘中。

    随着程序的功能越来越复杂,需要操作的数量也就是越来越来大,管理数据就成了很大的问题,因为读写文件并解析数据需要大量重复的操作,并且从大量数据的增、删、改、查需要非常复杂的逻辑和耗时的操作。

    如果程序都各息实现读写数据的代码,一方面效率低、容易出错,另一方面是每个程序访问数据的接口、业务逻辑不同,所以代码难以复用,所以我们前辈们就发明出一款专门用来管理数据的软件--数据库

    使用数据库程序员就不需要自己管理数据了,而是通过数据库提供的接口来读写数据,至于数据是数据存储到文件中的、如何提高效率、如何保证安全,则不需要关心。

2、什么是数据库
    数据库,可以看作电子化的文件柜(存储电子文件的场所),用户可以对文件中的数据方便的增加、删除、修改、查询等操作。
    注意:我们使用的其实是数据管理软件,而不是存储数据的仓库,大底层来看我们使用数据库其实就是与一个进程通信。

3、数据库的类型
    层次型数据库
        它的数据模型是上下级的层次关系,从数据结构上来看就是像一棵树。
    网状型数据库
        层次型数据库不足以表更复杂的数据关系,因此就有了网状型数据库,它的数据模型是数据节点与节点之间连接起来,从数据结构上来看就是图型结构。
    关系型数据库
        由于层次型、网状型数据库普通人难以理解,因此才有了关系型数据库。
    可以把关系型数据库看作是二维表格,它的数据模就相当于Excel表。
    随着时间的推移和市场竞争,最终关系型数据获得了最终的市场份额,因为关系型数据库使用最方便、简单。
4、目前主流的关系数据库
    商用数据库:Oracle,Oceanbase,DB2,SQL Server
    开源数据库:MySQL,MariaDB
    桌面数据库:以微软的Access为代表,适合桌面应用程序使用
    嵌入式数据库:SQLite为代表,适合手机、平板、可穿戴设备使用
    内存数据库:Redis,数据存储在内存中,所以访问速度非常快

二、SQL语言介绍
1、什么是SQL
SQL是结构化查询语言的缩写,用于访问和操作数据库,既可以查询数据库中的数据,也可以添加、删除、修改数据库中的数据,还可以对数据库进行管理和维护。

    SQL语言被ANSI组织定义出一套统一的标准,也就是所有的数据库都支持SQL语言,但是不同的数据库对SQL语言进行了不同程度的扩展(通常把它们称为"方言"),也就是说如果只使用标准的SQL语言,理论上所有的数据库都可以使用,但如果使用了某个数据库的扩展,换到其它数据库上可能就不行了。

    注意:大小写不敏感
2、SQL中的语句分类
    数据库控制语句:用于权限的授予和回收。
    数据定义语句:用于建立、修改、删除数据库对象。
    数据操作语句:用于改变数据库中的数据,如:增、删、改、查。
    数据查询语句:用于查询所需要的数据,select。
    事务控制语句:用来维护数据一致性的语句。
3、SQL的数据类型
    数值型
        TINYINT     1字节
        SMALLINT    2字节
        MEDIUMINT   3字节
        INTEGER     4字节
        BIGINT      8字节

        FLOAT       4字节
        DOUBLE      8字节
        DECIMAL(M,D)
            M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。
            D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M
    字符串型
        CHAR(n)     n:0~255   定长字符串,相当于定义 char str[n];   
        VARCHAR(n)  n:0~65535 变长字符串,n表示最多存储n个字节,具体多少个字节不确定。
    日期型
        DATE	3字节  日期值 格式:YYYY-MM-DD
            例:1000-01-01/9999-12-31		
        TIME	3字节  时间值或持续时间 格式:HH:MM:SS
            例:'-838:59:59'/'838:59:59'		
        YEAR	1字节  年份值 格式:YYYY	
            例:1901/2155
        DATETIME 8字节	混合日期和时间值 格式:YYYY-MM-DD HH:MM:SS	
            例:1000-01-01 00:00:00/9999-12-31 23:59:59	
        TIMESTAMP 4字节	时间戳 格式:YYYYMMDD HHMMSS
            例:1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

三、访问数据库
1、本地访问
mysql -uuser -ppwd 方便,但有暴露密码的风险
mysql -uuser -p 可以隐藏的输入密码
2、远程访问
先通过ssh、telnet命令远程登录搭建数据库的服务器,然后再登陆数据库,前提是服务器要开户ssh或telnet远程登录的功能。
3、客户端访问
MySQL Workbench
四、数据库控制语句
创建数据库:create database nameDB;
创建用户并授权: grant all(select,insert,update,delete) privileges on nameDB.* to users@’*’ identified by ‘pwd’;
刷新:flush privileges;
选择数据库:use nameDB;
注意:每次用户登录后,第一个操作就要选择要使用的数据库。
五、数据定义语句
1、创建表
create table 表名(字段名 字段类开,…);
注意:语句不区分大小写,但表名、字段名区分大小写。
查看当前数据库中的所有表格:show tables;
查看表结构:desc 表名;
练习1:创建一个老师表

2、修改表
    修改表名:rename table 旧表名 to 新表名;
    增加列:alter table 表名 add(字段名 字段类型);
        注意:只能添加到末尾,不能插入到中间。
    删除列:alter table 表名 drop 字段名;
    修改列:alter table 表名 modify 字段名 字段类型;

3、删除表
    删除表数据,保留表结构:truncate 表名;
    删除表数据和表结构:drop table 表名;

六、表设计的三范式
1、无重复的列
如果列的数据重复,可以拆分成两张表。
1011 hehe1 w 20 c1|c2
1012 hehe2 w 20 c1|c3

    1011 hehe1 w 20 c1
    1011 hehe1 w 20 c2
    1012 hehe2 w 20 c1
    1012 hehe2 w 20 c3
    
2、在遵循第一范式的基础,字段完全依赖于主键
    如果一个字段与主键没有依赖关系,可能会导致其它字段的值重复。
    1011 hehe1 w 20
    1011 hehe1 w 20

    1011 c1
    1011 c2
    1012 c1
    1012 c3
3、在遵循第二范式的基础,字段不能传递依赖于主键
    如果一个字段与主键仅有传递依赖关系,也可能会导致其它字段的值重复。

七、数据操作语言
1、插入数据
插入一条完整数据:insert into students values(字段值);
字段值要与表结构一一对应。
随意插入一条不完整数据:insert into students(字段名) values(字段值);
字段名与字段值要一一对应。
2、修改表数据
修改所有行:update 表名 set 字段名=数据;
修改部分行:update 表名 set 字段名=数据 where 条件;
3、删除表数据
删除所有数据:delete from 表名;
功能相当于 truncate 表名;
删除符合条件的数据:delete from 表名 where 条件;
4、客户端不允许修改、删除
Edit->preferences->SQL Editor->取消底部的Safe Updates…
八、数据查询语言
select 字段1,字段2,… from 表名 where 条件;
注意:*是SQL中的通配符,代表所有字段

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值