1.存储引擎
- 存储引擎是用于根据不同的机制处理不同的数据。
- 查看mysql中所有引擎:
  - show engines;

- myisam: 5.5以前老的版本使用的存储引擎
- blackhole: 类似于队列中的数据,存进去消失

- innodb: 默认使用存储引擎
  - 支持事务
  - 行锁
  - 外键

- memory: 内存引擎(通电数据存在,断电丢失)

创建4中不同的存储引擎表
  create table t1(id int)engine=innodb;
  create table t2(id int)engine=myisam;
  create table t3(id int)engine=blackhole;
  create table t4(id int)engine=memory;

  - 提前学习 redis: 面试问的比较多;

  - 插入数据验证引擎的作用:
    insert into t1 values(1);
    insert into t2 values(2);
    insert into t3 values(3);
    insert into t4 values(4);  (关闭mysql服务端,memory数据就会消失)

2.创建表完整的语法
# 约束条件: 可有可无
# 宽度: 限制某些数据类型的存储大小
create table 表名(
  字段名1 字段类型(宽度) 约束条件,
  字段名2 字段类型(宽度) 约束条件
);

# 初始约束条件: not null
create table teacher(
  id int not null, # 约束插入记录时id不能为空
  name varchar(16),
  age int
);

insert into teacher values(null, 'tank', 17);
insert into teacher values(1, 'tank', 17);

注意:
1.创建表的字段名不能重复;
create table test(
  id int,
  id int
);

2.最后一个字段不能在末尾加 , 号
create table test(
  id int,
  age int,
);

3.字段名必须要有字段类型与宽度
create table test(
  id int,
  name char  (默认为1字符)
);
insert into test values(1, 'tank');

alter table test modify name char(4);
insert into test values(2, 'sean');

3.字段类型

1) 确定表结构
2) 字段与字段类型

- 整型:
- tinyint: 默认范围 -128, 127
create table t5(
  id tinyint,
  name varchar(16)
);

insert into t5 values(-128, 'tank'), (127, 'jason');
insert into t5 values(-129, 'tank');
insert into t5 values(128, 'jason');
insert into t5 values(12, 'sean');

- int: 默认范围是(-2147483648, 2147483647)

应用场景: id号、年龄...

create table t6(
  id int
);

# int 默认宽度11---> 默认展示宽度
insert into t6 values(-2147483649);
insert into t6 values(2147483648);
insert into t6 values(100);

create table t7(
  id int(3)
);

# 若插入超过设定宽度,则正常显示
insert into t7 values(123456);

# 若插入不足够4位,则以空格补全
insert into t7 values(1);

- bigint

- 浮点型:

应用场景: 工资、身高、体重...

- float
- double
- decimal

# 范围255是最大长度(包括.小数), 30代表是小数的位数
create table t8(x float(255, 30));
create table t9(x double(255, 30));
create table t10(x decimal(65, 30));

# 插入数据
# 三种浮点型: 区别在于精确度不一样
insert into t8 values(1.111111111111111111111111111111);
insert into t9 values(1.1111111111111111111111111111);
insert into t10 values(1.1111111111111111111111111111);

- 字符类型
- char(16): 定长字符

char: 手机号、身份证号、银行卡号等...

- 插入16个字符:

create table t11(
  id int,
  name char(4) # 4
);

insert into t11 values(1, 'tank');

# utf8 中文3个bytes gbk 中文2个bytes
insert into t11 values(2, '大鸡哥大鸡哥');

优点:
  存取速度快
缺点:
  浪费空间。
insert into t11 values(1, 't'); # t+三个空格

egon + sean + tank

- varchar(16): 不定长字符
- 存几个字符,就是几个字符的大小,每个字符前都要+1bytes
- 插入16个字符 ---> 1bytes+

优点:
  节省空间。

create table t12(id int, name varchar(4));
insert into t12 values(1, 'egon'); # 1bytes + egon
insert into t12 values(2, 'tank'); # 1bytes + tank
insert into t12 values(3, 'sean'); # 1bytes + sean

insert into t12 values(4, 't'); # 1bytes + t
1bytes + egon 、 1bytes + tank、 1bytes + sean

- 日期类型
- date: 2019-12-11
- datetime: 2019-12-11 11:11:11
- time: 11:11:11
- year: 2019
- timestamp: 时间戳

create table student(
  id int,
  name varchar(4),
  birth date,
  register datetime,
  work_time year,
  t_time time,
  update_time timestamp
);

insert into student values(1, '张全蛋', '2019-11-11', '2019-11-11 11:11:11','2019', '11:11:11', null);
(timestamp时间戳:会记录创建的时间)
insert into student values(2, 'HCY', '1000-11-11', '1980-11-11 11:11:11','2019', '11:11:11', null);

update student set name='HCY2号' where id=2;

(timestamp时间戳:会变为修改的时间)
python 插入时间数据时,转成str类型。

- 枚举与集合
- enum: 可以 多选一
create table t13(
  id int,
  name varchar(4),
  gender enum('male', 'female', 'others')
);
# insert into 表名(字段名) values(字段名对应的值);
insert into t13(id, name, gender) values(1, 'tank', 'male');

# 严格模式下,选择枚举以外的值会报错
insert into t13(id, name, gender) values(2, 'gd', '人Y');

- set: 可 多选一 或 多选多
create table t14(
  id int,
  name varchar(4),
  gender enum('male', 'female', 'others'),
  hobbies set('read', 'sing', '生蚝', 'HSNM', '架子鼓')
);

# 多选一
insert into t14 values(1, '大鸡J', 'others', 'HSNM');
# 多选多
insert into t14 values(2, 'tank', 'male', 'read,架子鼓,sing,生蚝');
注意:集合,中间用',',不可加空格!

# 多选多的顺序可不一
insert into t14 values(2, 'tank', 'male', 'read,架子鼓,sing,生蚝');

4.约束条件

- not null + unique:
create table user1(
id int not null,
name varchar(4)
);

insert into user1(id, name) values(null, 'tank');
insert into user1(id, name) values(1, 'tank');

- unique 将某个字段设置为唯一的值(单单unique,多个字段null不算重)

# not null + unique
create table user2(
id int not null unique,
name varchar(4)
);

insert into user2(id, name) values(1, 'tank'), (2, 'sean');

- primary key + auto_increment: 主键+自增

- primary key -----》 not null + unique
- pk就是表中的索引: 可以通过索引快速查找某些数据。
- 提高查询效率

# 将id设置为主键,非空切唯一
create table user3(
id int primary key,
name varchar(4)
);

insert into user3(id, name) values(1, 'tank');
insert into user3(id, name) values(2, 'tank');

- auto_increment:(必须和unique或primary key一起用。会自动排序)
# 将id设置为自增
create table user4(
id int primary key auto_increment,
name varchar(4)
);

# 自增默认从1开始
insert into user4(name) values('tank');
insert into user4(name) values('sean');
insert into user4(name) values('egon');
insert into user4(name) values('大鸡哥');

# 若想自增从指定值开始,可插入第一条数据时先指定id的值;
insert into user4(id, name) values(10, 'tank');
insert into user4(name) values('sean'); # 11
insert into user4(name) values('egon'); # 12
insert into user4(name) values('大鸡哥'); # 13

+----+-----------+
| id | name |
+----+-----------+
| 1 | tank |
| 2 | sean |
| 3 | egon |
| 4 | 大鸡哥 |
| 10 | tank |
| 11 | sean |
| 12 | egon |
| 13 | 大鸡哥 |
+----+-----------+

-default: 约束插入数据的默认值

create table student(id int,name char(5),password char(6) not null default "000000",age int,gender enum('w','m'));

- unsigned
- 无符号
create table user5(
id int unsigned
);
# 报错
insert into user5 values(-100);
insert into user5 values(0);
insert into user5 values(100);

- 有符号
create table user6(
id int
);

insert into user6 values(-100);

- zerofill
使用0填充空格
create table user7(
id int zerofill
);

insert into user7 values(100);

- 删除记录
create table user8(
id int primary key auto_increment,
name varchar(4)
);

insert into user8(name) values('tank');
insert into user8(name) values('大大大'), ('egon');

- delete:
# 清空user8表中的所有记录
delete from user8; (如果再添加项,如下还继续id序号,因为能回滚)

- truncate:
# 清空user8表中的所以记录,并且id重置为0
truncate table user8;(如果再添加项,id序号重新开始)

5.设置严格模式

# 查看数据库配置中变量名包含mode的配置参数:
show variables like "%mode%"; # 修改安全模式:
set session; # 局部有效,只在你当前操作的窗口有效
set global session; # 全局有效,永久有效 # 修改完之后退出当前客户端重新登录即可
set global sql_mode = 'STRICT_TRANS_TABLES';

MySQL数据库 存储引擎,创建表完整的语法,字段类型,约束条件的更多相关文章

  1. Mysql不同存储引擎的表转换方法

    Mysql不同存储引擎的表转换方法 1.Alter table直接修改表的存储引擎,但是这样会导致大量的系统开销,Mysql为此要执行一个就表向新表的逐行复制.在此期间,转换操作可能会占用服务器的所有 ...

  2. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  3. 【转】MySQL 数据库存储引擎

    原文地址:http://blog.jobbole.com/94385/ 简单介绍 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MySQl的特点,而且是一个插入 ...

  4. MySQL 数据库存储引擎

    简单介绍 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MySQl的特点,而且是一个插入式的存储引擎概念.这就决定了MySQl数据库中的表可以使用不同的存储方式 ...

  5. (转)Mysql数据库存储引擎

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.     我们通常说的MySql数据库,sql server数据库等 ...

  6. MYSQL——数据库存储引擎!

    本人安装mysql版本为:mysql  Ver 14.14 Distrib 5.7.18, for Win64 (x86_64),查看mysql的版本号方式:cmd-->mysql --vers ...

  7. mysql数据库存储引擎及区别

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERAT ...

  8. MySQL数据库----存储引擎

    什么是存储引擎? 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操 ...

  9. MySQL之存储引擎(表类型)的选择

    和大部分的数据库不同,MySQL中有一个存储引擎的概念,用户可以根据数据存储的需求来选择不同的存储引擎.本次博客就来介绍一下MySQL中的存储引擎.MySQL版本 5.7.19. 概述 MySQL的存 ...

随机推荐

  1. LINUX下查看点云图————point cloud(.ply .vtk .pcd)

    首先,你要确定点云的格式:.pcd(.vtk) 还是 .ply 如果是.pcd(.vtk),那么可以用pcl工具查看: 1.安装pcl,官网链接点击打开链接 sudo add-apt-reposito ...

  2. Manthan, Codefest 18 (rated, Div. 1 + Div. 2) F 单调栈 + 贡献 + 计数

    https://codeforces.com/contest/1037/problem/F 题意 function z(array a, integer k): if length(a) < k ...

  3. windows上安装python2和python3虚拟环境

    一.windows上安装 1.安装python 分别安装了Python2和Python3 python3.7默认安装目录 C:\Users\Administrator\AppData\Local\Pr ...

  4. Java连载1-概述&常用的dos命令

    本想写完那两个再开始新的,然而客观条件不允许,之前从未接触过Java,从零开始吧​!!! 一.概述 C盘下​:programme file 一般为64位程序安装的目录,programme file(X ...

  5. HTML+CSS基础 border css属性 Div块 盒子

    border  css属性 边框颜色 border-color:red/#ffffff/rgb()默认为黑色 边框样式 border-style:solid (实线) dashed (虚线).默认为n ...

  6. ocelot性能测试

    网上搜索发现多篇文章指出ocelot的性能有问题,可是在ocelot项目issue提问中,维护者指出,ocelot的性能问题不大.瓶颈在于.net的httpclient. 我参考文章 https:// ...

  7. 【java提高】---patchca生成验证码

    Java使用patchca生成验证码        Patchca是Piotr Piastucki写的一个java验证码开源库,打包成jar文件发布,patchca使用简单但功能强大. 本例实现了自定 ...

  8. 开源工作流引擎 Workflow Core 的研究和使用教程

    目录 开源工作流引擎 Workflow Core 的研究和使用教程 一,工作流对象和使用前说明 二,IStepBuilder 节点 三,工作流节点的逻辑和操作 容器操作 普通节点 事件 条件体和循环体 ...

  9. 怎么把使用vuepress搭建的博客部署到Github Pages

    推荐在这里阅读效果更佳 背景 网上搜了很多教程,包括官网的教程,但是还是费了一番功夫, 如果你使用自动化部署脚本部署不成功的话,可以参考我的这个笨方法 这是部署后的效果 前提 我假设你本地运行OK, ...

  10. 切换tab栏echarts错位的问题

    在使用echarts的时候页面中有tab栏的时候经常遇到echarts错位的情况 解决方法一.在点击tab栏的时候进行页面中的echarts初始化 在多层tab栏存在的时候eachrts的容器布局是百 ...