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;
原文地址:https://www.cnblogs.com/hsp1269/p/12601523.html