day35-mysql之表的详细操作

表操作

1.数据类型

建表的时候,字段都有对应的数据类型

# 整型
# 浮点型
# 字符类型(char与varchar)
# 日期类型
# 枚举与集合

2.约束条件

# primary key
# unique key
# not null

创建表的完整语法:

create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
); 

注意:

# 1. 在同一张表中,字段名不能相同
# 2. 宽度和约束条件可选,字段名和类型是必须的
# 3. 最后一个字段后不能加逗号!

补充:
# 1.宽度指的是对存储数据的限制
create table userinfo(name char);
insert into userinfo values('jason');
"""
1.没有安全模式的数据库版本,能够存放数据但是只会存进去一个j
2.最新数据库版本直接报错提示无法存储:Data too long for column 'name' at row 1
"""

2.约束条件初识>>> null 与 nut null

create table t1(id int,name char not null);
insert into t1 values(1,'j'); # 正常存储
insert into t1 values(2,null); # 报错# 总结 类型与约束条件区别
# 类型:限制字段必须以什么样的数据类型存储
# 约束条件:约束条件是在类型之外添加一种额外的限制

 

二 基本数据类型

2.1 整型

# 分类:TINYINT SMALLINT MEDIUMINT INT BIGINT# 作用:存储年龄,等级,id,各种号码等

类型存储范围:参考图片<http://www.cnblogs.com/linhaifeng/articles/7233411.html>验证整型字段有无符号及范围

用法

create table t1(x tinyint);
insert into t1 values(128),(-129);create table t2(x tinyint unsigned);
insert into t2 values(-1),(256);create table t3(x int unsigned);
insert into t3 values(4294967296);

疑问:**类型后面的宽度能否改变字段存储的大小限制

create table t4(x int(8));
insert into t4 values(4294967296123);# 显示时,不够8位用0填充,如果超出8位则正常显示
create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);# create table t6(id int(10) unsigned);
# create table t7(id int(11));

强调:**对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据

严格模式补充

我们刚刚在上面设置了char,tinyint,存储数据时超过它们的最大存储长度,发现数据也能正常存储进去,只是mysql帮我们自动截取了最大长度。但在实际情况下,我们应该尽量减少数据库的操作,缓解数据库的压力,让它仅仅只管理数据即可,这样的情况下就需要设置安全模式show variables like "%mode%"; # 查看数据库配置中变量名包含mode的配置参数
# 修改安全模式
set session # 只在当前操作界面有效
set global # 全局有效

set global sql_mode ='STRICT_TRANS_TABLES'
# 修改完之后退出当前客户端重新登陆即可

2.2 浮点型

* 分类:FLOAT DOUBLE decimal
* 应用场景:身高,体重,薪资字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数三者最大整数位和小数位对比:# 存储限制
float(255,30)
double(255,30)
decimal(255,30)# 精确度验证
create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);

2.3 字符类型

* 分类
* char(定长)
* varchar(变长)
* 作用:姓名,地址,描述类信息create table t10(name char(4)) # 超出四个字符报错,不够四个字符空格补全
create table t11(name varchar(4)) # 超出四个字符报错,不够四个有几个就存几个# 验证存储限制
insert into t12 values('hello');
insert into t13 values('hello');
# 验证存储长度
insert into t12 values('a'); #'a '
insert into t13 values('a'); #'a'
select * from t12
select * from t13 # 无法查看真正的结果

select char_length(name) from t12
select char_length(name) from t13 # 仍然无法查看到真正的结果

首先应该肯定的是在硬盘上存的绝对是真正的数据,但显示的时候mysql会自动将末尾的空格取掉"""
# 如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
# 退出客户端重新登陆
select char_length(x) from t12; #4
select char_length(y) from t13; #1# 针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中。但是会在读出结果的时候自动取掉末尾的空格

char与varchar的使用区别

name char(5)
# 缺点:浪费空间
# 优点:存取速度都快
egon alex lxx jxx txxname varchar(5)
# 缺点:存取速度慢
# 优点:节省空间
1bytes+egon 1bytes+alex 1bytes+lxx 1bytes+jxx 1bytes+txx 

2.4 时间类型

分类* date:2019-05-01
* time:11:11:11
* Datetime: 2019-01-02 11:11:11
* Year:2019测试create table student(
id int,
name char(16),
born_year year,
birth date,
study_time time,
reg_time datetime
);
insert into student values(1,'egon','2019','2019-05-09','11:11:00','2019-11-11 11:11:11');

2.5 枚举与集合类型

* 分类:
枚举enum 多选一
集合set 多选多

* 测试: create table user( id int, name char(16), gender enum('male','female','others') ); insert into user values(1,'jason','xxx') # 报错 insert into user values(2,'egon','female') # 正确! create table teacher( id int, name char(16), gender enum('male','female','others'), hobby set('read','sleep','sanna','dbj') ); insert into teacher values(1,'egon','male','read,sleep,dbj') # 集合也可以只存一个

 

三 约束条件

PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值UNSIGNED 无符号
ZEROFILL 使用0填充

3.1 not null+default

create table user(
id int,
name char(16)
);
insert into user values(1,null) # 可以修改

alter table user modify name char(16) not null;
insert into user(name,id) values(null,2); # 报错 插入数据可以在表名后面指定插入数据对应的字段

create table student(
id int,
name char(16) not null,
gender enum('male','female','others') default 'male'
)
insert into student(id,name) values(1,'jason') # 成功

3.2 unique

# 单列唯一
create table user1(
id int unique, 
name char(16)
);
insert into user1 values(1,'jason'),(1,'egon') # 报错
insert into user1 values(1,'jason'),(2,'egon') # 成功# 联合唯一
create table server(
id int,
ip char(16),
port int,
unique(ip,port)
)
insert into server values(1,'127.0.0.1',8080);
insert into server values(2,'127.0.0.1',8080); # 报错
insert into server values(1,'127.0.0.1',8081);

3.3 primary key+auto_increment

# 单从约束角度来说primary key就等价于not null unique
create table t11(id int primary key);
desc t11;
insert into t11 values(1),(1); # 报错
insert into t11 values(1),(2);# 除了约束之外,它还是innodb引擎组织数据的依据,提升查询效率

强调:

1.一张表中必须有且只有一个主键,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键

create table t12(
id int,
name char(16),
age int not null unique,
addr char(16) not null unique
)engine=innodb;
desc t12;

2.如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询了
索引:类似于书的目录,没有主键就相当于一页一页翻着查
3.一张表中通常都应该有一个id字段,并且通常将改id字段作成主键

# 联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键
create table t18(
ip char(16),
port int,
primary key(ip,port)
);
desc t18;# 主键id作为数据的编号,每次最好能自动递增
create table t13(
id int primary key auto_increment,
name char(16)
);
insert into t13('jason'),('jason'),('jason'); # id字段自动从1开始递增
# 注意:auto_increment通常都是加在主键上,并且只能给设置为key的字段加

补充:

delete from tb1;
强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0,
所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录
delete from tb1 where id > 10;如果要清空表,使用truncate tb1;
作用:将整张表重置,id重新从0开始记录

 

  

转载于:https://www.cnblogs.com/Ryan-Yuan/p/11377127.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重磅!Nature子刊发布稳定学习观点论文:建立因果推理和机器学习的共识基础...

来源&#xff1a;AI科技评论整理&#xff1a;AI科技评论2月23日&#xff0c;清华大学计算机系崔鹏副教授与斯坦福大学Susan Athey&#xff08;美国科学院院士&#xff0c;因果领域国际权威&#xff09;合作&#xff0c;在全球顶级期刊Nature Machine Intelligence&#xff08;影…

卸载mysql

先停止所有mysql有关进程。 打开控制台:依次输入以下命令 sudo rm /usr/local/mysqlsudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOMsudo rm -rf /Library/PreferencePanes/My*vim /etc/hostconfig and removed the line MYSQLCOM-YES-rm -rf ~/Libr…

​数据集拥有自己的世界观?不,其实还是人的世界观

来源&#xff1a; AI科技评论编译&#xff1a;Antonio编辑&#xff1a;陈彩娴伴随深度学习的不断日常化&#xff0c;数据集中的偏见&#xff08;bias&#xff09;和公正性&#xff08;fairness&#xff09;已经成为一个热门研究方向。偏见在AI领域是一个很棘手的话题&#xff1…

day36-表关系(外键)

1 表关系之外键 1.1 前戏之一对多关系 # 定义一张部门员工表 id name gender  dep_name dep_desc 1 jason male 教学部 教书育人 2 egon male 外交部 漂泊游荡 3 tank male 教学部 教书育人 4 kevi…

图灵奖获得者Yann LeCun:未来几十年AI研究的最大挑战是「预测世界模型」

来源&#xff1a;机器学习研究组订阅LeCun 认为&#xff0c;构造自主 AI 需要预测世界模型&#xff0c;而世界模型必须能够执行多模态预测&#xff0c;对应的解决方案是一种叫做分层 JEPA&#xff08;联合嵌入预测架构&#xff09;的架构。该架构可以通过堆叠的方式进行更抽象、…

总结出来的一些ASP.NET程序性能优化的注意事项[不断补充]

只是提了一个基本概念&#xff0c;具体要点要是需要查找资料。本文的各个要点&#xff0c;都是从网上大量文章中总结出来。参考资料&#xff1a;http://www.cnblogs.com/lxinxuan/archive/2006/11/06/551980.htmlasp.net程序性能优化总结 ——备忘具体技术 细节请查询 1. …

可重构人工智能设备展现出智能化前景

PURDUE UNIVERSITY来源&#xff1a;IEEE电气电子工程师一项新的研究发现&#xff0c;一种适应性强的新设备可以转换成人工智能硬件所需的所有关键电子元件&#xff0c;在机器人和自治系统中有潜在的应用。以大脑为灵感或“神经形态”的计算机硬件旨在模仿人脑从经验中自适应学习…

gin+vue的前后端分离开源项目

该项目是ginvue的前后端分离项目&#xff0c;使用gorm访问MySQL&#xff0c;其中vue前端是使用vue-element-admin框架简单实现的&#xff1b; go后台使用jwt&#xff0c;对API接口进行权限控制。此外&#xff0c;Web页面在token过期后的半个小时内&#xff0c;用户再次操作会自…

day37-数据库分组查询

1. 单表查询 2. 多表查询 ## 单表查询 前期表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum(male,female) not null default male, #大部分是男的 age int(3) unsigned not null default 28, hire_date date not null, …

指挥控制智能化现状与发展

来源&#xff1a;人机与认知实验室&#xff10; 引言人工智能&#xff08;AI&#xff09;技术现已进入一个新的高速增长期&#xff0c;是公认最有可能改变未来世界的颠覆性技术。从“深蓝”战胜卡斯帕罗夫&#xff0c;到机器学习技术在语音识别、图像识别和自然语言处理等诸多…

IEEE 2022年网络、计算机和通信国际学术研讨会(ISNCC2022)

2022年网络、计算机和通信国际学术研讨会&#xff08;International Symposium on Networks, Computers andCommunications,2022&#xff09;主办&#xff1a;电气与电子工程师学会&#xff08;IEEE&#xff09;、IEEE 通信学会&#xff08;IEEE Communications Society&#x…

@RequestParam和@RequestBody的区别

RequestBody是用来接收 application/json需要解析json字符串&#xff0c;然后通过json获取参数,这里用到是fastjson public CommonReturnType login(RequestBody String jsonStr) {JSONObject requestJson JSON.parseObject(jsonStr);String telphone(String)requestJson.get…

【重要征稿】IEEE 2022年网络、计算机和通信国际学术研讨会(ISNCC2022)

2022年网络、计算机和通信国际学术研讨会&#xff08;International Symposium on Networks, Computers andCommunications,2022&#xff09;主办&#xff1a;电气与电子工程师学会&#xff08;IEEE&#xff09;、IEEE 通信学会&#xff08;IEEE Communications Society&#x…

C++ 类设计核查表

参考&#xff1a;https://www.jianshu.com/p/01601515ca31 《大规模C程序设计》 函数接口&#xff1a; 1.运算符或非运算符函数&#xff1f; 2.自由或成员运算符&#xff1f; 3.虚函数或非虚函数&#xff1f; 4.纯虚成员函数或非纯虚成员函数&#xff1f; 5.静态或非静态成员函…

CICC《城市大脑建设规范》标准建设启动会在京召开

来源&#xff1a;中国指挥与控制学会 2022年2月27日下午&#xff0c;中国指挥与控制学会&#xff08;以下简称&#xff1a;CICC&#xff09;在京召开了《城市大脑建设规范》团体标准启动会。启动会邀请到了中国电信、中国电科、中国电子、联想、科大讯飞、世纪互联、北京市标准…

day38-数据库应用软件

# mysql select distinct 字段1&#xff0c;字段2&#xff0c;。。。 from 表名 where 分组之前的过滤条件 group by 分组条件 having 分组之后过滤条件 order by 排序字段1 asc&#xff0c;排序字段2 desc limit 5,5as语法中给某个查询结果起别名的时候需要把查询语句中…

世界被一种神秘的数学力量彻底改变了

来源&#xff1a;《微积分的力量》编辑&#xff1a;nhyilin01科学或许是唯一的神上世纪60年代&#xff0c;小说家赫尔曼沃克&#xff08;Herman Wouk&#xff09;正在为他计划中的巨著《战争风云》做调研&#xff0c;他去加州理工学院采访了参与过原子弹研发的物理学家&#xf…

程序异常退出后,托盘残留图标清理方法(C#)

程序猿对于宕机再熟悉不过了&#xff0c;如果一个程序异常退出&#xff0c;那我们只能在Windows日志中找到它的踪迹&#xff1b;如果它是一个托盘程序&#xff0c;异常退出后&#xff0c;它会停留在托盘中久久不能离去&#xff0c;直到我们的鼠标从它身上划过&#xff1b;如果一…

汪劲:生命系统中的非平衡物理学

来源&#xff1a;集智俱乐部作者&#xff1a;汪劲编译&#xff1a;袁郭玲编辑&#xff1a;邓一雪导语非平衡物理学将在生物应用中发挥重要作用&#xff0c;如酶动力学、新陈代谢、基因调控&#xff0c;细胞的结构、功能和动力学&#xff0c;生理学、癌症、分化和发育&#xff0…

虚拟现实和元宇宙的最大短板在哪里?

出品&#xff1a;科技智谷编辑&#xff1a;王晓东虚拟现实和元宇宙面临的最大问题不是技术问题而是功能问题。在所有关于Metaverse以及虚拟现实或VR将给我们的生活带来什么的讨论中&#xff0c;有一个很大的功能问题被忽略了。正如几大巨头宣传的那样&#xff0c;Metaverse是一…