美文网首页
MySQL学习笔记

MySQL学习笔记

作者: 奋斗的小鸟GO | 来源:发表于2019-03-12 14:33 被阅读0次

    继上一篇分享了Oracle学习笔记,现在继续分享MySQL学习笔记,希望对你有所帮助。


    数据库系统
    DataBase System = 数据库管理系统(DBMS , DataBase Management System) + 数据库(DataBase) + 管理员
    DBS = DBMS + DB
    定义:对大量信息进行管理的高效解决方案,按照数据结构来组织,存储和管理数据的库。
    关系型数据库系统:建立在关系模型上的数据库系统。
    关系模型:
    当将日常生活中的实体(学生),和实体的属性(学号,姓名)保存到数据中时,应该如何处理该实体结构。
    1.数据结构可以规定,同类数据,结构一致。就是一个二维的表格。
    2.数据之间的关系可以设置。

    Nosql
    Not only sql
    非关系型数据库系统

    关系型数据库的典型概念:
    数据库DataBase:存储数据的仓库
    表table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式
    行&列:行用于记录数据,列用于规定数据格式
    记录:行内的数据
    字段:数据的某个列

    SQL(结构化查询语言 Structured Query Language):数据库管理系统,用来管理数据的语言。
    MySQL
    数据库(数据+管理)+谁能向数据库系统发出如何管理的命令。
    MySQL是基于C/S(客户端/服务端 client/server)架构
    管理MySQL服务端程序
    1.通过windows提供的服务管理完成
    命令行形式管理windows的MySQL服务:
    Net start 服务名
    Net stop 服务名
    windows下,我们在 cmd 中重启 MySQL 时,出现了“发生系统错误 5,拒绝访问”的错误提示,
    这个错误是由于我们操作 cmd 的权限不足造成的,解决问题方法如下:
    在开始菜单的搜索栏输入cmd,然后右键单击搜索结果,选择以管理员身份运行即可!
    2.直接使用mysqld来运行服务
    mysqld可以正常运行,就可以使用客户端来访问操作了。
    利用mysql.exe来操作
    先连接认证:mysql -hlocalhost -P3306 -uroot -p -h 地址 -P端口 -u 用户名 -p 密码

    数据库操作:create database db_name [数据库选项];
    标识符(数据库名)命名规则:
    大小写取决于当前操作系统。(认为是区分的)
    见名知意。推荐使用下划线方式。
    标识符的字符:使用任意字符,数字,符号,甚至中文。但是一些特殊的组合,例如纯数字组合,特殊符号,包括mysql的内部关键字,应该使用标识符限定符
    来包裹。
    限定符:反引号
    数据查询:
    查看当前存在的数据库:show databases;
    注意:并不是只有用户可以创建数据库,mysql内部维护自己数据库。
    查看数据的创建语句:show create database db_name;
    数据库删除:drop database db_name; 不可逆的,慎用
    修改数据库信息:alter database db_name [修改指令]
    指令:数据库属性的修改

    数据库是表的容器,表,必须属于某个数据库,可以通过.语法(库.表 database.table),指明数据表所属的数据库,
    进行表操作时,都会指定当前的默认数据库 use db_name;只是设定了默认数据库,不会影响操作其他数据库。
    创建表:create table tbl_name(列结构) [表选项];
    先分析,需要保存的实体数据,拥有哪些属性,这些属性应该如何保存。
    例如:班级的信息
    班级班号,班级开班日期
    列定义:
    列名 列的数据类型 [列的属性(约束)]

    create table jdbc.sck_class (
    class_no varchar(20),
    date_start date
    );
    

    查看:
    有哪些表 show tables [like 'pattern'];
    表创建信息 show create table tbl_name;
    表结构(描述表结构) describe tbl_name;
    删除表 drop table [if exists] tbl_name;
    修改表:
    修改表名 rename table old_tbl_name to new_table_name; 支持同时修改多个表,
    支持跨数据库重命名。 rename table old_tbl_name to database.new_table_name;
    修改列定义
    增加一个新列 add新列的定义

    alter table td_s_param add  param3  varchar(6);
    

    修改一个列的定义 modify

    删除一个列 drop

     alter table td_s_param drop param3;
    

    重命名一个列 change

     alter table td_s_param change param3 tag int;
    

    修改表结构,上面的是子命令,上级是,

    alter table tbl_name [add|modify|drop|change]
    

    修改表选项 alter table tbl_name 新的表选项;

     alter table td_s_param character set gbk;
    

    数据操作
    创建数据(插入数据) 获得数据(查询数据) 删除数据 修改数据
    创建数据:insert into tbl_name(字段列表) values(值列表);
    获得数据:select 字段列表 from 表名 where 条件;
    删除数据:delete from 表名 where 条件;
    删除需要在逻辑上严格给条件,否则容易造成数据误操作,导致损失。语法上可以没有where。可以:如果删除所有数据,使用where 1。
    修改数据:update 表名 set 字段=新值,... where 条件;

    校对规则:每一套编码字符集都有与之对应的校对规则。
    什么是校对规则?在当前编码下,字符直接的比较顺序是什么。
    每个字符集都支持不定数量的校对规则,可以通过如下指令:show collation like[pattern];
    可以看到:字符集地区名比较规则(ci,cs,bin)不区分大小写,区分大小写,字节比较
    在设置字符集时,可以设置当前字符集所采用的校对规则。如果不设置校对规则,那么每个字符集都有一个默认的校对规则。

    数值型-整数类型

    类型      字节  最小值(有符号/无符号)                   最大值(有符号/无符号)
    TINYINT   1          -128/0                                                 127/255
    SMALLINT    2             -32768/0                                       32767/65535
    MEDIUMINT   3           -8388608/0                                8388607/16777215
    INT/INTEGE  4         -2147483648/0                               2147483647/4294967295
    BIGINT    8     -9223372036854775808/0         9223372036854775807/18446744073709551615
    
    create table tbl_int(
    a tinyint unsigned,
    b tinyint
    );
    

    是否有符号:
    可在定义时,使用unsigned标识,没有符号,不写就认为有符号。
    定义显示宽度:通过规定数据的显示宽度,达到统一显示的目的。类型(M)M表示显示的最小宽度是多少(不规定存储)。
    需要使用前导零填充达到目的。称之为zerofill
    alter table tbl_int add c tinyint(2) zerofill;

    数值型-小数类型
    浮点:小数位数可以变化。

    类型     存储空间(字节)                            最小值(理论)                                             最大值(理论)
    FLOAT         4                       -3.402823466E+38  3.402823466E+38                            默认精度位数为6位左右
    DOUBLE        8          -1.7976931348623157E+308   1.7976931348623157E+308           默认为16左右
    DECIMAL    变长,大致是每9个数字,采用4个字节存储。整数和分数分开计算   M,最大是65    D,最大是30    默认是
    10,2        -(65个9) (+65个9)
    
    create table num_2(
    a float(5,2),
    b double(8,3)
    );
    

    支持,控制数值的范围。
    type(M,D) M表示所有的数值位数(不包括小数点和符号),D表示允许的小数位数。
    定点数:decimal(M,D)

    日期时间类型

    类型                   显示格式                        取值                       存储空间            零值
    DATETIME    YYYY-MM-DD HH:MM:SS     '1000-01-01 00:00:00'到'9999-12-31 23:59:59'      8     0000-00-00 00:00:00
    TIMESTAMP   YYYY-MM-DD HH:MM:SS     '1970-01-01 00:00:00'到'2038-01-19 03:14:07'      4    0000-00-00 00:00:00            
    DATE             YYYY-MM-DD                       '1000-01-01'到'9999-12-31'      3                 0000-00-00
    TIME              HH:MM:SS                          ' -838:59:59'到'838:59:59'        3                   00:00:00
    YEAR              YYYY                                  '1901'到'2155'             1                    0000
    

    字符串类型
    char(M) 固定长度
    varchar(M) 可变长度
    M表示允许的字符串长度,M在varchar的表示,是允许的最大长度。char内M表示严格限定的长度。
    M表示的是字符数,而不是字节数。但是,总的长度的使用是按照字节计算的。
    注意:字段的最大长度,除了类型本身限制之外,记录的总长度也有限制。
    真实的varchar长度:总长度65535
    varchar特点,当类型数据超过255时,采用2个字节表示长度,整条记录,需要额外的一个字节,用于保存当前字段的null值。除非所有的字段都不为null,
    这个字节才可以忽略。一个记录,无论有多少个字段存在null,都是使用统一的一个字节来表示,而不是每一个字段一个字节。

    列属性
    是否为空:规定一个字段的值,是否可以是null。 null | not null
    默认值属性:default value来声明。默认值,在没有为该字段设置值时启用,而且默认值的设置需要使用固定值。
    主键:PK,primary key。可以唯一标识某条记录的字段或者是字段的集合,就是主键。
    主键可以是真实实体的属性,但是,常用的好的解决方案:利用一个与实体不相关的属性,作为唯一标识。
    主键与业务逻辑没有任何关系,只用来标识记录。
    设置主键的语法:primary key完成
    两种方案:
    1.字段上设置,主键字段在插入时不能为空,或者冲突。
    2.在定义完字段后,可以定义。可以定义多列主键(组合主键)。一个主键包含多个字段
    mysql规定只能存在一个主键
    自动增长:为每条记录提供一个唯一的标识,每次插入记录时,将某个字段的值自动加1,使用auto_increment标识。
    需要整型,还需要索引。在插入数据时,可以选择性插入null,或者不插入。
    自动增长的初始值,是可以设置的,默认为1。通过修改标的选项:auto_increment n
    是否可以手动插入该列的值?可以,但是如果是主键的话,不能重复。
    该列是否可以更新?可以。

    实体
    1:1
    设计:
    两个实体表内,存在相同的主键字码。
    如果记录的主键值等于另一个关系表内记录的主键值,则两条记录1:1对应。
    1:n 一对多
    一个实体,对应多个其他实体。例如:一个班级对应多个学生
    设计:
    在多的那端,增加一个字段,用于指向该实体所属的另外实体的标识。
    m:n多对多
    设计:
    典型的:利用一个中间表,表示实体之间的对应关系。中间表的每个记录,表示一个关系。

    外键
    概念:如果某个实体(student)的某个字段(student:class_id),指向(引用)另一个实体(class)的主键(class:class_id),就称student实体的class_id
    是外键。
    被指向的实体,称之为主实体(主表),也叫父实体(父表)。
    负责指向的实体,称之为从实体(从表),也叫子实体(字表)。
    作用:用于约束处于关系内的实体。
    增加子表记录时,是否有与之对应的父表记录。
    在删除或者更新主表记录时,从表应该如何处理相关的记录。
    定义一个外键:在从表上增加一个字段,指向主表的主键,使用关键字foreign key
    foreign key (外键字段) references 主表名 (关联字段) [主表记录删除时的动作][主表记录更新时的动作]
    设置级联操作:在主表数据发生改变时,与之关联的从表数据应该如何处理
    主表更新:
    主表删除:
    使用关键字:
    on update
    on delete来标识。
    允许的级联操作:
    cascade:关联操作,如果主表被更新或删除,从表也会至执行相应的操作。
    set null:设置为null,表示从表不指向任何主表记录。
    restrict:拒绝主表的相关操作。

    存储引擎
    子查询

    1.比较大小函数SIGN
    sign(x)或者Sign(x)叫做符号函数,其功能是取某个数的符号(正或负):
    当x>0,sign(x)=1;
    当x=0,sign(x)=0;
    当x<0, sign(x)=-1;
    x可以是函数或计算表达式

    2.流程控制函数DECODE
    在逻辑编程中,经常用到If – Then –Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:
    DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
    Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 这里的if、then及else 都可以是函数或计算表达式。

    1. 内连接很简单
    select A.*, B.* from A,B where A.id = B.id
    select A.*, B.* from A inner join B on A.id = B.id
    

    以上两句是完全等价的

    1. 左外连接
    select * from emp a left join dept d on a.deptno=d.deptno
    select * from emp a,dept d where a.deptno=d.deptno(+)
    

    以上两句是完全等价的

    1. 右外连接
    select * from emp a right join dept d on a.deptno=d.deptno
    select * from emp a,dept d where a.deptno(+)=d.deptno
    

    以上两句是完全等价的
    也就是说只要把语句中的表换个位置,右外和左外就可以起到同样的功能
    外连接:
    除了显示匹配相等连接条件的数据外,还可以显示某一个表中无法匹配相等连接条件的记录!

    1. 左条件(+) = 右条件
      左条件所在的表必须严格进行相等连接条件的匹配,而右条件所在的表除了匹配相等连接条件外,还可以显 示无法匹配连接条件的数据!
      也称为右外连接.
      可以用下 列语句取代:
      SELECT...FROM 表1 RIGHT OUTER JOIN 表2 ON 条件;
    2. 左条件 = 右条件(+)
      右条件所在的表必须严格进行相等连接条件的匹配,而左条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据!
      也 称为左外连接.
      可以用下列语句取代:
      SELECT...FROM 表1 LEFT OUTER JOIN 表2 ON 条件;

    limit是mysql的语法
    select * from table limit m,n
    其中m是指记录开始的index,从0开始,表示第一条记录
    n是指从第m+1条开始,取n条。
    select * from tablename limit 2,4
    即取出第3条至第6条,4条记录


    I LOVE STUDY.jpg

    相关文章

      网友评论

          本文标题:MySQL学习笔记

          本文链接:https://www.haomeiwen.com/subject/ktzgpqtx.html