配置文件的使用

大家发现每次进入mysql都需要进行登录操作,而且服务器的编码为Latin1,客户端的编码为GBK,这样就很容易造成乱码,所以我们就需要进行一个统一

  1. 在根目录(程序安装的路径)下创建一个配置文件,名称为my.ini

    内容为cfg格式,即section+option

  2. [mysqld] 分区为服务器端配置,修改后需要重启服务器

    [mysql] 分区为客户端配置,修改后需要进行重连

  3. 统一编码方式配置文件:

    # 客户端配置
    [client]
    user = root
    password = 你的密码
    default-character-set = utf8 # 服务器端配置 需要重启服务器
    [mysqld]
    character-set-server = utf8

表的分类——数据库引擎

数据库引擎是数据库最核心的部分,地位相当于人类的心脏,它是负责存储数据的模块

可以通过 show engines; 查看引擎

可以看到,mysql里面有好几个引擎,但到底那个好呢?

这个是没有定论的,每个引擎有不同的作用,我们要根据实际需求来选择合适的引擎

  • Mysql数据库默认引擎为InnoDB

  • 创建表指定引擎

    create table 名称(字段 类型 ) engine = XXXX;

简单的表的增删改查(CRUD)

# 插入数据
insert into 表名 values(数据1,数据2,……); # 该方式必须保证插入的数据个数和表格字段数量一样 # 选择部分字段插入
insert into 表名(字段名称1,字段名称2) values(数据1,数据2); # 该方式必须保证插入的数据个数与指定的字段数量一样 # 同时插入多个记录
insert into 表名(字段名称1,字段名称2) values(数据1,数据2),(数据1,数据2); # 查询所有记录
select * from 表名; # 查询符合条件的字段
select 字段 from 表名 where 条件; # 更新所有的记录
uptade 表名 set 字段1=新的值1,字段2=新的值2; # 更新符合条件的记录
update 表名 set 字段1=新的值1,字段2=新的值2 where 条件; # 删除所有记录
delete from 表名; # 删除满足条件的记录
delete from 表名 where 条件;

创建表的完整写法

create table 表名(字段名称1 字段类型[(长度) 约束],字段名称1 字段类型[(长度) 约束]……) charset utf8;

Mysql中的数据类型

数字类型

  • 注意:

    整型:
    1. 默认情况下为有符号的,需要设置为无符号要在增加unsigned约束

      alter table 表名 modify 字段 数据类型 unsigned;

      create table 表名(字段 数据类型 unsigned)

    2. mysql 5.6 版本在默认情况下,为非加严模式,如果数据类型超过范围,就会自动取最大值,这样就不能保证数据的安全,所以可以在配置中设置为加严模式,或者临时设置sql_mode,但退出后又会恢复非加严模式

      # 查看当前的sql模式
      
      select @@sql_model   # @ 表示全局变量   @@ 表示局部变量
      +---------------------+
      | @@sql_mode |
      +---------------------+
      | STRICT_TRANS_TABLES | # 当前为非加严模式
      +---------------------+ # 1.临时设置
      set @@sql_mode = " STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
      select @@sql_model
      +--------------------------------------------+
      | @@sql_mode |
      +--------------------------------------------+
      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | # 加严模式
      +--------------------------------------------+ # 2.修改配置,永久有效
      [mysqld]
      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    3. 指定长度

      比如int(5),表示数据最小长度为5,如果数据不足5位,默认用空填充,如果要用0填充,需要增加zerofill约束

      create table test(x int(5) zerofill);
      insert into test values(2);
      insert into test values(201780); # 证明5并不是限制最大长度的
      select *from test;
      +--------+
      | x |
      +--------+
      | 00002 |
      | 201780 |
      +--------+
    浮点型
    1. 数据类型(M,D) 表示整数位最大长度为M-D,超出则会报错,小数位最大长度为D,如果小数位超过了,则会自动进行四舍五入

      create table test(x float(5,3));
      insert into test values(2.56789);
      Query OK, 1 row affected (0.21 sec)
      select *from test;
      +-------+
      | x |
      +-------+
      | 2.568 |
      +-------+ insert into test values(100); # 报错,最大只能为99.999
      ERROR 1264 (22003): Out of range value for column 'x' at row 1
    2. float类型 不需要指定位数,最大只能精确到小数点后5位

      double类型 不需要指定位数,最大只能精确到小数点后15位

      decimal类型 必须指定位数,长度最大为65,小数点后面最长为30

字符串类型

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
  1. char

    定义时需要指定字符串长度,默认为1,比如char(10),表示最大只能有10个字符,超出长度自动取前10个字符,而少于10个字符的自动在前面补足空格

    • 优点:读取速度快
    • 缺点:浪费空间
  2. varchar

    定义时也需要指定字符串长度,但是和char的区别就是varchar不会自动补空格,而且varcher最终占⽤的空间为实际内容所占字节数+1,因为需要一个bit 存储字符长度

    • 优点:节省空间
    • 存取速度慢一些
    char(4) 存储需求 varcher(4) 存储需求
    ‘’ ' ' 4个字节 '' 1个字节
    ‘ab' 'ab ' 4个字节 'ab' 3个字节
    'abcd' 'abcd 4个字节 'abcd' 5个字节
    'abcdefg' 'abcd' 4个字节 'abcd' 5个字节
  3. text

    存放长度较大的字符串

  4. blob

    存放的是二进制

枚举和集合

类型 大小
ENUM 对1-255个成员的枚举需要1个字节存储; 对于255-65535个成员,需要2个字节存储; 最多允许65535个成员。
SET 1-8个成员的集合,占1个字节 9-16个成员的集合,占2个字节 17-24个成员的集合,占3个字节 25-32个成员的集合,占4个字节 33-64个成员的集合,占8个字节
  1. 枚举是提前规定一个范围 你的值只能是其中之一 多选一

  2. 集合是提前规定一个范围 你的值可以是其中的多个 多选多

    集合在插入数据时 ,多个值之前用逗号隔开 但他们必须包含在同一个字符串内!

    create table t10 (name char(20),gender enum('female','male'));
    Query OK, 0 rows affected (0.01 sec) # 选择enum('female','male')中的一项作为gender的值,可以正常插入
    insert into t10 values ('nick','male');
    Query OK, 1 row affected (0.00 sec) # 不能同时插入'male,female'两个值,也不能插入不属于'male,female'的值
    insert into t10 values ('nick','male,female');
    ERROR 1265 (01000): Data truncated for column 'gender' at row 1 create table t11 (name char(20),hobby set('抽烟','喝酒','烫头','翻车'));
    Query OK, 0 rows affected (0.01 sec) # 可以任意选择set('抽烟','喝酒','烫头','翻车')中的项,并自带去重功能
    insert into t11 values ('tank','烫头,喝酒,烫头');
    Query OK, 1 row affected (0.01 sec) select * from t11;
    +------+---------------+
    | name | hobby |
    +------+---------------+
    | tank | 喝酒,烫头 |
    +------+---------------+
    row in set (0.00 sec) # 不能选择不属于set('抽烟','喝酒','烫头','翻车')中的项,
    insert into t11 values ('jason','烫头,翻车,看妹子');
    ERROR 1265 (01000): Data truncated for column 'hobby' at row 1

时间和日期

类型 大小 (字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 年月日
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时分秒
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 0000-00-00 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD\HH:MM:SS 年月日时分秒
TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD\HHMMSS 混合日期和时间值,时间戳
  1. date/time/datatime类型

    create table t4 (d date,t time,dt datetime);
    Query OK, 0 rows affected (0.02 sec) desc t4;
    +-------+----------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+----------+------+-----+---------+-------+
    | d | date | YES | | NULL | |
    | t | time | YES | | NULL | |
    | dt | datetime | YES | | NULL | |
    +-------+----------+------+-----+---------+-------+
    rows in set (0.01 sec) insert into t4 values (now(),now(),now());
    Query OK, 1 row affected, 1 warning (0.01 sec) select * from t4;
    +------------+----------+---------------------+
    | d | t | dt |
    +------------+----------+---------------------+
    | 2018-09-21 | 14:51:51 | 2018-09-21 14:51:51 |
    +------------+----------+---------------------+
    row in set (0.00 sec) insert into t4 values (null,null,null);
    Query OK, 1 row affected (0.01 sec) select * from t4;
    +------------+----------+---------------------+
    | d | t | dt |
    +------------+----------+---------------------+
    | 2018-09-21 | 14:51:51 | 2018-09-21 14:51:51 |
    | NULL | NULL | NULL |
    +------------+----------+---------------------+
    rows in set (0.00 sec)
  2. timestamp类型

    create table t5 (id1 timestamp);
    Query OK, 0 rows affected (0.02 sec) desc t5;
    +-------+-----------+------+-----+-------------------+-----------------------------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+-----------+------+-----+-------------------+-----------------------------+
    | id1 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
    +-------+-----------+------+-----+-------------------+-----------------------------+
    row in set (0.00 sec) # 插入数据null,会自动插入当前时间的时间
    insert into t5 values (null);
    Query OK, 1 row affected (0.00 sec) select * from t5;
    +---------------------+
    | id1 |
    +---------------------+
    | 2018-09-21 14:56:50 |
    +---------------------+
    row in set (0.00 sec) #添加一列 默认值是'0000-00-00 00:00:00'
    alter table t5 add id2 timestamp;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0 Duplicates: 0 Warnings: 0 show create table t5 \G;
    *************************** 1. row ***************************
    Table: t5
    Create Table: CREATE TABLE `t5` (
    `id1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `id2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    row in set (0.00 sec) ERROR:
    No query specified # 手动修改新的列默认值为当前时间
    alter table t5 modify id2 timestamp default current_timestamp;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0 Duplicates: 0 Warnings: 0 show create table t5 \G;
    *************************** 1. row ***************************
    Table: t5
    Create Table: CREATE TABLE `t5` (
    `id1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `id2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    row in set (0.00 sec) ERROR:
    No query specified insert into t5 values (null,null);
    Query OK, 1 row affected (0.01 sec) select * from t5;
    +---------------------+---------------------+
    | id1 | id2 |
    +---------------------+---------------------+
    | 2018-09-21 14:56:50 | 0000-00-00 00:00:00 |
    | 2018-09-21 14:59:31 | 2018-09-21 14:59:31 |
    +---------------------+---------------------+
    rows in set (0.00 sec)
  3. year类型

    create table t7 (y year);
    Query OK, 0 rows affected (0.02 sec) insert into t7 values (2018);
    Query OK, 1 row affected (0.00 sec) select * from t7;
    +------+
    | y |
    +------+
    | 2018 |
    +------+
    row in set (0.00 sec)

    注意:上述时间,两位数0-69 翻译为 2000-2069 70-99 翻译为1790-1999

MySQL基础-2的更多相关文章

  1. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  2. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  3. 【夯实Mysql基础】记一次mysql语句的优化过程

    1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...

  4. MySQL基础(非常全)

    MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...

  5. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  6. MySQL 基础语句

    MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...

  7. MySQL:基础—数据分组

    MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...

  8. MySQL基础学习总结

    1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...

  9. MySQL基础(五)——视图

    MySQL基础(五)--视图

  10. MySQL基础(四)——索引

    MySQL基础(四)--索引

随机推荐

  1. Fiddler抓包设置

    介绍 Fiddler 在 PC 端和移动端,模拟器抓取数据包 Fiddler抓取PC端数据包: 这里 Fiddler 抓取网页客户端的数据包时,其原理就是在 客户端/浏览器 和 服务器端 之间,加上了 ...

  2. Cutting Bamboos(2019年牛客多校第九场H题+二分+主席树)

    题目链接 传送门 题意 有\(n\)棵竹子,然后有\(q\)次操作,每次操作给你\(l,r,x,y\),表示对\([l,r]\)区间的竹子砍\(y\)次,每次砍伐的长度和相等(自己定砍伐的高度\(le ...

  3. mysql之drop、truncate和delete的区别

    今天在整理mysql数据库笔记的时候突然想到一个问题,就是drop.truncate和delete的区别,乍一看三者都是有删除的功能,但是具体来看还是有很多区别的.我先把这三个的作用简单说一下,有前辈 ...

  4. python递归和内置方法

    递归:函数调用自身 核心:递进的时候能够达到一个结果,问题规模越来越小(不一定要真正的达到):设置一个条件,能够让最后一次函数调用结束 练习: ​ 第一个人的姓名是16岁,后面每个人的年龄都比前一个大 ...

  5. TypeScript 解构和展开

    解构数组 解构数组元素 let input = [1, 2]; let [first, second] = input; console.log(first,second); 交换值 [first, ...

  6. Layui 隐藏左侧菜单

    简单实现 //隐藏菜单 var bl = $("#LAY_app_flexible").hasClass("layui-icon-shrink-right"); ...

  7. 【转】SkipList跳表基本原理

    增加了向前指针的链表叫作跳表.跳表全称叫做跳跃表,简称跳表.跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表.跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找.跳表不仅 ...

  8. 网络协议 10 - Socket 编程(上)

    前面一直在说各种协议,偏理论方面的知识,这次咱们就来认识下基于 TCP 和 UDP 协议这些理论知识的 Socket 编程.     说 TCP 和 UDP 的时候,我们是分成客户端和服务端来认识的, ...

  9. 【LG5444】[APIO2019]奇怪装置

    [LG5444][APIO2019]奇怪装置 题面 洛谷 题目大意: 给定\(A,B\),对于\(\forall t\in \mathbb N\),有二元组\((x,y)=((t+\lfloor\fr ...

  10. K8s中的网络

    Kubernetes的网络通信问题: 1. 容器间通信: 即同一个Pod内多个容器间通信,通常使用loopback来实现. 2. Pod间通信: K8s要求,Pod和Pod之间通信必须使用Pod-IP ...