百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

MySQL基本数据类型与约束条件 mysql中常用的约束有哪些

qiyuwang 2024-10-08 10:23 28 浏览 0 评论

昨日内容回顾

  • 数据存储的演变
# 方向:
	朝着更加统一和方便管理
  • 数据库的发展史
# 由本地保存逐步演变为线上保存
  • 数据库的本质
# 本质上就是一款CS架构的软件

"""
数据库:
	在不同场景可能对应不同的解释
"""
  • 数据库的分类
# 1.关系型数据库
	有固定的表结构
	表与表之间可以可以建立代码层面的关系
	MySQL Oracle PostgreSQL MariDB sqlite db2 access sql server...

# 2.非关系型数据库
	没有固定的表结构
	数据存储全部采用 K:V 键值对的形式
	radis mongodb memcache...
  • MySQL的下载与使用
# MySQL版本:
	5.6 Windows学习推荐
	5.7 目前企业正在过度
	8.0 Mac本可以直接安装
    
# 直接访问官网一步步下载

bin文件夹
	mysqld.exe		服务端
	mysql.exe		客户端
    
data文件夹

mydefault.ini

readme

# 简单的试试
	cd切换到bin路径下
		先启动服务端mysqld
		在启动客户端mysql
  • MySQL基本配置
1.环境变量的添加

2.系统服务制作(开机自启)
	mysqld --install
	net start mysql
	net stop mysql
	musqld --remove
  • 重要概念
# 库:文件夹

# 表:文件

# 记录:文件内的一行行数据
  • 基本SQL语句
# 1.针对库的
	create database 库名;  # 创建库
	show databases;  # 查看所有库
	show create database 库名;  # 定向查看某个库
	alter database 库名 charset='gbk';  # 修改库编码
	drop database 库名;  # 删除库
    
	select database();  # 查看当前所在的库名
	use 库名;  # 切换到指定库
    
    
# 2.针对表的
	create table 表名(字段名1 字段类型,字段名2 字段类型);  # 创建表
	show tables;  # 查看当前库下所有的表
	show create table 表名;  # 查看指定的表
	describe 表名;  # 查看表的具体信息
	desc 表名;  # 查看表的具体信息(简写)
	alter table 原表名 rename 新表名;  # 修改表名
	alter table 表名 change 原字段名 新字段名 新类型;  # 同时修改字段名和类型
	alter table 表名 modify 字段名 新字段类型;  # 单独修改字段类型
	drop table 表名;  # 删除表
    
    
# 3.针对记录的
	insert into 表名 values(数据,数据,数据);  # 添加单条数据
	insert into 表名 values(),(),();  # 添加多条数据
	select * from 表名;  # 查看表中的所有数据内容
	update 表名 set 字段名='新数据' where 筛选条件
	delete from 表名 where 筛选条件;  # 删除记录内容
  • 配置文件
# \s 查看基本配置信息

# MySQL5.6版本默认的内部编码不是统一的 可能会造成乱码问题

# 解决乱码问题:
	主要以 mydefault.ini 及创建其副本并命名为 my.ini 
	具体配置内容直接拷贝

今日内容概要

  • 存储引擎
  • MySQL基本数据类型
  • 约束条件

内容详细

1.存储引擎

# 1.存储引擎可以堪称是处理数据的不同方式

# 2.查看存储引擎的方式
	show engines;
    
# 3.需要掌握的四个存储引擎
	MyISAM
    	MySQL5.5之前默认的存储引擎
        不支持事务、行级锁和外键 针对数据的操作较于InnoDB不够安全
        但数据的存取速度较于InnoDB更快
        
	InnoDB
		MySQL5.5之后默认的存储引擎
		支持事务、行级锁和外键 针对数据的操作更加的安全
    
	BLACKHOLE
		写入其中的数据都会立刻消失 类似于垃圾处理站    
    
	MEMORY  
		基于内存存取数据
		速度最快 但是一旦断电立刻丢失
        
        
# 4.存储引擎创建表的不同点
	create table t1(id int) engine=myisam;
	create table t2(id int) engine=innodb;
	create table t3(id int) engine=memory;
	create table t4(id int) engine=blackhole;
"""
MyISAM会创建三个文件:
	.frm	表结构文件
	.MYD	表数据文件
	.MYI	表索引文件(索引是用来加快数据查询的)
	
InnoDB会创建两个文件:
	.frm	表结构文件
	.ibd	表数据和表索引文件
	
memory会创建一个文件:
	.frm	表结构文件

blackhole会创建一个文件:
	.frm	表结构文件
"""

2.MySQL基本数据类型之整型与浮点型

# 1.整型
	tinyint smallint int bigint
	不同的int类型能够存储的数字范围是不一样的
"""
1.要注意是否存负数(正负号需要占一个比特位)
2.针对手机号码只能用bigint

3.是否需要正负号
	create table t5(id tinyint);
	insert into t5 values(-999),(999);
	结论:所有的int类型默认都需要正负号


	create table t6(id tinyint unsigned);  # 移除正负号
	insert into t6 values(-999),(999);
"""


# 2.浮点型
	float double decimal
	float(255,30)  # 总共255位 小数位占30位
	double(255,30)  # 总共255位 小数位占30位
	decimal(65,30)  # 总共65位 小数位占30位
"""
三者不同之处:
	create table t7(id float(255,30));
	create table t8(id double(255,30));
	create table t9(id decimal(65,30));
	
	insert into t7 values(2.222222222222222222222222);
	insert into t8 values(2.222222222222222222222222);
	insert into t9 values(2.222222222222222222222222);
	结论:三者的精确度不一样
		float < double < decimal
		
		
至于到底使用哪个:
	一般情况下 小数点后面只保留两位 float就足够了
	如果从事高精密行业 可以考虑更高精确度
	
有时候很多看似需要用数字存储的数据 可能都是存的字符串
字符串没有精确度一说

python本身对数字的精确度很低 之所以能够从事人工智能和数据分析完全得益于功能强大的模块
"""

3.MySQL基本数据类型之字符类型

# char(4)
	定长类型  最多只能存四个字符 多了报错少了自动空格填充至四个
    
# varchar(4)
	变长类型  最多只能存四个字符 多了报错少了有几个则存几个
    
# 多了报错特性
	create table t10(id int, name char(4));
	create table t11(id int, name varchar(4));
	insert into t10 values(111,'jason')
	insert into t11 values(222,'jason')
	
针对5.6版本超出范围不会报错 而是自动帮你截取并保存(此行为不合理)
	解决方式1:修改配置文件(永久 不推荐)
	解决方式2:命令修改(暂时)
		1. show variables like '%mode%';
		2. set global sql_mode = 'strict_trans_tables';
		set session  # 当前窗口有效
		set global  # 当前服务端有效
		修改完毕后退出客户端重新进入即可
		
		再次执行插入文本指令 直接报错


# 定长与变长特性
	insert into t1o values(333,'k');
	insert into t11 values(444,'l');
	"""    
	此时看不出不同
	可以利用统计某个字段数据的长度  char_length()
	select char_length(name) from t10 where id=333;
	底层确实会填充  但是取出来的时候又会自动去除
	加上下面指令后 退出重新进入客户端再进行验证即可:
	set global sql_mode = 'strict_trans_tables,pad_char_to_full_length';
    """

4.char与varchar的对比

# char
	优势:整存整取 速度快
	劣势:浪费存储空间
        
# varchar
	优势:节省存储空间
	劣势:存取数据的速度较char慢
"""
char(5) 存五位 取五位
	jasontony kevintom  oscartank sean jerry
	
varchar(5)
	1bytes+jason1bytes+tony1bytes+kevin1bytes+tom
	存:先计算数据的长度
	取:先获取报头的数据
"""

# 以前几乎都是char 现在很多情况下使用varchar
	进了公司之后 会通过邮件告诉你每个字段的英文名和中文名及类型等项目的诸多信息
    
# 补充:在创建字段的时候可以加上相应的注释
	create table t12(
		id int comment '序号',
		name char(4) comment '姓名'
	);

5.整型中括号内数字的作用

create table t13(id int(3));
insert into t13 values(555555555);
"""
在整型中括号内的数字并不是用来限制存储的长度 而是用来控制展示的长度

我们以后在定义整型字段的时候 不需要自己添加数字 使用默认的就可以
"""

create table t14(id int(3) zerofill);
insert into t13 values(4);
# 结论:整型比较的特殊 括号中的数字是唯一一个不是用来限制存储长度的类型

6.枚举与集合类型

# 枚举
	多选一 关键字:enum()
create table user(
	id int,
	name varchar(32),
	gender enum('male','female','others')
);
insert into user values(1,'jason','男');  # 报错
insert into user values(2,'jason','male');  # 正常


# 集合
	多选多(包含多选一) 关键字:set()
create table userinfo(
	id int,
	name char(16),
	hobby set('ball','girl','man','others')
);

7.日期类型

# date	年月日

# datetime	年月日时分秒

# time	时分秒

# year	年份

create table client(
	id int,
	name varchar(36),
	reg_time date,
	bieth datetime,
	study_time time,
	join_time year
);
insert into client values(1,'jason','2021-11-11','2021-12-12 12:12:00','12:12:00',2022);

8.创建表的完整语法

create table 表名(
	字段名1 字段类型(数字) 约束条件,
	字段名2 字段类型(数字) 约束条件,
	字段名3 字段类型(数字) 约束条件
);
"""
1.字段名和字段类型时必须的
2.数字和约束条件是可选的 并且 约束条件可以有多个 中间空格隔开即可
3.最后一个语句的结尾一定不要加逗号!!!
"""

9.约束条件之not null

# 约束条件相当于是在字段类型的基础之上 添加的额外约束
	例:id int unsigned
    
# unsigned	让数字没有正负号

# zerofill	多余的使用数字0填充

# not null	非空
ceeate table t2(
	id int,
	name varchar(36) not null
);


"""
新增表数据的方式:
	方式一:
		按照字段顺序一一传值
		insert into t1 values(1,'jason');
		
	方式二:
		自定义传值顺序 或者不传值
		insert into t1(name,id) values('jason',1);
		insert into t1(id) values(1)
		在MySQL中不传数据 会使用关键字NULL填充意思就是空 类似于python的None
"""

10.约束条件之default

# default	默认值
	所有的字段都可以设置默认值 
	用户不给该字段传值则使用默认的 否则使用传了的
    
create table t1(
	id int default 911,
	name varchar(16) default 'jason'
);

11.约束条件之unique

# unique	唯一值

# 单列唯一
create table t2(
	id int,
	name varchar(32) unique
);
"""添加重复的name值时就会报错"""


# 联合唯一
create table t3(
	id int,
	host varchar(32),
	port int,
	unique(host,port)
);
"""
host 和 port两项合在一起值不能重复
"""

12.约束条件之primary key与auto_increment

# primary key	主键
	单从约束层面上来说 相当于 not null + unique  # 非空且唯一
	在此基础之上还可以加快数据的查询
    
"""
# InnoDB存储引擎规定了 一张表必须有且只有一个主键
	因为InnoDB是通过主键的方式来构造表的
	如果没有设置主键
    
	情况1:没有主键和其他约束条件
		InnoDB会采用隐藏的字段作为主键 不能加快数据的查询
		
	情况2:没有主键但是有非空且唯一的字段
		自动将该字段升级为主键	
		create table t4(
			id int,
			age int not null unique,
			pwd int not null unique
		);
# 结论:
	以后我们在创建表的时候一定要设置主键
	并且主键字段一般都是表的id字段(例:uid sid pid cid)
	例如:
		create table user(
			id int primary key,
			name varchar(32)             
		);
"""
    
    
# auto_increment	自增(只能给主键用)
"""
由于主键类似于数据的唯一标识 并且主键一般都是数字类型
我们在添加数据的时候不可能记住接下来的序号是多少 太麻烦

create table user1(
	id int primary key auto_increment,
	name varchar(32)
);
"""

13.自增的特性

# 自增不会因为删除操作而回退
	delete from无法影响自增
    
# 如果想要重置需需要使用truncate关键字
	truncate 表名  # 清空表数据并且重置主键值

原文链接:https://www.cnblogs.com/jgx0/p/15911484.html?utm_source=tuicool&utm_medium=referral

相关推荐

在Word中分栏设置页码一页两个页码的技巧!

施老师:在正常情况下,Word文档中一页只会出现一个页码。但在某种情况下,比如说:用了分栏后,我们希望一页中出现两个页码,那应该如何实现呢?今天,就由宁双学好网施老师来为大家讲一下,利用域来实现一页两...

如何在关键时刻向上自荐(如何在关键时刻做出正确选择)

抓住机会,挺身而出有种时刻叫“关键时刻”,关键时刻,作为一个认为自己有能力的、训练有素的人,应该考虑挺身而出,甚至应该不考虑就挺身而出。...

WPS Word:跨页的文档表格,快速调整为一页。#Excel

如何快速将跨页的文档表格调整为一页?需要根据两种情况分别处理。如果表格所有行的行高相同,调整为一页的方法有两种。第一种方法是将光标移动到表格内,然后将鼠标移动到表格右下角的方框处,按住鼠标左键向上拖动...

word文档插入下一页分节符(word下一页分页符)

在word文档中,对文档页面进行分页是特别常见的操作,其中的下一页分节符也是用得比较多的,但是一些人不太清楚在哪里设置,也不知道它具体能实现的功能是什么。接下来看看如何在word文档中插入下一页分节符...

word文档如何设置某一页纸张的方向

word文档页面方向有横向和纵向,纵向是默认的纸张方向,有时我们需要将页面设置为横向,或只设置其中某一页方向,应该怎么操作呢?一起来看看下面的详细介绍第一步:...

word怎么单独设置一页为横向(word2019怎样设置单独一页为横向)

word里面其中一页可以改为横向的吗?经过实际操作发现是完全可以的。...

Word如何设置分栏,如何一页内容同时显示一栏和两栏

我们使用Word文档,有时需要用到两栏的排版,甚至一页内容同时包含一栏和两栏的排版,这种格式怎么设置呢?具体步骤如下:首先是两栏排版的设置,直接点击Word文件上方工具栏【布局】,选择【分栏】下面的【...

Word怎么分页?这三个方法可以帮到你

我们不仅可以利用Word编辑文档,还可以编辑文集呢。但是有时候会出现两个部分的文章长短不一,我们需要对文档进行分页处理。这样可以方便我们对文档进行其他操作。那么Word怎么分页呢?大家可以采用下面这...

Word内容稍超一页,如何优化至单页打印?

如何将两页纸的内容,缩到一页打印呢?有时候一页纸多一点内容,我们完全可以缩一下,放到一页来打印。...

[word] word 表格如何跨行显示表头、标题

word表格如何跨行显示表头、标题在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是,教你简单的方法操作设置Wo...

Word表格跨页如何续上表?(word如何让表格跨页不断掉)

长文档的表格跨页时,你会发现页末空白太多了,这时要怎么调整?选中整张表格,右击【表格属性】,点击【行】选项,之后勾选【允许跨页断行】,点击确定即可解决空白问题。...

Word怎么连续自动生成页码,操作步骤来了!

Word怎么连续自动生成页码,操作步骤来了!...

word文档怎么把两页合并成一页内容?教你4种方法

word怎么把两页合并成一页?word怎么把两页合并成一页?用四种方法演示一下。·方法一:把这一个文档合并成一页,按ctrl加a全选文档,然后右键点击段落,弹出的界面行距改成固定值,磅值可以改小一点,...

如何将Word中的一页的纸张方向设置为横向?这里提供详细步骤

默认情况下,MicrosoftWord将页面定向为纵向视图。虽然这在大多数情况下都很好,但你可能拥有在横向视图中看起来更好的页面或页面组。以下是实现这一目标的两种方法。无论使用哪种方法,请注意,如果...

Word横竖混排你会玩吗?(word横排竖排混合)

我们在用Word排版的时候,一般都是竖版格式,但偶尔会需要到一些特殊的版式要求,比如文档中插入的一个表格,横向的内容比较多,这时就需要用到横版,否则表格显示不全。这种横竖版混排的要求,在Word20...

取消回复欢迎 发表评论: