JAVA高级工程师课程笔记整理——(七)Mysql

(七)Mysql
    登录mysql:
        mysql -uroot -p
    启动mysql服务:
        net start mysql
    DBMS---数据库管理系统
    关系型数据库
    非关系型数据库:
        NoSql
    mysql默认端口是:3306
    查看所有数据库:
        show databases
数据库语句:
    创建数据库:
        create database 数据库名;
    使用数据库:
        use  数据库名
    查看数据库下所有的表
        show tables
    删除数据库:
         drop database 数据库名
    sql语句:
        数据定义语言(DDL):
            CREATE、DROP、ALTER
        数据操作语言(DML):
            insert,delete,update
        数据查询语言(DQL):
            select
        数据控制语言(DCL)
            GRANT、COMMIT、ROLLBACK
    创建表:
        create table `subject`(
            `SubjectNo` int(11) PRIMARY KEY,
            `SubjectName` varchar(50),
            `ClassHour` int(4),
            `GradeID` int(4)
        );
    mysql数据库数据类型:
        数值类型:
            tinyint  非常小的整型数据
            int        标准整数
            double   双精度小数
        字符串类型:
            char  ----固定长度的字符串
            varchar ---可变长度字符串
            text----文本串
        日期和时间型数值类型
            datetime   --- yyyy-MM-dd HH:mm:ss
        NULL值:
            没有值
    字段属性:
        UNSIGNED  无符号
        ZEROFILL  0填充
        AUTO_INCREMENT  自动增长
            自动增长的,每添加一条数据,自动在上一个记录数上加1
            通常用于设置主键,且为整数类型
            可定义起始值和步长
        Null和NOT NULL
            设置字段可以为空或不能为空
        DEFAULT
            设置字段的默认值
    mysql数据库语句注释:
        单行注释:#
        多行注释: /*  */
    数据表的类型:
        InnoDB
            支持事务,不支持全文索引,支持外键约束
        MyISAM
            不支持事务,支持全文索引,不支持外键约束
        使用MyISAM: 节约空间及相应速度
        使用InnoDB: 安全性,事务处理及多用户操作数据表
    
    修改表:
        修改表名:
        alter table 旧表名 RENAME AS 新表名;
        #添加字段 ctrl+shift+r
        alter table stu add wechat VARCHAR(20)
        #修改字段
        alter table stu modify wechat VARCHAR(30)
        #删除字段:
        alter table stu drop wechat
    查看创建表的sql语句:
        show create table 表名
    查看表的所有字段:
        desc 表名
    删除表:
    Drop table  表名
    
    增删改查---CRUD
    DML:
        添加数据  insert
            insert into 表名(字段1,字段2...)
            values (值1,值2...);
        更新数据  update
            update 表名 set 字段1=值1,字段2=值2
            [where 条件]
        删除数据  delete
            delete from 表名 [where  条件]
    清空表数据:
        #删除所有数据
            DELETE from student
        #清空表
            TRUNCATE student
            用于完全清空表数据,
            但表结构、索引、约束等不变
DQL语句:
    SELECT VERSION() 查询数据库版本
    SELECT 3*4
    查询一张表里的所有数据:
        select * from 表名
        *代表所有字段
    取别名  AS
        字段取别名和表名取别名
        as可以省略,但最好不要省略
    DISTINCT 去重复查询
    ALL是默认的
    NULL和空字符
    联合查询:
        内连接:
            等值和非等值连接
            自身连接查询
            inner join 简写 join
        外连接:
            left join
            right join
    inner join
    on接条件
    left join
        优先查询左边的表的所有记录
        即便在右边的表没有匹配的行
    right join
        优先查询右边表的所有记录
        即便在左边的表没有匹配的行
    自身连接查询:
    排序
        order by
            默认是升序ASC
            降序  DESC
    分页查询:
        limit 0,5
        limit 5,5
    子查询:
        
    mysql常用函数
        count()   统计记录数  
        count(*)  不建议放*,效率低
        count(1)
    分组查询
        group by
        having 对分组后条件筛选
        having可以脱离group by单独使用吗?
        mysql中可以
    #查询所有男学生
    SELECT * FROM student AS s HAVING s.Sex=1
    sql优化:
    sql条件执行是从右往左执行
    筛选记录越多的条件放后面
    比如100名学生,男女各占50%,姓张的人
    一共有6个:
    select * from student as s
    where s.gender='男'
            and s.name like '张%' (这个效率高)
    select * from student as s
    where s.name like '张%'
            and s.gender='男'

mysql索引
    主键索引
        给字段添加主键,主键就是主键索引
        CREATE TABLE student(
            sid int(11),
            sname VARCHAR(30) not NULL,
            PRIMARY KEY(sid)
        );
        最常见的索引类型
        确保数据记录的唯一性
        确定特定数据记录在数据库中的位置
    唯一索引  unique key
        CREATE TABLE student(
            sid int(11) PRIMARY KEY,
            sname VARCHAR(30) not null,
            idcard VARCHAR(18),
            UNIQUE KEY uq_idcard (idcard)
        );
    常规索引 index
        提高查询效率
        不宜添加太多常规索引,
        影响数据的插入、删除和修改操作
        #添加一般索引
        alter TABLE student
        ADD INDEX index_cid (cid);
    全文索引
        只能用于MyISAM类型的数据表
        只能用于CHAR、VARCHAR、TEXT数据列类型
        适合大型数据集
        ALTER TABLE student ENGINE=MyISAM;
        ALTER TABLE student ADD FULLTEXT(StudentName);
        
        #查看所有索引
        SHOW INDEX FROM student
        #删除索引
        ALTER TABLE 表名 DROP INDEX 索引名;
    
    添加规则:
        在WHERE,ORDER BY 子句中经常使用的字段
        字段的值是多个(例如性别字段则不适合)
        字段内容不是经常变化的
        经常变化的字段,添加索引反而降低性能
        不宜过多添加索引
        每添加一条索引都会占用磁盘空间

备份和恢复数据库
    # 备份myschool数据库如:
    > mysqldump -uroot -p  myschool>d:/myschool.sql
      EnterPassword: *****
      -c   insert语句有字段
      -t   忽略创建表的语句
      -d   只创建表,没有insert语句    
    导入数据库
        mysql -uroot -p myschool       在mysql命令行中:
        source c:/tm4.sql  

事务管理
    MySQL事务处理只支持InnoDB和BDB数据表类型
    事务的原则:
        原子性
        隔离性
        持久性
        一致性
    mysql默认开启事务自动提交
    使用事务时应先关闭自动提交
    关闭事务自动提交:
        set autocommit = 0;
    开启事务
        start transaction
    事务提交:
        COMMIT
    事务回滚:
        ROLLBACK
        
    
   

你可能感兴趣的:(Mysql)