MySQL-表管理及数据类型 第二天
目录
数据类型
数值类型
浮点数类型
字符串类型
时间和日期类型
表操作
表完整性约束
自增(auto_incement)
唯一约束 UNIQUE
null与not null
unsigned
指定字符集
默认约束
表操作
库操作
数据类型
在mysql数据管理系统中,可以通过存储引擎来决定表的类型。同时,mysql数据库管理系统也提供了数据类型决定表存储数据的类型。
数据类型分为:数值类型、字符串类型、时间和日期类型。
数值类型
整数类型
tinyint、smallint、mediumint、int、bigint
作用:用于存储用户的年龄、游戏的level、经验值等。
类型 | 大小 | 范围(有符号) |
timyint | 1字节 | (128,127) |
smallint | 2字节 | (-32768,32767) |
mediumint | 3字节 | (-8388608,8388607) |
int或integer | 4字节 | (-2147483648,2147483647) |
bigint | 8字节 | (-9223372036854775808,9223372036854775807) |
- 当整数值超过int数据类型支持的范围时,可以采用bigint。
- 在mysql中,int数据类型是主要的整数数据类型。
- int(n)里的n表示的是select查询结果几种显示的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度
浮点数类型
float、double
作用:用语存储用户的身高、体重、薪水等
float(5,3) 5宽度,3精度 (插入的数据)宽度和精度中间用逗号。
精度:小数点后是:3位 如果超过三位,会四舍五入,如果不够三位会用0补全
宽度:5 精度是3 控制了小数点前的位数,不超过两位 。比如(6,3) 如果插入数据为(123.123),可以插入,但如果小数点前超过三位就会报错。
定点数类型 DEC(了解)
定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。
位类型 BIT(了解)
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位
字符串类型
CHAR系列:CHAR VARCHAR (必须加规定长度)
TEXT系列: TINYTEXT TEXT MEDIUMTEXT LONGTEXT
枚举类型: ENUM
集合类型: SET
BLOB 系列: TINYBLOB BLOB MEDIUMBLOB LONGBLOB
BINARY系列: BINARY VARBINARY
枚举类型(enum): 枚举列可以把一些不重复的字符串存储成一个预定义的集合。(相当于单选,插入数据时在这个集合中只能选一个,必须是集合里的字符串)
集合类型(set):把一些不重复的字符串存储成一个预定义的集合。(多选,插入数据时在这个集合中能选多个,必须是集合里的字符串)
mysql> create table enum_table( e ENUM('fish','apple','dog'));
Query OK, 0 rows affected (0.35 sec)
mysql> insert into enum_table(e) values('fish');
Query OK, 1 row affected (0.11 sec)mysql> select * from enum_table;
+------+
| e |
+------+
| fish |
+------+
1 row in set (0.00 sec)mysql> insert into enum_table(e) values('nihao');
ERROR 1265 (01000): Data truncated for column 'e' at row 1
总结:
1.经常变化的字段用varchar
2.知道固定长度的用char
3.超过255字符的只能用varchar或者text
4.能用varchar的地方不用text
时间和日期类型
DATE TIME DATETIME TIMESTAMP YEAR
create table t8 (id1 timestamp NOT NULL default CURRENT_TIMESTAMP,id2 datetime default NULL
);
timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。mysql> insert into t8(id1) values('20180109000000');
mysql> select * from t8;
+---------------------+------+
| id1 | d2 |
+---------------------+------+
| 2018-01-09 00:00:00 | NULL |
+---------------------+------+
1 row in set (0.00 sec)
扩展:
select now();查看当前时间
表操作
表完整性约束
主键
每张表里只能有一个主键,不能为空,而且唯一,主键保证记录的唯一性,主键自动为NOT NULL。一个 UNIQUE KEY 又是一个NOT NULL的时候,那么它被当做PRIMARY KEY主键。
创建表并指定约束
mysql> create table t9(hostname char(20),ip char(150),primary key(hostname));
或者
mysql> create table t9(hostname char(20) primary key,ip char(150));
mysql> insert into t9(hostname,ip) values('qfedu.com', '10.10.10.11');
Query OK, 1 row affected (0.00 sec)mysql> insert into t9(hostname,ip) values('qfedu.com', '10.10.10.12');
ERROR 1062 (23000): Duplicate entry 'qfedu.com' for key 'PRIMARY' #插入了相同名字,报错mysql> insert into t9(hostname,ip) values('qfedu', '10.10.10.11');
Query OK, 1 row affected (0.01 sec)mysql> select * from t9;
+-----------+-------------+
| hostname | ip |
+-----------+-------------+
| qfedu | 10.10.10.11 |
| qfedu.com | 10.10.10.11 |
+-----------+-------------+
2 rows in set (0.00 sec)mysql> insert into t9(hostname,ip) values('qfjy', '10.10.10.12');
Query OK, 1 row affected (0.00 sec)mysql> select * from t9;
+-----------+-------------+
| hostname | ip |
+-----------+-------------+
| qfedu | 10.10.10.11 |
| qfedu.com | 10.10.10.11 |
| qfjy | 10.10.10.12 |
+-----------+-------------+
3 rows in set (0.00 sec)mysql> insert into t9(ip) values('10.10.10.13');
ERROR 1364 (HY000): Field 'hostname' doesn't have a default value删除主键
mysql> alter table tab_name drop primary key;
主键被删除之后,这个字段仍然不允许为空值;
自增(auto_incement)
自动编号,且必须与主键组合使用默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况:
- 如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
- 如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值不会被重用。
(每张表只能有一个字段为自增) (成了key才可以自动增长)
mysql> CREATE TABLE department3 (dept_id INT PRIMARY KEY AUTO_INCREMENT,dept_name VARCHAR(30),comment VARCHAR(50));
mysql> select * from department3;
Empty set (0.00 sec)插入值
mysql> insert into department3(dept_name, comment) values('tom','test'), ('jack', 'test2');
Query OK, 2 rows affected (0.00 sec) #没有插入dept_id的数据mysql> select * from department3;
+---------+-----------+---------+
| dept_id | dept_name | comment |
+---------+-----------+---------+
| 1 | tom | test |
| 2 | jack | test2 | #但是因为有自动增长,dept_id从1开始自动增长
+---------+-----------+---------+
2 rows in set (0.00 sec)删除自动增长
mysql> ALTER TABLE department3 CHANGE dept_id dept_id INT NOT NULL;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
唯一约束 UNIQUE
字段添加唯一约束之后,该字段的值不能重复,也就是说在一列当中不能出现一样的值。
mysql> CREATE TABLE department2 (dept_id INT,dept_name VARCHAR(30) UNIQUE,comment VARCHAR(50));
删除unique
mysql> alter table department2 drop index dept_name;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
null与not null
1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
unsigned
整数类型有可选的UNSIGNED属性,表示不允许负值,这大致上可以使正数的上限提高一倍
可以使用这几种整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别使用8,16,24,32,64位存储空间
它们可以存储的值的范围从-2(n-1)到2(n-1)-1,其中n是存储空间的位数。
mysql> create table guo(id int(1) default null,qq int(5) unsigned default null);
id为未指定unsigned,而qq为指定unsigned
先对id列插入数据
根据计算得2(n-1)-1为2147483647
mysql> insert into guo(id) values(2147483647);
Query OK, 1 row affected (0.00 sec)插入2147483648则提示超出范围
mysql> insert into guo(id) values(2147483648);
ERROR 1264 (22003): Out of range value for column 'id' at row 1下面对unsigned列进行插入,范围应该为
2(n-1)+2(n-1)-1为4294967295
mysql> insert into guo(qq) values(-2147483648);
ERROR 1264 (22003): Out of range value for column 'qq' at row 1mysql> insert into guo(qq) values(4294967296);
ERROR 1264 (22003): Out of range value for column 'qq' at row 1mysql> insert into guo(qq) values(4294967295);
Query OK, 1 row affected (0.01 sec)MySQL可以为整数指定宽度,例如int(11),对大多数应用这是没有意义的:它不会限制值的合法范围,只是规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说,int(1)和int(20)是相同的。create table t1(id tinyint(3) default null,qq tinyint(3) unsigned default null);
id
-128-->127qq
0-->255
指定字符集
* 未指定之前,插入
mysql> insert into t1(id,name) values(1,'飞哥');
ERROR 1366 (HY000): Incorrect string value: '\xE7\x9F\xB3\xE5\xAE\x87...' for column 'name' at row 1* 创建表格式指定字符集为utf-8
mysql> create table t6(id int(2),name char(5),age int(4)) default charset=utf8;
Query OK, 0 rows affected (0.00 sec)mysql> desc t6;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(2) | YES | | NULL | |
| name | char(5) | YES | | NULL | |
| age | int(4) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> insert into t6(id,name) values(1,'飞哥');
Query OK, 1 row affected (0.00 sec)
默认约束
1.创建一个表
mysql> create table user(id int not null, name varchar(20), number int, primary key(id));
Query OK, 0 rows affected (0.01 sec)mysql> desc user;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)2、设置默认值
mysql> ALTER TABLE user ALTER number SET DEFAULT 0;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
也可以这样修改:
mysql> alter table user change number num int(6) not null default 3;mysql> DESCRIBE user;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | 0 | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)3、插入值
mysql> ALTER TABLE user CHANGE id id INT NOT NULL AUTO_INCREMENT;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0mysql> INSERT INTO user(name) VALUES('rock');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO user(name) VALUES('rock');
Query OK, 1 row affected (0.00 sec)mysql> select * from user;
+----+------+--------+
| id | name | number |
+----+------+--------+
| 1 | rock | 0 |
| 2 | rock | 0 |
+----+------+--------+
2 rows in set (0.00 sec)删除默认值
mysql> ALTER TABLE user ALTER number drop DEFAULT;
oracle和mysql的区别。---面试
-Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。
-Oracle的内存占有量非常大,而mysql非常小
-MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。
-MySQL字符串可以使用双引号包起来,而Oracle只可以单引号
-MySQL分页用limit关键字,而Oracle使用rownum字段表明位置,而且只能使用小于,不能使用大于。
-MySQL中0、1判断真假,Oracle中true false
-MySQL中命令默认commit,但是Oracle需要手动提交
-MySQL在windows环境下大小写不敏感 在unix,linux环境下区分大小写,Oracle不区分
表操作
1、创建
语法:create table 库.表名 (字段 类型 约束条件,字段 类型 约束条件);
2、查看
查看表:show tables; (当前所在库) show tables from 库名;
产看表结构:desc 表名;
select 字段名 from 表名;
3、插入数据
insert into 表名 (字段) values(值,),(值);
4、修改
修改表ALTER TABLE
语法:
1. 修改表名ALTER TABLE 表名 RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名 数据类型 [完整性约束条件…],ADD 字段名 数据类型 [完整性约束条件…];ALTER TABLE 表名ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;3. 删除字段ALTER TABLE 表名 DROP 字段名;4. 修改字段ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];示例:
1. 修改存储引擎
mysql> alter table service -> engine=innodb; //engine=myisam|memory|....修改字符集
mysql> alter table service-> charset=uft8
2. 添加字段
mysql> create table student10 (id int);
mysql> alter table student10-> add name varchar(20) not null,-> add age int not null default 22;mysql> alter table student10-> add stu_num int not null after name; //添加name字段之后mysql> alter table student10 add sex enum('male','female') default 'male' first; //添加到最前面3. 删除字段
mysql> alter table student10-> drop sex;mysql> alter table service-> drop mac;4. 修改字段类型modify
mysql> alter table student10-> modify age tinyint not null ; //注意保留原有的约束条件mysql> alter table student10-> modify id int not null primary key ; //修改字段类型、约束、主键5. 增加约束(针对已有的主键增加auto_increment)not null + unique
mysql> alter table student10 modify id int not null primary key auto_increment; //错误,该字段已经是primary key
ERROR 1068 (42000): Multiple primary key definedmysql> alter table student10 modify id int not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 06. 增加主键
mysql> alter table student1-> add primary key(id);7. 增加主键和自动增长
mysql> alter table student1-> modify id int not null primary key auto_increment;8. 删除主键[primary key auto_increment]
a. 删除自增约束
mysql> alter table student10 modify id int not null; b. 删除主键
mysql> alter table student10 -> drop primary key;五、复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)复制表结构/记录+表结构,不会将Key复制
mysql> create table new_service select * from service;只复制表结构
mysql> create table new1_service select * from service where 1=2; //条件为假,查不到任何记录可以复制主键,只复制表结构
mysql> create table t4 like employees;六、删除表DROP TABLE 表名;
七、修改表中字段的值update 表名 set 列名=值 where 条件
库操作
系统数据库
information_schema: 虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
performance_schema: 主要存储数据库服务器的性能参数
mysql: 授权库,主要存储系统用户的权限信息
sys: 主要存储数据库服务器的性能参数information_schema
SCHEMATA
TABLES
COLUMNS创建数据库:DDL
mysqladmin -u root -p1 password ‘123’
mysql -u root -pQianFeng@123 -e "show databases"
mysql -u root -pQianFeng@123 -e "create database sipeng"4. mysql> create database xingdian;
数据库命名规则:
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字查看数据库
mysql> show databases;
mysql> show create database xingdian;
mysql> select database(); 查看当前所在的库切换数据库
mysql> use xingdian;
mysql> show tables;删除数据库
DROP DATABASE 数据库名;
MySQL-表管理及数据类型 第二天相关推荐
- MySQL表管理(文件)
MySQL数据表的管理(文件) 1.进入数据库(进入文件夹) use 数据库名字; use gx_day14; 2.查看当前数据库下的所有 表(文件) show tables; 3.创建表(文件文件) ...
- mysql 表中添加数据类型_MySQL数据表添加字段(三种方式)
MySQL 数据表是由行和列构成的,通常把表的"列"称为字段(Field),把表的"行"称为记录(Record).随着业务的变化,可能需要在已有的表中添加新的字 ...
- mysql表id的数据类型是_MySQL表中的数据类型
数据类型:在表中数据类型主要是限制字段必须以什么样的数据类型传值. 一 整型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT总共有五种,name我们一般用到的也就 ...
- mysql表中字段数据类型_mysql数据表中字段的数据类型有哪些?
数据表中字段的数据类型有:TINYINT.SMALLINT.MEDIUMINT.INT.INTEGE.DATETIME.DATE.TIMESTAMP.TIME.YEAR.CHAR.VARCHAR.TE ...
- 如何向mysql表中添加数据类型_java中怎么把data类型的数据添加到数据库?
这种问题应该算是很初级的问题了,项目一直用的是util包下的date,所以临时看了一下sql.date的源码: 由源码,很容易可以看出来,sql.date提供了两种构造方法: 一. 提供年月日 @De ...
- php查询mysql表的行数据类型,PHP 使用mysql_fetch_row 查询获得数据行列表的简单示例...
对PHP MYSQL mysql_fetch_row –从查询获得数据行列表感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! mysql_fetch_row用于从mysql数据库中查询数据 ...
- MySQL事务管理+安全管理+MySQL数据类型
[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL事务管理+安全管理+MySQL数据类型" 的基础知识: [ ...
- MySQL 数据库和表管理
MySQL 基础之数据库和表管理 数据库中的默认库 INFORMATION_SCHEMA提供对数据库元数据的访问 ,有关MySQL服务器的信息,例如数据库或表的名称,列的数据类型或访问权限.有时用于此 ...
- mysql查询名字中第2个字为丽_假设有Student表,查询名字中第二个字为“丽”的所有学生姓名、学号的正确命令是(1.0分)_学小易找答案...
[单选题]下列选项中,属于1:n联系的两个实体集是(1.0分) [单选题]下列关于二叉树的叙述中,正确的是(1.0分) [单选题]下列关于局部变量和用户变量的描述中,错误的是(1.0分) [单选题]设 ...
最新文章
- 编解码技术学习网站汇总
- html head
- EasyUI(前端框架)
- 数组实例的find() 和 findIndex()方法
- 云原生时代的 YAML 教程
- 如何监控一个Activity加载完毕(完成渲染)
- dsp 链接命令文件的写法
- Windows 10 Java安装教程
- 基于SSM的校园二手交易平台系统
- RPLIDAR A2 Windows 下开发
- c语言换行用分号代替,go语言换行的地方可以用分号替代吗?
- chrome调试工具使用技巧汇总
- 我不是教你诈 内容摘要
- VideoMAE 论文阅读
- 【文末送书】知识体系目录
- 关于Solidworks打包的更好的方式(并保留部分文件结构)——使用“另存为”保存装配体
- 第一篇博客——(自我介绍篇)
- QML QQuickView透明背景
- Apache Apisix 安全漏洞(CVE-2020-13945)
- Servlet过滤器与SpringMVC拦截器
热门文章
- dgl读取graph 错误,dgl安装
- Cypress使用npm启用时报Error: Cannot find module ‘minimist‘
- IPA模特委员会十月人气评选 辛梓宁荣获今日人气之星
- 深圳智能电销机器人oem高效开发自己的品牌
- 码农飞升日记——从陋室铭到ICU的那些年那些事
- 银行卡文字识别技术在项目里如何应用
- BugkuCTF-Web-计算器(随机数字运算验证码)
- java中HashMap、ArrayList、HashSet的存储原理及遍历方式汇总
- 记住不要学计算机,搞IT的我已经后悔了...
- python输出图片代码_通过Python pyecharts输出保存图片代码实例