突突突突突突

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

进入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 student\G; 查询结果更直观
修改表:
  • 修改表名: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 表名;
  • 删除被其他表的关联的主表: <两种方式>
    • 先删除子表,再删除父表
    • 先删除外键关系,再删除父表
posted on 2019-03-01 08:37  徐建0304  阅读(131)  评论(0编辑  收藏  举报