MySql5.6表操作
MySql5.6表操作
- 数据类型
整型
浮点型
字符类型
日期类型
枚举类型与集合类型
- 约束条件
Primary key
Unique key
Not null
Foreign key
创建表的完整语法
Create table 表明(字段名1 类型【(宽度) 约束条件】)
注意事项:
- 在同一张表中,字段的名字不能相同
- 宽度和约束条件可以选,字段名和类型是必须的
- 当输入多个字段的时候最后一个字段末尾不能加逗号
宽度:
- 宽度是对村塾数据的限制
创建一个表测试下:
mysql> create database db1;
mysql> use db1;
mysql> create table userinfo(name char);
mysql> insert into userinfo values('jason');
ERROR 1406 (22001): Data too long for column 'name' at row 1
在没有安全模式的数据库版本,默认能够存放数据,但是只会存进去一个j
- 约束条件 null 与not null
创建一个表测试下
mysql> create table t1(id int,name char not null);
mysql> insert into t1 values(1,'j');
mysql> insert into t1 values(2,null);
ERROR 1048 (23000): Column 'name' cannot be null
提示内容不能为空
#总结 类型与约束条件的区别
# 类型:限制字段必须以什么样的数据类型存储
#约束条件:约束条件是在指定的类型之外添加的一种额外限制
基本数据类型
整型:
分类:TINYINT SMALLINT MEDIUMINT INT BIGINT
作用:存储年龄、等级、id、各种号码等
验证:
验证整型字段有误符号及范围;
Signed——有符号
Unsigned——无符号
mysql> create table t2(x tinyint);
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t2 values(-128);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t2 values(-129);
ERROR 1264 (22003): Out of range value for column 'x' at row 1
mysql> insert into t2 values(256);
ERROR 1264 (22003): Out of range value for column 'x' at row 1
只能插入指定范围内的数值
mysql> create table t3(x tinyint unsigned);
Query OK, 0 rows affected (0.00 sec)
类型后面的宽度是否能够改变字段存储的大小限制
mysql> create table t5(x int(8));
Query OK, 0 rows affected (2.43 sec)
mysql> insert into t5 values(111111111);
mysql> insert into t5 values(12345);
mysql> select * from t5;
+-----------+
| x |
+-----------+
| 111111111 |
| 12345 |
+-----------+
这里可以看到设置范围为8位,插入数据的时候插入9位完整显示,不足8位数值前面用0自动补全。
对于正想来说,数据类型后的快递并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全不虚指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据。
严格模式:
上面当数据超过最大存储长度,发现数据也能正常存储进去,只是mysql帮我们截取了最大长度,在实际情况下为了缓解数据库压力,让它仅仅只管理数据即可,这样的情况下就需要设置安全模式。
查看数据库配置中变量名包含mode的配置参数
修改安全模式
Set session #在当前操作界面有效
Set global #全局有效
Set global sql_mode =' STRICT_TRANS_TABLES'
修改完成后退出当前客户端重新登录即可
浮点型:
分类:float double decimal
应用场景:身高、体重、薪资
字段显示特点(5,3)前一位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);
可以看到不同的字段限制类型精准度不同
字符类型:
分类:char(定长) varchar(边长)
作用:姓名、地址、描述类信息
mysql> create table t15(name char(4));
mysql> create table t16(name varchar(4));
超过四个字符就报错
mysql> insert into t15 values('hello');
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into t16 values('hello');
ERROR 1406 (22001): Data too long for column 'name' at row 1
在范围内可以正常保存,
mysql> insert into t15 values('he');
mysql> insert into t15 values('he');
通过查看结果看不出效果:
mysql> select * from t15;
+------+
| name |
+------+
| he |
+------+
mysql> select * from t16;
+------+
| name |
+------+
| he |
+------+
通过char_length来查看长度
这里还是看不出效果
修改mysql的mode模式,
mysql> set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
退出客户端重新登录
针对char类型,mysql在存储时会将数据用空格补全全部放入到硬盘中,但是会在读出结果的时候自动取掉末尾的空格
Char 和varchar的使用区别
Char:
优点:存取速度快
缺点:浪费空间
Varchar:
优点:节省空间
缺点:存取速度慢
时间类型
分类:
data:2019-05-13
time:11:11:11
Datetime:2019-01-02 11:11:11
Year:2019
测试:
mysql> create table student( id int, name char(16), test_year year, test_date date, test_time time, test_datetime datetime );
mysql> insert into student values(1,'egon','2019','2019-05-13','16:42:11','2019-05-13 16:42:11');
枚举与集合
分类:
枚举enum多选一
集合set多选多
测试
在gender字段中使用枚举多选一,只能选择规定中的内容
mysql> create table user( id int, name char(16), gender enum('male','female','other') );
插入数据报错,
mysql> insert into user values(1,'jason','xxx');
提示gender类型值错误
mysql> create table teacher(id int,name char(16),gender enum('male','female','others'),hobby set('read','sleep','sanna','obj'));
mysql> insert into teacher values(1,'egon','male','read,sleep');
结束条件:
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
FOREING KEY (FK) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的
AUTO_INCREMENT 标识该字段的值自动增长(证书类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用0填充
not null+default
不为空设置默认值
mysql> create table user2 id int, name char(16));
mysql> insert into user2values(1,'null');
mysql> alter table user2modify name char(16) not null:
删除表中数据,转换name字段类型设置为非空类型
name字段不以插入空值,报错
mysql> create table student( id int, name char(16) not null, gender enum('male','female','other') default 'male' );
Unique:标识该字段的值是唯一的
单列唯一
mysql> create table user3( id int unique, name char(16) );
插入数据失败,其中id值重复
插入数据成功,id值不能相同,确保唯一
联合唯一:多个值唯一
mysql> create table user4( id int, ip char(16), port int, unique(ip,port) );
其中ip和port为联合唯一值
插入相同的ip和port报错
插入相同ip不同port插入成功
插入不同ip相同port成功
Primary key+auth_increment
# 但从约束角度来说primary key就等价于not null unique
mysql> create table t20(id int primary key);
插入相同数据报错
插入不同数据正常
#除了约束之外,还是innodb引擎组织数据的依据,提升查询效率
强调:
一张表中必须有且只有一个逐渐,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键
mysql> create table t21(id int,name char(16),age int not null unique,addr char(16) not null unique)engine=innodb;
2、表中没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着在你查询的时候无法根据这个主键字段加速查询
索引:类似于书目录,没有主键就需要一页一页翻着查找(相当于全文查找)
- 一张表中通常都应该有一个id字段,并且通常将id'字段作为主键
#联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键
mysql> create table t22(ip char(16),port int,primary key(ip,port));
# 主键id作为数据的编号,每次最好能自动递增
mysql> create table t23( id int primary key auto_increment, name char(16) );
插入数据,插入name数据,id自动生成
mysql> insert into t23(name) values('egon1'),('egon2'),('egon3');
删除其中一条数据,在插入一条数据删除的那个数据的id号不会再使用
插入新的数据查看效果
清空整个表插入数据还是这个各子,如果想手动插入可以指定id号
清空整张表从零开始使用truncate 表明
作用:将整张表重置,id重新从0开始记录
MySql5.6表操作的更多相关文章
- python全栈开发day54-mysql库操作、表操作、数据类型、完整性约束
一.昨日内容回顾 1.mysql的安装 1).解压文件 添加环境变量bin 2).初始化mysql生成数据data文件夹: mysqld --initialize-insecure 3).mysqld ...
- MySQL之库、表操作
一.库操作 创建库 create database 库名(charset utf8 对库的编码进行设置,不写就用默认值) 库名可以由字母.数字.下划线.特殊字符,要区分大小写,唯一性,不能使用关键字, ...
- 第八章| 1. MySQL数据库|库操作|表操作
1.初识数据库 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个 专门的处理软件,这就是mysql等数据库管理软件的 ...
- MySQL常见的库操作,表操作,数据操作集锦及一些注意事项
一 库操作(文件夹) 1 数据库命名规则 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 2 数据库相关操作 创 ...
- mysql 库操作、存储引擎、表操作
阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...
- 数据库 MySQL 之 表操作、存储引擎
数据库 MySQL 之 表操作.存储引擎 浏览目录 创建(复制) 删除 修改 查询 存储引擎介绍 一.创建(复制) 1.语法: 1 2 3 4 5 CREATE TABLE 表名( 字段名1 ...
- MySQL数据库-表操作-SQL语句(一)
1. 数据库操作与存储引擎 1.1 数据库和数据库对象 数据库对象:存储,管理和使用数据的不同结构形式,如:表.视图.存储过程.函数.触发器.事件等. 数据库:存储数据库对象的容器. 数据库分两种 ...
- MySQL-库表操作详述
一.库操作 创建库 create database 库名(charset utf8 对库的编码进行设置,不写就用默认值) 库名可以由字母.数字.下划线.特殊字符,要区分大小写,唯一性,不能使用关键字, ...
- Mysql常用表操作 | 单表查询
160905 常用表操作 1. mysql -u root -p 回车 输入密码 2. 显示数据库列表 show databases 3. 进入某数据库 use database data ...
随机推荐
- Api跨域设置
跨域设置:(服务端) webconfig文件中,system.webServer节点下添加 <!--跨域请求:三个配置信息--> <httpProtocol> <cust ...
- javaweb利用javabean将数据库中内容遍历在页面输出
效果如下图 它所实现的就是把数据库中一个表中所有的数据一条一条以表格的形式输出在网页上, 实现方法如下 首先我们要从数据库读取数据,这里要借助javabean来方便我们传递数据 以上面的为例,我要输出 ...
- Python安装1 —— Python3.8的安装
本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12377746.html 一:什么是Python解释器 解释器(英语:Interp ...
- dubbo之心跳机制
在网络传输中,怎么确保通道连接的可用性是一个很重要的问题,简单的说,在网络通信中有客户端和服务端,一个负责发送请求,一个负责接收请求,在保证连接有效性的背景下,这两个物体扮演了什么角色,心跳机制能有效 ...
- LCP 2-分式化简
LCP 2-分式化简 public int[] fraction(int[] cont) { int len = cont.length; int[] d = new int[]{cont[len - ...
- cookie、session和application
https://cloud.tencent.com/developer/article/1493869 前言: 一直想写一篇关于cookie和session的博客,由于种种原因,一直没有整理,这不,今 ...
- Subway POJ - 2502 spfa
#include<cstdio> #include<cmath> #include<cstring> #include<cstring> #includ ...
- Codeforces 474B. Worms
It is lunch time for Mole. His friend, Marmot, prepared him a nice game for lunch. Marmot brought Mo ...
- 远程执行命令_python
一.远程执行命令模块subprocess Python可以使用subprocess下的Popen类中的封装的方法来执行命令 构造方法 popen() 创建popen类的实例化对象 ··· obj = ...
- Dataset: online data
From Kaggle: Appliances Energy Prediction Energy consumption of the Netherlands International Energy ...