龙空技术网

MySQL基本数据类型与约束条件

java小悠 120

前言:

而今咱们对“mysql约束条件男或女”可能比较关注,各位老铁们都需要学习一些“mysql约束条件男或女”的相关文章。那么小编也在网上汇集了一些关于“mysql约束条件男或女””的相关资讯,希望各位老铁们能喜欢,小伙伴们一起来学习一下吧!

昨日内容回顾数据存储的演变

# 方向:	朝着更加统一和方便管理
数据库的发展史
# 由本地保存逐步演变为线上保存
数据库的本质
# 本质上就是一款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.inireadme# 简单的试试	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.针对手机号码只能用bigint3.是否需要正负号	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 表名  # 清空表数据并且重置主键值

原文链接:

标签: #mysql约束条件男或女