配置文件的使用

大家发现每次进入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. 2-剑指offer: 最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 代码: // 这种topN问题比较常见的是使用堆来解决,最小的k个 ...

  2. Ubuntu 出现access denied by server while mounting

    3516cv500板端nfst调试时如此配置 虚拟机: #vi /etc/exports  添加 /home/"待分享文件路径"   *(rw,sync,no_root_squas ...

  3. gitlab的搭建和使用(转)

    工作当中常用的GitHub比较好用,但是安全性不是太强,因为github完全开源的,安全性不高 有空搞一下,先记录几个博客 https://yq.aliyun.com/articles/44531 h ...

  4. USACO Chocolate Giving

    洛谷 P2984 [USACO10FEB]给巧克力Chocolate Giving 洛谷传送门 JDOJ 2680: USACO 2010 Feb Silver 2.Chocolate Giving ...

  5. Python进阶-III 函数装饰器(Wrapper)

    1.引入场景: 检查代码的运行时间 import time def func(): start = time.time() time.sleep(0.12) print('看看我运行了多长时间!') ...

  6. 微信小程序 vscode 自动保存 保存自动编译 微信开发者工具崩溃

    修改vscode的自动保存延迟时间,将 auto save delay 选项 修改的长一点.

  7. Selenium XPath

    目录 1.selenium是什么呢? 安装 设置浏览器引擎 2.基本使用 3.等待元素被加载 4.选择器 2. find_element_by_tag_name 3. find_element_by_ ...

  8. python相对导包问题

    导包分为:绝对路径.相对路径 在测试时发现不能够使用相对路径 查过之后才知道: 运行模块(如:main.py)中导包只能使用绝对路径,不能使用相对路径 官方文档: Note that relative ...

  9. 在eclipse中新建java问题报错:The type XXX cannot be resolved. It is indirectly referenced from required .class files

    在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误 ...

  10. C语言实现Linux之ls

    ls命令用来显示目标列表. 常用参数: -l    :以长格式显示目录下的内容列表.输出信息从左向右依次包括文件名,文件类型,权限模式,硬连接数,所有者.组.文件大小和文件的最后修改时间等: -a   ...