• MySQL笔记(一)


     

    一、MySQL概述

     1、什么是数据库 ?
     答:数据的仓库。

    2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
     答:他们均是一个软件,都有两个主要的功能:(mysql是用于管理文件的一个软件)

    • a. 将数据保存到文件或内存
    • b. 接收特定的命令,然后对文件进行相应的操作
    • PS:如果有了以上软件,无须自己再去创建文件和文件夹,而是直接传递 命令 给上述软件,让其来进行文件操作,他们统称为数据库管理系统(DBMS,Database Management System

    3、关系型数据库:mysql,SQL server, Oracle,db2,sqllite,access

      非关系型数据库:MongoDB,redis

    二、数据库操作

    可以认为对数据库进行操作就是对文件进行操作

    文件夹---->【数据库】

    文件------>【表】

    数据行------>【行】

    1、显示数据库

    show databases; (注意加s,以及分号)

    2、创建数据库

    # utf-8
    CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8;(创建文件,文件夹时后面都要加DEFAULT CHARSET utf8,否则不能插入中文。
     
    # gbk
    CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk;
    

    3、使用数据库

    USE db_name;(相当于进入文件夹)
    显示当前使用的数据库中所有表:SHOW TABLES;

    4、用户管理

    注意:在mysql command line client切换用户方法:mysql>system mysql -u 另一个用户名 -p;
    创建用户:
      create user
    '用户名'@'IP地址' identified by '密码';
      create user 'peng'@'192.168.1.1'identified by '123456';
      
    create user 'peng'@'192.168.1.%'identified by '123456';(%表示任意,即只要IP是192.168.1前缀的都可以登录)
      create user 'peng'@'%'identified by '123456';(同理表示在所有机器上都能登录)
    
    删除用户:
        drop user '用户名'@'IP地址';
    修改用户:
        rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
    修改密码:
        set password for '用户名'@'IP地址' = Password('新密码')
      
    PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

     5、授权管理

    (规定用户只能看哪个目录、或者只能看哪个目录下的哪个文件...)

    思考:权限是什么?针对于哪个目录下的哪个文件授权?给哪个用户授权?

    1 show grants for '用户'@'IP地址'                  -- 查看权限
    2 grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权         关键字:grant同意,准予,允许
    3 revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限    关键字:revoke:取消,废除;使无效
    4 grant select,insert,update on db1.t1 to 'peng'@'%';(能查能插能更新,而且对于任意用户)  on db1.t1-->表示只能看db1文件夹下的t1文件
    5 grant all privileges on db.t1 to 'peng'@'%';
    对于目标数据库以及内部其他:
                数据库名.*           数据库中的所有
                数据库名.表          指定数据库中的某张表
                数据库名.存储过程     指定数据库中的存储过程
                *.*                所有数据库
    对于数据库
                用户名@IP地址         用户只能在改IP下才能访问
                用户名@192.168.1.%   用户只能在改IP段下才能访问(通配符%表示任意)
                用户名@%             用户可以再任意IP下访问(默认IP地址为%)
    对于用户和IP
                grant all privileges on db1.tb1 TO '用户名'@'IP'
    
                grant select on db1.* TO '用户名'@'IP'
    
                grant select,insert on *.* TO '用户名'@'IP'
    
                revoke select on db1.tb1 from '用户名'@'IP'
    示例

    三、学习SQL语句规则

    操作文件夹

    显示:show databases;

    创建:Create database 数据库名 default charset utf8;

    删除:drop database 数据库名;

            DROP用于删除表,数据库等.
    
           TRUNCATE和DELETE都是删除表数据.
           但是TRUNCATE相当于初始化,比如如果有自增长ID,用TRUNCATE删除后,自增长Id会从 
           1开始,(truncat会释放表所占的空间)而delete则不会
            
    补充:mysql中drop、truncat、delete的用法区别

    操作文件

    显示:show tables;       

    创建:

           create table 表名(
              列名  类型  是否可以为空,
              列名  类型  是否可以为空
          )ENGINE=InnoDB DEFAULT CHARSET=utf8;

    示例:

    create table t1(id int,name char(10)) default charset=utf8; (第一列的名称是id,数字类型,第二列是name,字符串类型,只能有十个字符,如果超过10个就只取10个)
    create table t1(id int,name char(10))engine=innodb default charset=utf8;
    create table t3(id int auto_increment,name char(10))engine=innodb default charset=utf8;

    create table t1(
    列名 类型 null,
    列名 类型 not null, (是否可以为空,如果为空,这一列就可以不用插入数据)
    列名 类型 not null auto_increment primary key,(加auto_increment,这一列就会自增)要搭配primary key
    id int,
    name char(10)
    )engine=innodb default charset=utf8;
    # innodb 支持事务,原子性操作 会回滚
    # myisam myisam

    ★ 一个表里面只能有一个自增列,并且也只能有一个主键。并且auto_increment和primary key两者还有绑定关系,
    如果设置是auto_increment就必须是primary key,否则就报错。

    auto_increment 表示:自增
    primary key: 表示: 1、一个约束(约束的条件是不能重复且不能为空); 2、加速查找
    not null: 是否为空

    删除:

    清空表里面的内容:
                delete from t1; # 表示把这张表里面的内容清空,下次再插入,它那个自增id会根据原来的继续往后走。
                truncate table t1; # 下次再插入,它那个自增id会从1开始。
    
    删除表:
                drop table t1;
                    
                    数字:
                        tinyint
                        int
                        bigint
                        
    
                        FLOAT(不精准)
                            0.00000100000123000123001230123
                        DOUBLE(不精准)
                            0.00000000000000000000100000123000123001230123
                            0.00000100000123000000000000000
                        decimal(永远是精准的)推荐
                            0.1     decimal(总位数,小数点后面最多有的位数)
                        
    
    
                    字符串:
                        char(10)      速度快()  10表示字符不是表示字节
                            root      char不管写没写到10个位置都占了十个位置(没写的地方用空格占位)
                            root     
                        varchar(10)   节省空间
                            root      varchar如果没有写到10个位置,其他位置不会被占用
                        PS:以后,创建数据表把 定长 列往前放,相对来说会快一些,这也是SQL优化的手段
                            比如填手机号,把手机号的长度规定死了用char。
                            比如地址,用varchar
                            把varchar放在列的最后面,变长的都放最后面。
                            char和varchar最多包含255个字符。
    
                            ★char和varchar区别面试可能会问到
                        
    
                        text
                        
                        上传文件: 
                            文件存硬盘
                            db(数据库)存路径
    
                    时间类型
                        DATETIME(最常用)其他不一一列举
                    
    
    
                    enum 枚举  # 选中之后只能拿它其中的一个    选项固定并且不经常修改的时候用枚举
                     示例:
                    CREATE TABLE shirts (
                        name VARCHAR(40),
                        size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                    );
                    INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
    
    
    
                    set  集合类型    (了解即可) set是去里面找任意组合
                    示例:
                    CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));  # 只能填abcd的任意组合,不一定四个都要用上
                    INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
                    
                    
                create table t1(
                    id int signed not null auto_increment primary key, # 以后自增列按这个方式写就行,它是作为这一张表里面每一行数据的唯一表示。
                    num decimal(10,5),   #  decimal(总位数,小数点后面最多有的位数)
                    name char(10)
                )engine=innodb default charset=utf8;
            
    补充:数据类型

    操作文件中的内容

    增删改查

    插入数据:
    insert into t1(id,name) values(1,'alex'); #(往表里面插into)
    删除:
    delete from t1 where id<6  # (delete from t1是清空整张表,要指定地点删除用where)
    修改:(更新)
    update t1 set age=18;    # 把t1表里面所有age列都等于18
    update t1 set age=18 where age=17;    # 就把age是17的改成18
    查看数据:
    select * from t1;

    外键

    外键:(存在两张表之间的关系)    节省空间    、约束  外键一对多
        
            create table userinfo(                    
                uid bigint auto_increment primary key,
                name varchar(32),
                department_id int,     # 外键加在第一张表,因为第一张才有department_id,写这个id才依赖另外一张表的id
                xx_id int,
                constraint fk_user_depar foreign key (department_id) references department(id),  # constraint约束;限制
                constraint fk_xxx foreign key (xx_id) references XX(id)  # 还想添加约束就再写一遍,可以有1,2,3,4...个约束,逗号隔开
            )engine=innodb default charset=utf8;
            
            create table department(
                id bigint auto_increment primary key,
                title char(15)
            )engine=innodb default charset=utf8;
  • 相关阅读:
    hadoop搭建好,启动服务后,无法从web界面访问50070
    CentOS7设置静态IP
    Hadoop完全分布式环境搭建(四)——基于Ubuntu16.04安装和配置Hadoop大数据环境
    搭建大数据hadoop完全分布式环境遇到的坑
    我搭建大数据Hadoop完全分布式环境遇到的坑---hadoop: command not found
    Hadoop完全分别式环境搭建
    Hadoop完全分布式环境搭建(二)——基于Ubuntu16.04设置免密登录
    学生身体体质管理信息系统
    生活细笔——(摘自一心理)
    Javaweb课后习题——设计表单,制作读者选购图书的界面,当读者选中一本图书后,单击“确定”按钮,永“jsp:forward page=”语句将页面跳转到介绍该图书信息页面。
  • 原文地址:https://www.cnblogs.com/hsp1269/p/12601523.html
Copyright © 2020-2023  润新知