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

时间:2022-09-24 20:58:10

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) 字段与字段类型

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

- 整型:
- 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);

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

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

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

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

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

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

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

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

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. 关于angularjS与jQuery框架的那些事

    这篇文章主要介绍了jQuery和angularJS的区别浅析,本文着重讲解一个熟悉jQuery的程序员如何应对angularJS中的一些编程思想的转变吗,需要的朋友可以参考下 最近一直研究angula ...

  2. WCF android调用

    http://www.cnblogs.com/cg6811568/archive/2013/05/23/3095119.html

  3. 简单几何(线段相交) POJ 2653 Pick-up sticks

    题目传送门 题意:就是小时候玩的一种游戏,问有多少线段盖在最上面 分析:简单线段相交,队列维护当前最上的线段 /******************************************** ...

  4. ZOJ1648 Circuit Board(线段相交)

    裸的判断线段相交

  5. oracle 不转义 &

    在为表加注释,遇到有些注释包含'&' 但又不想写eacape, 在sqlplus下,set define off   即可将&输入到数据库中.

  6. Android开发技巧——去掉TextView中autolink的下划线

    我们知道,在布局文件中设置textview的autolink及其类型,这时textivew上会显示link的颜色,并且文字下面会有一条下划线,表示可以点击.而在我们在点击textview时,应用将根据 ...

  7. ObjectiveC 深浅拷贝学习

    在ObjC中,什么是深浅拷贝? 深浅拷贝分别指深拷贝和浅拷贝,即mutableCopy和copy方法. copy复制一个不可变对象,而mutableCopy复制一个mutable可变对象. 什么时候用 ...

  8. iOS开发之微信平台分享

    在工程开始之前应该先准备在微信开放平台申请的appid,从微信平台下载sdk文件.下面开始步骤讲述 1.先将SDK导入工程目录 2.在info.plist文件设置相关信息,包括appid标识.白名单 ...

  9. Java中通过Class的反射来获取方法

    本文转自:http://z3sm2012.iteye.com/blog/1933227 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类 ...

  10. 《转载》spring定时任务详解(@Scheduled注解)

    本文转载自爱如指间沙 //每一个小时执行一次 @Scheduled(cron = "0 0 * * * ?") public void saveDailyScoreSchedule ...