1.MySQL出现的背景和一些基本概念

 

1.为什么学习MySQL

	MySQL 是目前最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 也是目前最好的 RDBMS 应用软件之一。随着淘宝去IOE(去除IBM小型机、Oracle数据库及EMC存储设备)化的推进,MySQL 数据库在当前的互联网应用中变得越来越重要,本教程主要讲授针对 Java 开发所需的 MySQL 高级知识,课程中会让大家快速掌握索引,如何避免索引失效,索引的优化策略,了解innodb和myisam存储引擎,熟悉MySQL锁机制,能熟练配置MySQL主从复制,熟练掌握explain、show profile、慢查询日志等日常SQL诊断和性能分析策略。

2.数据和信息

1.数据

能够承载信息 的一切东西

2.信息(Information)

信息是被人所认知的正确数据

3.开源软件(open Source Software)

背景:20世纪70年代左右-计算机产业 潮流:买硬件送软件
问题:用户群体量不大 多种计算机用户平台 做开源软件---》商业软件: Business Software
                                                     GNU-》GNU's not unix->gnu/linux
开源软件 =免费软件? 开源软件:源代码必须公开,并可以修改
代表人物:Richard Stallman  ->毕业于MIT AI  软件自由 领导自由软件运动  组织:Free Software Foundation ->FSF
    区分{
    	自由软件-一种思想 开源软件 免费软件
    }
创立GPL协议(GNU general public license)	
    1.本软件随便用
    2.本软件随便改
    为最终用户考虑,未考虑到开发者
    3.本软件再修改后,如果再次发布也需要遵循GPL(专利版权问题)java 在2017年被oracal卖给eclipse Foundation

早期:A)光盘(存储介质产品挣钱)---互联网
 后期:B)服务(技术支持)mysql(oracal后期开发) -》MariaDB(同一作者 Michael Widenius:Monty 开发)早期成立Tcx Datakonsult
官网: www.mysql.com
Bill Gates 达摩院 ---人工智能        软件开源已经成为一种趋势
GNU/Linux  第一个免费开源软件操作系统 芬兰
免费开源网站: 
			www.opnesourcesoftwaredirectory.com
        	www.sfs.com
开源软件:
            1)操作系统  Linux
            	GNU/Linux    Centos  (都是在linux 根据GPL的不同版本)
            2)应用软件 并没有出现
            3)数据库MySQL-my Ess Que Ell读音(my  s q l )        
            	Derby mSQL NOSQL MOGODB
            4)中间件 
            	Hibernate MyBatis Spring JDBC
            5)web server
            	tomcat

4.MySQL & MariaDB

开源数据库 -mysql
1.起源 70年代左右  任务:Michael Widenius--Monty    公司:Tapio 供职   后创建Tcx Datakonsult 后更名 MySql(98年前后)
  伙伴 Allan  Larsson 业务: 外包,从事数据挖掘 数据量小/大的时候根据UniReg数据管理软件->SQL 两者不兼容
  David Axmark协同          流行软件mSQL的接口(可用SQL)与UniReg组合发布MySQL(1996)公布版本3.1.1(直接)
  Don't repeat youselt 市场上有的东西不要重复做
                       
2.成立根据地-->mysql 被oracal收购 要改成闭源软件从而创建 MariaDB

5.数据库的一些概念

DataBase Management System ->DBMS 数据库管理软件
Relational Database Management Systemn ->RDBMS 关系型数据库管理软件
   
数据库设计(Design)
   1)概念设计 ( 自己理解:将整个需求进行抽象 分清各个部分 把实体定义为概念名称)
      识别系统中的实体(名词)以及他们之间的关系; 识别业务规则 例 数据的之间的存取关系 工作流程业务流程
   2) 逻辑设计     对概念设计中的部分进行细化,对系统的中各个内容进行更加细致的设计  E-R图 Entity 实体关系图
      逻辑设计完成后将得到完整的数据库设计图
   3)数据库管理系统实现设计 mysql 或者oracal 语言:sql(结构化查询语言)
   4)物理设计 (数据分布,数据优化 ,集群、云服务等)

6.数据库建模

1.数据库命名规则:
开始菜单运行cmd(COmmand)->命令行窗口
mysql -uroot -p123456
命名:1.见名知意
     2.单数/复数  
     	注意规则保持一致 如Students Teachers Rooms
        student teacher room 随着项目进行,跟随项目标准规则 ,推荐表列行等使用单数
     3.缩写/全拼 缩写必须是别人都认可,不会对别人产生明显的阅读障碍,才可以缩写
                由于缩写的标准不一样,description desc desn descr 全拼的出现解决以上的所有矛盾,能不用缩写的就不用缩写

2.建模过程
	1.识别实体
    2.寻找能够标识、构成和描述了实体的东西【需找属性】
    3.需找实体之间的关系
      问题:如何找寻是实体中的属性?并且找准?
          1)标识符 (identifier) -最重要的属性
          2)值(数字)
          3)定位器
          4)描述性信息
          N) 关系属性
小结:呈现实体本身
         ->寻找实体->寻找实体之间的关系
         ->寻找属性 (属性描述实体 属性可能是后期附加上的,与实体并没什么的关系,而是被人强行加上的)90%属性发源于自身,10%人为强加上的
         
属性分类:
1)标识符属性 能够区分出实体中某个特定的实例(instance),有时需要多个属性组合作为唯一标识
标识符的选择:唯一且稳定
例:身份证唯一但不算稳定,我们人为做一个代理键当作主键替代身份证号,主键不能被人为的使用和更改,这样就不算安全
2)值
3)定位器(用于在现实或者在生活定位到某个地点或者人,起定位作用)
4)描述性信息

N)关系属性 -》外键 Foreign Key
 注意数据库设计:
 尽量不能有数据冗余,每个数据项都是不可再分的单元子项
 
数据合格性检验:(check检验)
     考虑:存储一个时间列的注意事项
     1、该值必须是一个日期值
     2、对该值大于18小于70
     3.必须小于当前日期
     4.保证存储的有效性    域 domain :有效值范围的集合
 
  总结的话:
  	1.必须考虑边界条件,其中包括一些规则和法律,以及需求要求
    2.数据类型

7.键的分类

键(key)唯一的、无歧义的标识实体
键!=标识符 并不是所有的标识符都可以作为键 例如身份证号
{
  主键 :标识中用来标识胜出的键  特点:唯一 且不能为空
  候选键:所有待选的标识符
  替代键:在候选键中失败的
}
问题:如何选择键?(伴侣)  
1.系统能够自助控制,不为人所控制
 键的组成越简单越好,越单一越好,比较好控制(个数),客户看不到最好
 标识中不代表具体内容,人为取名的键,我们称谓 代理键
 总结:能够控制的,不是客户关心的数据,就有很强的稳定性(和尚和梳子)  
2.键的类型?
 自然键(智能键);例如身份证号 前三个字 代表地方
 智能键:有多个自然键组合而成,包含某种信息,但是智能键可能被用光
 代理键  并没有实际作用,但是只起标识作用
 主键并不是都存在主键,但是我们都人为添加主键

8.元数据(元信息)

元数据(元信息):Metadata (数据字典) 存储下来用于描述数据的数据->数据本身也需要被描述
 例如 文件的 大小,几个表,几个属性,如创建时间,修改时间
 
客户所用的数据 我们称谓业务数据或业务数据
例如 XML schema 描述xml的数据  
mysql存储在Information_Schema.tables
--》用户数据或者业务数据我们是通过 -sql进行查询

元数据查询用什么呢?
都是数据,我们查询时是否要统一,codd 十二法则规定 ,用同等的SQL语言

!UNLL=UNKONW
MULL!=Null 是正确的
null与任何数据进行运算的时候仍为null
meta Anotation 数据描述、class用于描述类的类

9.SQL

sql :structure Query language
DDL:Date Define Language   数据定义语言
    CREATE DATABASE 数据库名;
    CREATE TABLE 表名;
    DROP DATABASE 数据库名; DROP TABLE 表名;
    ALTER
      修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
      添加字段 ALTER TABLE   表名 ADD 字段名(类型)
      修改字段 ALERT TABLE  表名        MODIFY 字段名列类型
               ALTER TABLE  表名  CHANGE 旧字段 新字段 列 属性
      删除字段  ALTER TABLE 表名 DROP 字段名
      增加主键 ALTER TABLE 表名 CONSTRAINT 主键名(pk_表名) PRIMARY KEY(id)
      删除主键 ALTER TABLE 表名 DROP PRIMARY KEY;
      增加外加 ALTER TABLE 表名  CONSTRAINT fk_表名_指向表 FORIGN KEY(sid) REFERANCES 表名(主键);
      删除外键 ALTER TABNLE 表名 DROP FORIGN KEY 外键名;
DML:DATE Manipulate language 数据操纵语言
    UPDATE...
    INSERT...
    DELETE...

DQL: 数据查询语言  Data Query Language
	SELECT...
DCL:数据控制语言 Data Control Language
	GRANT  REVOKE 撤销权利

10.数据库连接的整体过程演示

1.连接服务器的mysql  访问ip地址与端口号
	mysql -h192.168.1.119:3306 -uroot -p123456
2.服务器mysql 是否授权给
mysql 》grant all privileges on *.* to 'root'@ %

3。查看现有数据库:
show databases;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| first              |
| mysql              |
| performance_schema |
| second_db          |
| test               |
+--------------------+
6 rows in set (0.04 sec)
mysql> use information_schema;
mysql> show databases;
建表:
CREATE TABLE 表名
(
      列 的定义  列名 数据类型 【约束】 注释 如果出现多列中间用英文的恶斗号隔开
}

11.数据类型简述

1.数值类型
	整数类型                 字节数
        int(integer)		4
        bigint				8
        mediumint			3
        smallint			2
        tinyint				1
       
    小数类型(浮点类型)
    	非精确类型 m/g*g并不一定等于m
            float
            double
        精确类型
        	decimal
        	decimal(5,2) 5是精度 2是标度,精度标识保存值的主要位数
			标度表示小数点后面保存的位数 decimal(M) 等价与decimal(M,0)
	位类型:
   		常用于 性别
2.文本类型(字符类型)
    字符:Character(char)各种文字、数字、标点符号、图形、以及一些控制字符(并不显示出来 如F1)。。,回车,空格)
        CHAR(N) N代表字符而非字节
        VARCHAR(N)       比较两者的区别
        BLOB 存放二进制
        TEXT tinytext text mediumtext
3.日期类型和时间
        datetime 8个字节
        date     3个字节
        timestamp 4个字节
        year      1个字节
        time      3字节
        如果无特殊要求标准写为 yyyy-mm-dd hh:mm:ss
        强制类型转换 select cast('日期'  as DATETIME) as 列名
        在5.5之后支持显示微秒可以通过microsecond()函数提取微秒
        可以对微秒的个数进行精确,默认为零,最大为6
    type_name(fsp) type_name可以为time、datetime、timestamp
    函数也可以加上精确 如CURTIME(4)、sysdate(?)、utc_timestamp(?);
    timestamp:显示的结果是和datetime 是一样的,但是存储的结果是从1970年到现在的毫秒数
    UTC 世界同一时间
    timestamp可以设置一个默认值,但是datetime不可以
    更新表时,可以设置timestamp 的类型的列自动更新为当前时间  用CURRENT_TIMESTAMP的值为当前时间
    注:自动更新的触发,必须为改变了具体的行数;
    year
      year(2)时 00-69表示2000-2069 70-99表示1970
    time time 的存储范围不一定只是本天数据,可以前天。。
                    范围是-838:59:59-838:59:59
4.枚举类型
    ENUM 和set类型
    sex enum('male','female') 设置严格模式:就可对吸纳定内容限定,只能选用枚举类型
    建议使用 默认设置字符集为utf-8;
    
5.特殊的类型        
1)UNSIGNED 无符号数 常用在主键自动增长非负数
	unsigned的滥用例如1-2 的结果,会因为它的选择在不同语言和系统中不同
	在mysql 中对于unsigned的数的操作,其返回值都是unsigned;除非设置了模式
	如: mysql>set sql_mode='NO_UNSIGNED_SUBTRACTION'后才会出现负数
	建议:不要使用unsigned 用于操作的列
2)zerofill
	常与整形的int一类使用,如int(10) 如果没有zerofill是无意义的
	一旦使用了zerofill 系统默认启用unsigned属性
	zerofill只是对输出格式进行了规范,并没对数据在计算机中的存储进行改变
3)SQL_MODE
    默认为空,强烈建议启用严格模式
    对全局和当前回话参看sql模式
    select @@global.sql_mode\G;
    和select @@session.sql_mode\G;
    设置严格模式:
    set global sql_mode='strict_trans_tables';




12.Null空集

关系数据库,引入NULL后产生的问题
    1.null与任何数据进行拼接操作,其结果为NULL
    2.null与任何数据进行算数运算,其结果为NULL
    3.Null参与逻辑运算、或者比较运算的时候带来的 问题 ,其结果也为NULL或UNKNOW
    4.布尔运算其结果为NULL
		select null=null  结果为null
		select null and false 结果为0
		select null or false 结果为null
		select null or null 结果为null
		select null and true 结果为null
		取反
		select not null; 结果为null

13.系统函数

********与时间有关的函数:
    now() current_timestamp() sysdate() 显示系统时间
    sleep(2)使系统睡眠两秒但是只对sysdate()起作用
    now()和current_timestamp()返回的是执行语句的时间
*************时间加减函数
    date_add(now(),interval 1 day);interval时间间距 数值可正可负
    date_sub(。。。)
    默认对闰月问题的处理:闰月返回2月29 非的话返回2月28
    可以添加的单位可以使year  day month hour week
    minute second、 microsecond
******date_format 按照给事打印出时间字符显示
	select date_format(now(),'%y%m%d')

14.字符集和排序规则

字符集:
	在mysql 中默认的额字符集是latin1;
    show charset;//查看字符集
    简体中文 我们首选gbk或者gb2312
    gbk是gb2312 的超集;
    目前mysql不支持中文字符集gb18030(+少数名族语言) 因此 mysql中不能显示特定中文字体
    繁体中文 我们使用big5;
    兼容世界上所有语言的unicode utf-8可以看做unicode的一种形式
    unicode是一种字符编码,而不是一种字符集,是一种方案
    具体实现是utf8.utf16.utf32。ucs2实现的
    对于unicode强烈建议讲说的char字段设置成varchar类型,数据库会保存最大可能的字节数;
    可以在mysql 的配置文件中设置 character_set_sever=utf-8;
    要看当前使用的字符集可以使用status;
    mysql>status;
    mysql>set names 'gbk';//用来更改当前会话连接、当前回话的客户端的字符集
    可以在表的时候对表中的每一个类分别设置字符集编码格式
    类型NCHAR=> 在mysql中显示为 utf-8 编码下的char格式
    在sql sever中显示为ucs-2 下的char
    具体显示为 'a' char(10) character set utf-8 default null;
    
排序规则:
   1.每种字符集都有不同的排序规则
   2.通用命名规范 
       -ci 忽略大小写
       -cs  大小写敏感
       -bin 二进制比较
       可以通过show collation;或者iInformation--schema下的表collations查看
       更改当前回话的排序规则
       set names utf-8 collate utf_bin;区分大小写
       建立唯一索引时由于排序规则对大小写不敏感而导致错误
       CHAR(N)0-255 和VARCHAR(N)0-65535
       N表示字符长度
       char(N)采用右边填充的操作,直到指定的长度为N,在读取数据库的时候会自动将字符串删除
       
       通过char_length 函数 和length函数用来测量字符个数和字节个数
       utf-8中中文占两个字节
       VARCHAR存储时前缀长度列表加上实际存储的字符,占1-2个字符

15.注释

注释 列上加注释   
	COMMENT 't5表的主键'
表上加注释  COMMENT='加快看看'    两者是不同的
     create table 'tablename'(
         'id' tinyint(4) unsign zerofill default 12 comment '没有固定顺序',
         primary key('id') COMMENT后加主键
     );
     
mysql注释:
     1.#、、、、,。。。 单行注释
     2./* ''''''''''*/

16.搜索引擎

 MyISAM、InnoDB。。HEAP、BOB、CSV
     常见的两种比较
     myisam 不支持事务处理   不支持行锁定 不支持外键约束  支持全文索引 表空间较小 主要用于查
     innoDB 支持事务处理 支持行锁定 支持外键约束 不支持全文索引 较大越两倍 查询一般,主要用于增删改
     外键约束 :不得书写主键不存在的外键
     全文索引: 与大文本搜索有关
     ENGINE=INNoDB/MyISAM;
     mysql数据表以文件的方式存放在磁盘中
     包括表文件  ,数据文件,数据库选项文件。opt文件
     ibdata1数据文件 INNODB 的存储
     数据表文件以 .frm 存储,
     muyisam 还要加上.myd 数据文件 和.myi 索引文件 .frm 表结构定义文件
       
表字符集 :在建库建表的时候可以重新指定字符集
	CREATE DATABASE db CHARACTER SET gbk COLLATE gbk_chinese_ci;
建表的的时候
	create table tb( ******) DEFAULT  CHARSET=gbk;
 设置 dos窗体下字符集为gbk SET names gbk;
 如果无设定,可在my.ini中设置默认字符集 character-set-sever=utf-8;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值