美文网首页
mysql 学习笔记1 基础

mysql 学习笔记1 基础

作者: Dargonfly429 | 来源:发表于2017-06-03 14:03 被阅读0次

    参考
    MySQL 5.5 Reference Manual
    MySQL 教程 | 菜鸟教程


    知识点大纲

    • 1 基本知识
      • 1.1概念
      • 1.2安装与连接
      • 1.3客户端
      • 1.4数据类型
    • 2 DDL
      • 2.1库操作
      • 2.2表操作
      • 2.3列操作
    • 3 DML
      • 增删改
    • 4 DCL
      • 权限
    • 5 高级(优化等等)

    1 基本知识

    1.png

    1.1概念

    1.2安装与连接

    1.3客户端

    1.4数据类型

    因为mysql主要业务就是处理数据,所以他对数据处理更加细致,数据的分类上就很细,大致分为三类:

    • 数值型
    • 字符串型
    • 时间日期型
      数值型又细分为整型 浮点型和定点型,下面细说

    数据类型>数值型>整型

    |类型名|取值范围(有符号或无符号)|占用存储(字节)|范围对应感觉|
    |-|-|-|
    |TINYINT| -128~127 或0~2^8-1 | 1|比如存年龄|
    |SMALLINT |-32768~32767或0~2^16-1 |2|正负3万,一般商品ID够了|
    |MEDIUMINT |-223~223-1或0~2^24-1 |3|正负八百万|
    |INT| -231~231-1或0~2^32-1 |4|正负20亿|
    |BIGINT |-263~263-1或0~2^64-1 |8|正负十万万亿...|
    一个字节byte=8位bit
    有没有符号用unsigned来表明,
    整型还有zerofill和M属性
    M的意思是表明数字最长有几位,配合zerofill用会将不足的位数用0填充,如果不写zerofill,其实M起不到任何作用,没有意义
    此此外,写了zerofill那就是自动unsigned的。

    数据类型>数值型>定点与浮点

    |类型名 |占用存储(字节)|范围|
    |-|-|
    |FLOAT(M,D)| 4|正负3.4E+38|
    |DOUBLE(M,D)| 8|范围更大,不必去记忆了|
    |DECIMAL(M, D) |M+2 (ver >3.23)||
    M表示小数点前后总位数,D表示小数点后面位数,而且不同于int的M值在zerofill时才有用,浮点数的M和D是真的有用,就是这个范围了
    为什么float和int都是4字节,范围不一样呢
    float/double , 有精度损失
    decimal 定点型,更精确
    定点型,是将整数部分和小数部分用分别用数字来存储的,所以定点型更精确,看如下的例子

    folat和decimal.png

    在为列选择了使用某种数值类型时,除了要考虑数据的类型外,还应该注意所要表示的值的范围和存储需求,只需选择能覆盖要取值的范围的最小类型即可。

    数据类型>字符串型

    类型名 备注
    CHAR(M) 定长字符串,M<255字符,M表示字符数,不够M的会用空格填充
    VARCHAR(M) 变长字符串,M<(65535转换成对应的字符数)
    TEXT(M) M<2^16-1=65535字符 与varchar相反,很大的文本,慢,能用varchar就用varchar
    ENUM('value1','value2',...) 枚举:列只能赋值为某个枚举成员或NULL
    SET('value1','value2',...) 集合:列可以赋值为多个(最多64个)集合成员或NULL
    BLOB BLOB(2^16-1)音频图像等
    TINYBLOB BLOB(2^8-1)
    MEDIUMBLOB BLOB(2^24-1)
    LONGBLOB BLOB(2^32-1)
    TINYTEXT TEXT(2^8-1)
    MEDIUMTEXT TEXT(2^24-1)
    LONGTEXT TEXT(2^32-1)

    表格中,BLOB是一个能保存可变数量的数据的二进制的大对象。在某种意义上,串实际是一种非常“通用”类型,因为可用它们来表示任意值,不仅仅是字符串。例如,可用串类型来存储二进制数据,如图像、视频或音频。

    char和varchard的选择?
    字数少于20的话 直接用char,速度快
    char和varchar的区别很有意思,有时单独开一篇

    数据类型>日期和时间列类型

    |类型名 |范围|含义|
    |-|-|
    |DATE|1000-01-01
    到9999-12-31|日期, 'YYYY-MM-DD'
    年份写两位的话0-69是用用20补全,70-99是用19补全|
    |TIME|-838:59:59
    到838:59:59|时间, 'HH:MM:SS'|
    |DATETIME||时间和时间组合, 'YYYY-MM-DD HH:MM:SS|
    |TIMESTAMP||时间戳,是1970-01-01到当前的秒数
    timestamp不填的话会自动插入和更新|
    所有时间日期类型数据要加引号插入

    举例,生成一个日期和时间表,并插入2个元素:

    CREATE TABLE my_test
    (
        id INT,
        ts TIMESTAMP
    )
    INSERT my_test VALUES(1,20010101000000)
    INSERT my_test(id) VALUES(2);
     
    SELECT * from my_test
     
    +------+----------------+
    |  id  |     ts         |
    +------+----------------+
    |  1   | 20010101000000 |
    |  2   | 20010113165713 |
    +------+----------------+
    

    转意序列列表

    符号 含义
    \0 ASCII 0(NUL)字符
    \r 回车
    \b 退格
    ' 单引号
    % 百分号
    \n 换行
    \t 定位符
    反斜杠
    " 双引号
    _ 下划线

    2 DDL操作


    2.1库操作 增删改查

    2.png

    |序号|操作 |语法|备注|
    |-|-|-|
    |1|创建库| create database dbname;|数据库名字可用是数字,字母,下划线和美元符号组成,不能用数字开头。建议都小写。|
    |2|查看库所有库| show databases;||
    |3|选库| use dbname;||
    |4|删除库|drop databse dbname;| 谨慎操作!|
    |5|查看当前库 | mysql> SELECT database();||
    |6|查看当前状态 | mysql> status;||
    |7|改root密码| mysql> SET PASSWORD FOR 'root'@'localhost' = 'newpass';|-|


    2.2表操作

    3.png
    2.2.1创建表

    全面语法

    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
        (create_definition,...)
        [table_options]
        [partition_options]
    
    create_definition:
        col_name column_definition
      | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
          [index_option] ...
      | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
          [index_option] ...
      | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
          [index_name] [index_type] (index_col_name,...)
          [index_option] ...
      | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
          [index_option] ...
      | [CONSTRAINT [symbol]] FOREIGN KEY
          [index_name] (index_col_name,...) reference_definition
      | CHECK (expr)
    
    column_definition:
        data_type [NOT NULL | NULL] [DEFAULT default_value]
          [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
          [COMMENT 'string']
          [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
          [STORAGE {DISK|MEMORY|DEFAULT}]
          [reference_definition]
    
    重要参数 说明
    type 字段类型 就是列类型,参见数据类型
    not null 如果不写,默认插入null,如果声明了not null,那就不允许空着,或者设置default
    default 设定默认值
    auoto_increment 设定自动编号,每个表只能有一个自增列,并且必须被索引
    primary key 设定主键,主键是不能重复的

    实例

    mysql> create table goods2 (
        -> goods_id int(10) not null auto_increment primary key,
      ->goods_num int(10) not null default 0);
    Query OK, 0 rows affected (0.02 sec)
    

    注意列名一律小写,因为null查询不方便所以所有列都要声明not null

    2.2.2删除表

    drop table tbl_name;

    2.2.3查看表

    查看本数据库的所有表
    show tables;
    查看某一个表的列
    语法SHOW COLUMNS Syntax

    SHOW [FULL] {COLUMNS | FIELDS} {FROM | IN} tbl_name [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
    

    实例

    show columns from shop.goods2;
    
    show columns

    或者用describe table语法


    desc table
    2.2.4 改表名

    实例(rename)

    rename table goods2 to shangpin;
    
    shangpin

    2.3 列操作 修改列ALTER TABLE Syntax(添加 删除 修改列)

    4.png

    全面语法

    ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
        [alter_specification [, alter_specification] ...]
        [partition_options]
    
    alter_specification:
        table_options
      | ADD [COLUMN] col_name column_definition
            [FIRST | AFTER col_name ]
      | ADD [COLUMN] (col_name column_definition,...)
      | ADD {INDEX|KEY} [index_name]
            [index_type] (index_col_name,...) [index_option] ...
      | ADD [CONSTRAINT [symbol]] PRIMARY KEY
            [index_type] (index_col_name,...) [index_option] ...
      | ADD [CONSTRAINT [symbol]]
            UNIQUE [INDEX|KEY] [index_name]
            [index_type] (index_col_name,...) [index_option] ...
      | ADD FULLTEXT [INDEX|KEY] [index_name]
            (index_col_name,...) [index_option] ...
      | ADD SPATIAL [INDEX|KEY] [index_name]
            (index_col_name,...) [index_option] ...
      | ADD [CONSTRAINT [symbol]]
            FOREIGN KEY [index_name] (index_col_name,...)
            reference_definition
      | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
      | CHANGE [COLUMN] old_col_name new_col_name column_definition
            [FIRST|AFTER col_name]
      | MODIFY [COLUMN] col_name column_definition
            [FIRST | AFTER col_name]
      | DROP [COLUMN] col_name
      | DROP PRIMARY KEY
      | DROP {INDEX|KEY} index_name
      | DROP FOREIGN KEY fk_symbol
      | DISABLE KEYS
      | ENABLE KEYS
      | RENAME [TO|AS] new_tbl_name
      | ORDER BY col_name [, col_name] ...
      | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
      | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
      | DISCARD TABLESPACE
      | IMPORT TABLESPACE
      | FORCE
      | ADD PARTITION (partition_definition)
      | DROP PARTITION partition_names
      | TRUNCATE PARTITION {partition_names | ALL}
      | COALESCE PARTITION number
      | REORGANIZE PARTITION [partition_names INTO (partition_definitions)]
      | ANALYZE PARTITION {partition_names | ALL}
      | CHECK PARTITION {partition_names | ALL}
      | OPTIMIZE PARTITION {partition_names | ALL}
      | REBUILD PARTITION {partition_names | ALL}
      | REPAIR PARTITION {partition_names | ALL}
      | PARTITION BY partitioning_expression
      | REMOVE PARTITIONING
    

    实例(add)

     alter table goods2 add imag1 varchar(100) not null;
    
    add
    深入学习 MySQL 5.5 Reference Manual/SQL Statement Syntax/Data Definition Statements/

    3 DML操作(行操作)

    5.png

    3.1增加数据insert

    Insert
    语法

    insert into  tbl_name
    (col_name,…)  values (value1,…)  //指定列
    insertinto *tbl_name
     (value1,…)                        //所有列
    insert into  tbl_name
    *(value1,…),(value1,…),**(value1,…)      //一次加入多行
    

    注意:数字不用加单引号,字符串必须加单引号

    3.2 删除delete

    delete from  tbl_name (col_name,…)  where expr
    

    3.3 更改 update

    update tbl_name  set col_name = value where expr
    

    3.3 查找数据select

    
    select * from tbl_name   
    select * from tbl_name  where expr
    
    高级版
     SELECT selection_list // 选择哪些列
     FROM table_list // 从何处选择行
     WHERE primary_constraint // 行必须满足什么条件
     GROUP BY grouping_columns // 怎样对结果分组
     HAVING secondary_constraint // 行必须满足的第二条件
     ORDER BY sorting_columns // 怎样对结果排序
     LIMIT count // 结果限定
    

    Tips: 所有使用的关键词必须精确地以上面的顺序给出。例如,一个 HAVING 子句必须跟在 GROUP BY 子句之后和 ORDER BY 子句之前。
    where→group by →having→order by→ limit

    实例:

    mysql> SELECT * FROM pet;                                 // 普通查询
    mysql> SELECT * FROM pet WHERE name = "Bowser";           // 查询特定行
    mysql> SELECT name, birth FROM pet where owner="Gwen";    // 查询特定列
    mysql> SELECT death-birth FROM pet WHERE name="Bowser";   // 表达式计算
    mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f"; // 条件查询
    mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") // 多重条件
        -> OR (species = "dog" AND sex = "f");
    mysql> SELECT name, birth FROM pet ORDER BY birth DESC;   // 排序输出
    mysql>SELECT * FROM pet GROUP BY species;                 // 分组输出
    mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;    // 分组统计
    

    4 DCL操作

    5 高级操作

    导入导出

    我的笔记目录

    相关文章

      网友评论

          本文标题:mysql 学习笔记1 基础

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