• MySQL 入门


    1.mysql是什么?
      mysql本质就是一个c/s架构的套接字软件

    2.数据库基本概念
      数据库服务器:运行有数据库管理软件的计算机
      数据库管理软件:mysql
      库:文件夹
      表:文件
      记录:文件中的一行的内容

    3.针对库、表、记录的操作
      3.1 库文件夹:
        增:
          CREATE DATABASE 库名 CHARSET 编码;
        改:
          ALITER DATABASE 库名 CHARSET 编码;
        查:
          SHOW DATABASES;
          SHOW CREATE DATABASE 库名;
        删:
          DROP DATABASE 库名;

      3.2 表文件:
        操作表前要先切换到库下:use 库名;
        建表的完整语法:
          CREATE TABLE 表名(
          字段名1 类型[(宽度) 约束条件],
          字段名2 类型[(宽度) 约束条件],
          字段名3 类型[(宽度) 约束条件]
          );

        增:
          CREATE TABLE 表名(字段名 类型,...);
        改:
          改字段类型约束条件:
            ALTER TABLE 表名 modify 字段名 类型(长度宽度);
          改字段名类型约束条件:
            ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度宽度);
        查:
          查看所有表:
            SHOW TABLES;
          查看指定表:
            SHOW CREATE TABLE t1;
          查看表结构:
            DESC 表名;
        删:
          DROP TABLE 表名;
        清空表:
          TRUNCATE 表名;
          #清空表应该使用TRUANCATE,不仅删除所有记录,而且将自增字段的值归0


      3.3 记录文件中一行行内容:
        增:
          方式一(指定字段名插入):
            INSERT INTO 表名 (字段名,字段名,...) VALUES (值1,值2,...),...;
          方式二(默认位置插入):
            INSERT INTO 表名 values (值1,值2,...),...;
        改:
          UPDATE 表名 SET 字段名=内容 where 条件;
        查:
          SELECT 字段名 FROM 表名;
        删:
          DELETE FROM 表名 WHERE 条件;
          #DELETE 只能用于删除符合条件的某几条记录,不能用于清空表

    4.存储引擎
      存储引擎就是表的类型
      不同的类型会对应不同的处理机制
      测试:
      CREATE TABLE t3(id INT)ENGINE='InnoDB';
      CREATE TABLE t4(id INT)ENGINE='MyISAM';
      CREATE TABLE t5(id INT)ENGINE='BLACKHOLE';
      CREATE TABLE t6(id INT)ENGINE='MEMORY';

      INSERT INTO t3 VALUES(1);
      INSERT INTO t4 VALUES(1);
      INSERT INTO t5 VALUES(1);
      INSERT INTO t6 VALUES(1);

    5.数据类型
      PRIMARY         #主键(不能为空的意思)
      AUTO_INCREMENT  #自动增长
      DEFAULT         #默认值

      5.1 数字类型:整型(默认有符号),浮点型
      类型设置成无符号:unsigned
      #整型类型:数据类型宽度限制的是显示宽度而非存储宽度
      整型:
        TINYINT      #占1字节
        SMALLINT     #占2字节
        MEDIUMINT  #占3字节
        INT      #占4字节
        BIGINT          #占8字节
      浮点型:
        FLOAT                #占4字节
        DOUBLE            #占8字节
        DECIMAL           #手动指定字节

      5.2 字符类型:
        CHAR_LENGTH(字段名)   #用于查看某字段包含的字符个数

        CHAR      #定长
        VARCHAR    #变长

        例:
          CHAR(5)
            相同点:最大能存放5个字符
            不同点:假设传入3个字符,会补全2个字符
        #注意:
            针对CHAR类型,在存放时会将字符补全为5个,在查询时又会将末尾补全的空格去掉
            不让MySQL去掉末尾空格的方法:
              通过修改sql_mode,添加 SQL_PAD_CHAR_TO_FULL_LENGTH
        VARCHAR(5)
          相同点:最大能存放5个字符
          不同点:假设传入3个字符,就存3个字符

        LIKE:
          WHERE 字段名 LIKE
          LIKE是模糊匹配
          %:任意个数的任意字符
          _:1个任意字符

        大文本类型:
          TEXT系列(文本是带有编码)
          TINYTEXT
          TEXT
          MEDIUMTEXT
          LONGTEXT
          BLOB系列(也是字符数据,但是不带编码)
          TINYBLOB
          BLOB
          MEDIUMBLOB
          LONGBLOB
        二进制类型:
          BINARY系列(存储二进制数据)
          BINARY
          VARBINARY

      5.3 日期类型:TIME,DATE,DATETIME,TIMESTAMP,YEAR,
        NOW() #此函数用于获取当前时间

      5.4 枚举类型:
        ENUM #多选一
      5.5 集合类型:
        SET #多选多


    6.表操作之约束条件
      约束条件:约束条件是在类型之外为字段附加的限制
      强调:如果表的类型为InnoDB储存引擎,在创建表时,必须定义一个主键
      如果不指定,InnoDB存储引擎会自上而下寻找一个不为空且唯一的字段当做主键
      如果不指定并且也没有NOT NULL+UNIQUE的字段,那么InnoDB存储引擎会生成一个隐藏的字段当做主键
      PRIMARY KEY    #标识该字段为该表的主键,可以唯一的标识记录
        单从约束角度去看,主键的约束效果是NOT NULL+UNIQUE

      FOREIGN KEY #标识该字段为该表的外键
      限制关联表某一个字段的值必须是来自于被关联表的一个字段
      注意:
        1.被关联的字段必须是一个KEY,通常是ID字段
        2.创建表时:必须先建立被关联的表,才能建立关联表
        3.插入记录时:必须先往被关联的表插入记录,才能往关联表中插入记录
      #关联表
      CREATE TABLE emp(
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(15),
      age INT,
      dep_id INT,
      FOREIGN KEY(dep_id) REFERENCES dep(id)
      ON UPDATE CASCADE
      ON DELETE CASCADE
      );

      INSERT INTO emp(name,age,dep_id) VALUES
      ('hades',18,1),
      ('iggy',28,2),
      ('egon',38,2),
      ('alex',30,1),
      ('xingchen',18,3);

      #被关联表
      CREATE TABLE dep(
      id INT PRIMARY KEY AUTO_INCREMENT,
      dname VARCHAR(20),
      info VARCHAR(50)
      );

      INSERT INTO dep(dname,info) VALUES
      ('IT','技术部门'),
      ('Sale','销售部'),
      ('HR','人事部');

      #ps:删除时,应该先删除关联表emp中的记录,再删除被关联表对应的记录

      NOT NULL              #标识该字段不能为空

      UNIQUE KEY               #标识该字段的值是唯一的

      AUTO_INCREMENT #标识该字段的值自动增长(整数类型,而且为主键)

      DEFAULT                     #为该字段设置默认值

      UNSIGNED                  #无符号
      ZEROFILL                    #使用0填充

      #找两张表关系的窍门
        emp   dep
      #1.先站在左边的角度去找左表emp的多条记录能否对应右表dep的一条记录
        翻译:多个员工能否属于一个部门
      #2.然后站在右表的角度:去找右表dep的多条记录能否对应左表emp的一条记录
        翻译:多个部门能否拥有同一名员工
      #多对一结果的判断
        1.如果只有单向多对一成立,最终关系就是多对一
        2.在emp表新增一个字段dep_id,该字段外键关联dep(id)
      #多对多结果的判断
        1.双向的多对一就是多对多
        2.需要建立第三张表,有一个字段的值fk左表,一个字段的值fk右表
        CREATE TABLE author(
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(16),
        age INT
        );

        CREATE TABLE book(
        id INT PRIMARY KEY AUTO_INCREMENT,
        bname VARCHAR(20),
        price INT
        );

        CREATE TABLE author2book(
        id INT PRIMARY KEY AUTO_INCREMENT,
        author_id INT,
        book_id INT,
        FOREIGN KEY(author_id) REFERENCES author(id)
        ON UPDATE CASCADE
        ON DELETE CASCADE,
        FOREIGN KEY(book_id) REFERENCES book(id)
        ON UPDATE CASCADE
        ON DELETE CASCADE
        );
      #一对一:无需参考窍门,左表的一条数据唯一对应右表的一条记录

    7.表操作
      1.修改表名
        ALTER TABLE 表名 RENAME 新表名;
      2.增加字段
        ALTER TABLE 表名 ADD 字段名 数据类型[完整性约束条件...],ADD 字段名 数据类型[完整性约束条件...];
        ALTER TABLE 表名 ADD 字段名 数据类型[完整性约束条件...] FIRST;
        ALTER TABLE 表名 ADD 字段名 数据类型[完整性约束条件...] AFTER 字段名;
      3.删除字段
        ALTER TABLE 表名 DROP 字段名;
      4.修改字段
        ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件...];
        ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件...];
        ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件...];

      5.复制表
       #在查询语句前加上CREATE TABLE 表名
        CREATE TABLE user SELECT host,user,password,select_priv FROM mysql.user;
       #复制表结构
        CREATE TABLE user1 SELECT host,user,password,select_priv FROM mysql.user WHERE 3<1;

    8.记录的增、删、改
      1.插入完整数据(顺序插入)
        语法一:
          INSERT INTO 表名(字段1,字段2,字段3...字段n) VALUES(值1,值2,值3...值n);
        语法二:
          INSERT INTO 表名 VALUES (值1,值2,值3...值n);
        2.指定字段插入数据
          语法:
          INSERT INTO 表名(字段1,字段2,字段3...) VALUES (值1,值2,值3...);
        3.插入多条记录
          语法:
          INSERT INTO 表名 VALUES
          (值1,值2,值3...值n),
          (值1,值2,值3...值n),
          (值1,值2,值3...值n);
        4.插入查询结果
          语法:
          INSERT INTO 表名(字段1,字段2,字段3...字段n)
          SELECT (字段1,字段2,字段3...字段n) FROM 表2
          WHERE ...;

    9.更新数据UPDATE
      语法:
        UPDATE 表名 SET
        字段1=值1,
        字段2=值2,
        WHERE CONDITION;
      示例:
        UPDATE mysql.user SET password=password('123')
        WHERE user='root' and host='localhost';

    10.删除数据DELETE
      语法:
        DELETE FROM 表名
        WHERE CONDITION;
      示例:
        DELETE FROM mysql.user
        WHERE password='';

  • 相关阅读:
    mybatis入门_一对多,多对多映射以及整合spring框架
    mybatis入门_配置文件的配置
    mybatis入门_mybatis基本原理以及入门程序
    BOM 3.1 location对象 | history对象 | navigator对象 | 定时器 | 三大系列
    Sublime Text Build 3207 x64 无法安装Package Control和插件
    无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll已解决
    测试
    ECMAScript1.4 对象 | 简单数据类型与复杂数据类型 | 内置对象 | 基本包装类型 | String
    ECMAScript1.3 数组 | 函数 | 作用域 | 预解析
    webAPI(DOM) 2.1 获取页面元素 | 事件1 | 属性操作 | 节点 | 创建元素 | 事件2
  • 原文地址:https://www.cnblogs.com/earon/p/9665683.html
Copyright © 2020-2023  润新知