MySql基础知识学习笔记

数据库学习笔记
==============================================================================================
数据库基础知识:
    概念:用来保存数据的容器
    功能:结构化保存数据
    组成:服务(提供了对物理库的增删改查)、物理库(保存到硬盘上的数据)
 
MySql安装:
    位置:安装位置有两个
              数据库服务位置:MySql Server
              数据库数据文件位置:Server data files
 
    选项:Choosing a Setup Type:第二个 Server only
          Type and Netwing:Config Type 第一个:Development Machine 会以最小文件存储
    配置:将MySql安装目录下的bin文件夹路径添加到path中
 
MySql存储结构:
    概念:在物理库中可以创建逻辑数据库
          库中由表组成
          表由记录组成
          记录由字段构成
 
MySql常用命令:
    语法:登录MySql:mysql -u root -p  //注意这里不输入密码,直接回车
          显示:show databases  //注意这里有个S
          ;表示一行sql语句的结束
         
 
SQL语句:
    分类:DDL(数据库定义语言)、DML(数据库操作语言)、DCL(数据库控制语言)
          DDL语句:影响数据结构
          DML语句:操作数据,对表中的数据进行增删改查
          DCL语句:数据库控制语言,如创建用户,管理用户权限,事务控制
 
SQL库操作语句:
    语法:创建一个库:
              create database 库名称[character set 码表名称 collate 字符校对集名称]
              这里字符校对集:决定数据库排序的
          删除一个库:
              drop database 数据库文件名;
          修改数据库:
              只能修改数据库的校对集和码表
              alter database 数据库名 character set utf8 collate utf8_bin; 这里为utf8
          选择数据库:
              use 想要选择使用的数据库名;
          查看当前选择数据库:
              select database();
          显示创建库的语句:
              show create database 数据库名;
 
MySql数据类型:
    分类:字符串类型、数字类型、时间日期类
    语法:数字类型
              TINYINT    1字节    byte[相当于Java中的数据类型]
              SMALLINT   2字节    short
              MEDIUMINT  3字节
              INT        4字节    int [一般都选择int型]
              BIGINT     8字节    long
              FLOAT      4字节    float
              DOUBLE     8字节    double
              DECIMAL    无精度损失
              注意:DOUBLE和DECIMAL区别?
                        DOUBLE类型在运算时会有精度缺失
                        DECIMAL解决精度丢失问题,底层使用字符串来保存计算数字
                        当单纯想表示小数属性时,使用DOUBLE
                        当需要频繁计算小数并且要求精度时使用DECIMAL
          字符串类型
              短字符串类型:CHAR/VARCHAR(最大长度255字节)
                  注意:CHAR和VARCHAR的区别?
                        CHAR定长字符串,VARCHAR表示可变长字符串
                            用例:例如同时指定长度为10,当存储abc时CHAR会存储为:'abc    '
                                  VARCHAR类型会存储为:abc
                        在实际的开发过程中,使用VARCHAR比较多,CHAR用在表示固定长度的枚举
              长字符串类型:TEXT/CLOB和BLOB
                  注意:当要保存的内容操作255字节时使用
                        TEXT保存文本,字符流,java中的writer字符流
                        CLOB其他数据库常有,但MySql中没有,相当于MySql的TEXT
                        BLOB保存字节,字节流,java中的stream字节流
                        在实际开发中一般用不到字节流
                        TEXT和BLOB的区别?
                            TEXT:只能存储字符数据
                            BLOB:可以存储字符和多媒体信息(图像、声音、图片等)
          日期时间类型
              日期:date  只记录日期  2015-01-14
              时间:time  只记录时间  11:36:25
              年份:year  只记录年份  2015
              时间日期:datetime  记录使劲日期 2015-01-04 11:36:25
                        timestamp 同上
                        datetime和timestamp区别?
                            这两种类型记录的数据是一模一样的
                            区别在于插入的时候,如果插入datatime类型时如果不为其赋值则为NULL
                            插入timestamp的时候,如果不为其赋值默认去插入的时间作为默认值
            
MySql表语句:
    创建:CREATE TABLE table_name
          (
              列名 列类型 约束/主键 auto_increment,
              列名 列类型 约束,
              列名 类类型 约束
          )[character set 字符集 collate 校对规则]
          注意:这里使用的是圆括号而不是花括号
          用例:create table t_user
                (
                    id int,
                    name varchar(20),
                    sal double(4,3),  //这里指定了字段的宽度和精度
                    birthday datetime,
                    hiredate timestamp
                );
     查看:查看当前数据库中有哪些表:show tables;
           查看表的结构:desc 表名;  //description缩写
     删除:drop table 表名;
     修改:alter table 表名;
           增加一列:alter table 表名 add 列名 列类型;
           修改一列:alter table 表名 modify 列名 列类型;  //此处为修改列的类型
                     alter table 表名 change 旧列 新列名 新类型;  //此处为修改列的名称
           删除一列:alter table 表名 drop 列名;
           修改表名:rename table 表名 to 新表名;
     约束:保证数据的完整性
           类别:非空约束(not null)、唯一约束(unique)、主键约束(primary key)
                     非空约束:在插入记录时,必须包含值
                     唯一约束:该列的内容在表中,值是唯一的
                     主键约束:非空+唯一 约束
                         语法:主键自增 auto_increment
                                   用例:id int primary key auto_increment,
                                   注意:主键自增的数据类型一定是数字型的
                                         主键自增是不可回退的     
                         注意:唯一约束可以给多个列加而主键约束只能有一个主键约束
                     用例:
                         CREATE TABLE t_suer2(
                             id INT PRIMARY KEY,
                             NAME VARCHAR(20) UNIQUE NOT NULL
                         )
           可视工具:SQLyog  //安装不运行,导入注册表激活,X64版本不稳定
 
DML语句学习:
    功能:增加语句
    语法:insert into 表名 [(列1,列2...)] values (值1,值2...)
    功能:删除语句
    语法:delete from 表名 [条件]
          注意:如果不指定条件则将会删除表中的所有的记录
          truncate table 表名;  //删除整张表
          delete和truncate方式删除整张表的区别:
              delete:是逻辑上的删除,硬盘文件并不被删除
              truncate:是物理删除,将整张表和表结构都删除掉
    功能:修改语句
    语法:update 表名 set 列1=值1,列2=值2,...[where 条件1,条件2]
          注意:如果是工资:可以 update employee set salary = salary+1000 where ...
    功能:查询语句
    语法:查询全部:select * from 表名[where 条件];
          查询指定:select 列1,列2,列3 from 表名[where 条件];  //这个效率高一些
          条件查询:=、!=、<>、<、<=、>、>=
                    BETWEEN ... AND ...
                        用例:where age between age > 20 and age < 40;
                              where age between 20 and 40; 
                    IN(SET)
                        注意:这里set表示集合
                        用例:select * from table_name sid in ("S_1001","S_1002","s_1003");
                    IS NULL
                        注意:NULL不等于NULL
                              与NULL进行运算结果也为NULL
                    IS NOT NULL
                    AND
                    OR
                    NOT
                        注意:可以使用()将多个的分条件整合成一个条件
          模糊查询:where 字段 like '表达式';
                        %  匹配任意字符
                        _  匹配单个字符
          去重复查:DISTINCT
                        用例:select distinct 列名 from 表名
          分组查询:简化查询语句
                        语法:group 需要分组的列;
                        功能:按给定的分组参数(参数中有重复的)查询 
                        用例:select * from 表名;
                        注意:可以使用HAVING查询应用后的分组,也即分组之后加条件
                              分组之前加条件和分组之后加条件:分组之前加条件效率更高
                              group by deptno HAVING SUM(sal)>9000;
          limit查询:MySql独有的
                        语法:limit参数1,参数2;
                        功能:从总记录的参数1指定索引开始查,查的条数为5条
                        用例:在分页当中用法,实际上这里起到了分页的作用 
 
          排序查询:将给定的记录排序显示
                        语法:order by 排序方式
                            升序:asc
                            降序:desc
 
MySql函数:
    语法:IFNULL(参数1,参数2);
    功能:判断所给指定参数是否为空,如果为不为空则返回给定的参数1,否则返回参数2
    概念:聚合函数
              语法:COUNT
              功能:统计指定的不为NULL的记录的行数并统计记录数
              用例:select COUNT(*) from emp;
                    select COUNT(列名) from emp;
              语法:MAX
              功能:查找给定记录中的最大值
              语法:MIN
              功能:查找给定记录中的最小值
              语法:SUM
              功能:查找给定记录中的总值
              用例:select sum(sal) + sum(comm) from emp;
                    select sum(sql + IFNULL(comm,0)) from emp;
              注意:SUM函数如果遇到NULL则会不让其参与运算
              语法:AVG
              功能:查找给定记录中的平均值
              注意:当一次使用多个聚合函数的时候可以使用 , 分隔:select MAX(cal),MIN(comm)
   
MySql别名:
    语法:select name as "别名"
          select name "别名"
          select name 别名
    功能:执行查询结果用别名显示
   
乱码问题:
    语法:set character_set_client=gbk

          set character_set_results=gbk

欢迎指出错误和不足之处

你可能感兴趣的