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 ...
随机推荐
- 聊聊SNMP协议
注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/snmp-protoco ...
- pandas模块的数据操作
数据操作 数据操作最重要的一步也是第一步就是收集数据,而收集数据的方式有很多种,第一种就是我们已经将数据下载到了本地,在本地通过文件进行访问,第二种就是需要到网站的API处获取数据或者网页上爬取数据, ...
- 从Windows10中彻底删除【3D对象】文件夹
Remove "3D object" folder from My Computer Windows Registry Editor Version 5.00 [-HKEY_LOC ...
- E11000 duplicate key error index: test.collection.$a.b_1 dup key: { : null } 报错记录
这个一般分为两种情况,第一新增数据出现约束.而你在orm里面写了唯一约束.这种情况就比较简单,添加数据时保证数据字段唯一性就好了. 第二种情况比较难找,因为你发现你在orm里面并没有写约束,但是还是插 ...
- 嵊州D5T3 指令 program 神奇的位运算
指令 program [问题描述] krydom 有一个神奇的机器. 一开始,可以往机器里输入若干条指令: opt x 其中,opt 是 & | ^ 中的一种,0 ≤ x ≤ 1023 . 对 ...
- maven依赖包无法更新下载
在IDEA工程中导入已存在的module时,按默认设置,直到完成导入,结果所有的外部依赖包都无法更新下载,即使是更新了setting.xml配置文件信息,依旧是不能更新下载依赖包,现将具体的操作过程和 ...
- 敏捷@Scrum基础知识
敏捷,用以概括一套全新的软件开发价值观:敏捷宣言由价值观和原则组成. (一)敏捷核心价值观 敏捷宣言 个体和交互 胜过 过程和工具 可以工作的软件 胜过 面面俱 ...
- web服务器的解析漏洞罗列
前言 服务器相关中间件存在一些解析漏洞,攻击者可通过上传一定格式的文件,被服务器的中间件进行了解析,这样就对系统造成一定危害.常见的服务器解析漏洞涉及的中间件有IIS,apache.nginx等.可利 ...
- STL版本
STL - Standard Template Library , 是C++标准里面规定的模板库接口规范,但它只是接口规范,没有规定具体怎么实现. STL是C++标准的一部分,所以每个C++编译器都会 ...
- (C语言)学生成绩排序-期末考倒数第二题结构体数组排序
假设学生的基本信息包括学号.姓名.三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型.输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息.如果平均分相同 ...