zoukankan      html  css  js  c++  java
  • MySQL基础

    进入Mysql的两种方式

    1.明文进入: mysql -u账号 -p密码

    2.密文进入: mysql -u账号 -p (enter后提示输入密码)

    mysql 中 保存了很多数据库, 一个数据库中保存了很多表

    MySQL数据类型:

    • 整数类型

      • TINYINT 很小的整数 一个字节 -128~127 0~255
      • SMALLINT 小的整数 两个字节 -32768~ 23767 0~65535
      • MEDIUMINT 中等大小的整数 三个字节 -8388608~8388607 0~16777215
      • INT 普通大小的整数 四个字节 -21474483548~2147483647 0~4294967295
      • BIGINT 大整数 八个字节 略
        • 补充 : INT(10) 10 表示这个字段显示的宽度, 既存储11位数显示10位
    • 浮点数类型和定点数类型

      • FLOAT 单精度浮点数 四个字节

      • DOUBLE 双精度浮点数 八个字节

      • DECIMAL(M,D) 压缩的'严格'的定点数 M+2个字节

        • 三者的区别:

          区别一: 
          	FLOAT 显示后面的小数点位大概在40多位,
          	DOUBLE 能显示的为300多位,
          	DECIMAL 小数点后面能显示的位数和 DOUBLE 差不多
          区别二:
          	FLOAT 和 DOUBLE 在不指定精度时,也就是不用(M,D),默认按照录入数据的精度,而 DECIMAL 	如不指定精度默认为(10,0)
          区别三:
          	浮点数对于定点数(DECIMAL)的优点就是在一定长度下,浮点数能够显示更大的数据范围,但是缺点	是会引起精度问题.
          什么时候使用什么数据类型?
          	对精度要求较高时,比如货币、科学数据等,使用 DECIMAL 比较好. 其他时候一般使用 DOUBLE.
          	避免做浮点数的比较,比如加,减,比大小, 这样做会引起精度丢失的问题.
          
        • M,D的解释 :

          M:数字的总位数, 就是看到多少个数字 比如2.566, M就是 4
          D:小数点后面能保留几位, 比如2.566, M就是 3
          FLOAT 和 DOUBLE 数据类型后面也可以加这个参数,位数不足用0补充
          
    • 日期与时间类型

      • YEAR

        • YYYY 1901 ~ 2155 一个字节

          插入完整年份时候,数字,字符串都可以
          INSERT INTO tmp VALUES(2010),('2010'),("2010")
          插入省略的年份时
          	插入数字:
          		INSERT INTO tmp VALUES(0),(00),(77)
          		数据库中会存储 0000, 0000, 1977  三个值
          	插入字符串:
          		INSERT INTO tmp VALUES('0'),('00'),('77')
          		数据库中会存储 2000, 2000, 1977  三个值
          规则:
          	1.插入省略年份 数字 0, 00会转程0000, 字符串'0','00'会转成 2000
              2.在不超过70, 也就是小于70, 会生成2000年以上的年份,超过70,则会生成2069如此的年份
              3.推荐使用完整年份
          
      • TIME

        • HH:MM:SS -838:59:59 ~ 838:59:59 三个字节
        格式:HH:MM:SS  HH表示小时, MM表示分钟, SS表示秒
        取值范围:-838:59:59 ~ 838:59:59, 以字符串的方式插入
        解释:这里的时间不仅仅可以用来表示一天的时间(也就是24小时),还可能是某件事过去的时间或者两件	事之间的时间间隔.
        
      • DATE

        • YYYY-MM-DD 1000-01-01 ~ 9999-12-3 三个字节
        格式:YYYY-MM-DD  YYYY表示年份 MM表示月份 DD表示日
        取值范围: 1000-01-01 ~ 9999-12-3 使用字符串插入,也可以使用19980304这中数字的方式插入
        注意:这里的年份也和YEAR数据类型相同有省略的输入方式,规则一样 980304 对应 1998-03-04
        
      • DATETIME

        • YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 八个字节

          格式:YYYY-MM-DD HH:MM:SS 
          DATE 和 YEAR 的结合体, 另外两个的特点这里也适用.
          PS: 这里的DATE只能表示一天的时间(最多24h)
          
      • TIMESTAMP

        • YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC 四个字节

          格式:YYYY-MM-DD HH:MM:SS
          解释:世界标准时间,显示宽度固定在19个字符.存储字节和支持的范围不一样. DATETIME 存入什么取	出就是什么, TIMESTAMP 存入后如果更换时区, 取出的值会相应做出转换.
          
    • 字符串类型(主要说CHAR,VARCHAR)

      • CHAR

        CHAR(M) 固定长度的,非二进制字符串 M个字节, 1<=M<=255
        解释:
        	固定长度,M值为多少,那么M就是其实际存储空间的值,就算插入的数据少于M位,其存储空间还是那么大
        
      • VARCHAR

        VARCHAR(M) 变长的非二进制字符串  L+1个字节, L<=M 和 1<=M<=255
        解释:
        	长度可变的字符串,跟CHAR相反,会根据实际存储的值来确定存储空间的大小,存入L字节长度的值,实际	 占用的存储空间为L+1个字节.
        
      • TINYTEXT

      • TEXT

      • MEDIUNTEXT

      • LONGTEXT

      • ENUM

      • SET

    • 二进制类型

      • BIT
      • BINARY
      • VARBINARY
      • TINYBLOB
      • BOLB
      • MEDIUMBLOB
      • LONGBLOB

    命令大全:

    库相关:

    • show databases 查看mysql中所有的数据库
    • create database 数据库名称 创建一个新的数据库
    • drop database 数据库名称 删除一个数据库
    • use 数据库名称 使用哪个数据库, 切换到该数据库下操作

    表相关:

    show tables 常看当前数据库下的所有表

    创建表:
    • - 创建一个数据表
      create table 数据表名称 ( 
          		   字段名  数据类型[列级别条件],
      			   字段名  数据类型[列级别条件],
                     字段名  数据类型[列级别条件]
      				);
      
      • 创建无约束的表
        - 创建没有约束的student表
                create table student(
                            id INT(11),
                            name VARCHAR(12),
                            age INT(11)
                );
        
      • 创建有约束的表
        • 单个主键约束
        - 创建有约束的student表
        第一种:
                create table student(
                            id INT(11) PRIMARY KEY,
                            name VARCHAR(12),
                            age INT(11)
                );
        第二种:
                create table student(
                            id INT(11),
                            name VARCHAR(12),
                            age INT(11),
                            PRIMARY KEY(id)
                );
        
        • 多主键约束(复合主键)
        - id字段和name字段不能同时一样
        		create table student(
                			id INT(11) PRIMARY KEY,
                    		name VARCHAR(12) PRIMARY KEY,
                    		age INT(11)
                );
        
        • 外键约束
        - 外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键。但是外键字段中的值必须是另一张表中的主键。
        
        - 这样被外键关联的两种表的关系可以称为父子表或者主从表。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表。
        
        - 子表被外键约束修饰的字段必须和父表的主键字段的类型一样。
        create table tableA(
            id INT(11),
            name VARCHAR(22),
            location VARCHAR(50),
            PRIMARY KEY(id)
        );
        create table tableB(
            id INT(11),
            name VARCHAR(22) NOT NULL,
            deptid INT(11),
            PRIMARY KEY(id),
            CONSTRAINT tableA_tableB_1 FOREIGN KEY(deptid) REFERENCES tableA(id)
        );
        解释:tableB中有一个名为tableA_tableB_1的外键关联了tableA和tableB两个表,被外键约束修饰的字	  段为tableB中的deptid,对应的主键字段为tableA中的id
        
        • 非空约束
        `NOT NULL` 被该约束修饰了的字段,不能为空,主键约束 = 非空约束 + 唯一约束
        create table tableA(
        	id INT(11),
            name VARCHAR(22) NOT NULL,
            location VARCHAR(50),
            PRIMARY KEY(id)
        );
        解释: name 不能为空
        
        • 唯一约束
        `UNIQUE` 被该约束修饰了的字段,表示该字段中的值唯一,表中这个字段不能有相同的值
        create table tableA(
        	id INT(11),
            name VARCHAR(22) UNIQUE,
            location VARCHAR(50),
            PRIMARY KEY(id)
        );
        解释: name 不能有重复的值
        
        • 默认约束
        `DEFAULT 默认值` 被该约束修饰了的字段, 在录入时如果没有写值, 数据库中会记录为默认值
        create table tableA(
        	id INT(11),
            name VARCHAR(22) UNIQUE,
            location VARCHAR(50),
        	deptid INT(11) DEFAULT 1111,
            PRIMARY KEY(id)
        );
        解释: deptid 默认值为1111
        
        • 自增约束
        `AUTO_INCREMENT` 被该约束修饰了的字段, 只能是整数, 默认值为1, 一般都是修饰主键
        create table tableA(
        	id INT(11) PRIMARY KEY AUTO_INCREMENT,
            name VARCHAR(22) NOT NULL
        );
        解释:每插入一条数据,主键值(id)自动加1
        
    查询表:
    • 查看表基本结构 : DESCRIBE student;
    • 查看创建表时使用的语句:show create table student;
      • 语句后加G show create table studentG; 查询结果更直观
    修改表:
    • 修改表名:alter table 旧表名 rename to 新表名;
    • 修改表中的字段名:altere table 表名 change 旧字段名 新字段名 新数据类型;
    • 修改表中的数据类型:alter table 表名 modify 字段名 数据类型[约束条件];
    • 修改字段的排列:alter table 表名 modifi 字段1 数据类型 FIRST|AFTER 字段2;
    • 添加字段: alter table 表名 ADD 新的字段名 数据类型 约束条件[FIRST|AFTER已存在的字段];
      • 在一个特定的位置添加一个字段, 如果不指定位置默认添加在最后
    • 删除字段:alter table 表名 drop 字段名;
    • 删除外键字段:alter table 表名 drop 外键名;
      • 外键约束名并不是被外键约束的那个字段名,而是在创建外键约束时起的名字
    • 更改表的存储引擎: alter table 表名 engine = 更新后的存储引擎名;
    删除表:
    • 删除无关联的表:drop table 表名;
    • 删除被其他表的关联的主表: <两种方式>
      • 先删除子表,再删除父表
      • 先删除外键关系,再删除父表
  • 相关阅读:
    关于int8_t,uint8_t.....等数据类型的理解
    导出函数__declspec(dllexport)
    c++中的namespace
    GitHub C 和 C++ 开源库的清单(含示例代码)
    进制之间的转换一
    为 JSON 字符串创建对象
    HTML5 简单Demo1
    主要浏览器的调试工具
    fiddler2抓包工具使用图文教程
    JAVA将秒的总和转换成时分秒的格式
  • 原文地址:https://www.cnblogs.com/Treasuremy/p/10454462.html
Copyright © 2011-2022 走看看