目录

数据类型

数值类型

浮点数类型

字符串类型

时间和日期类型

表操作

表完整性约束

自增(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-表管理及数据类型 第二天相关推荐

  1. MySQL表管理(文件)

    MySQL数据表的管理(文件) 1.进入数据库(进入文件夹) use 数据库名字; use gx_day14; 2.查看当前数据库下的所有 表(文件) show tables; 3.创建表(文件文件) ...

  2. mysql 表中添加数据类型_MySQL数据表添加字段(三种方式)

    MySQL 数据表是由行和列构成的,通常把表的"列"称为字段(Field),把表的"行"称为记录(Record).随着业务的变化,可能需要在已有的表中添加新的字 ...

  3. mysql表id的数据类型是_MySQL表中的数据类型

    数据类型:在表中数据类型主要是限制字段必须以什么样的数据类型传值. 一 整型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT总共有五种,name我们一般用到的也就 ...

  4. mysql表中字段数据类型_mysql数据表中字段的数据类型有哪些?

    数据表中字段的数据类型有:TINYINT.SMALLINT.MEDIUMINT.INT.INTEGE.DATETIME.DATE.TIMESTAMP.TIME.YEAR.CHAR.VARCHAR.TE ...

  5. 如何向mysql表中添加数据类型_java中怎么把data类型的数据添加到数据库?

    这种问题应该算是很初级的问题了,项目一直用的是util包下的date,所以临时看了一下sql.date的源码: 由源码,很容易可以看出来,sql.date提供了两种构造方法: 一. 提供年月日 @De ...

  6. php查询mysql表的行数据类型,PHP 使用mysql_fetch_row 查询获得数据行列表的简单示例...

    对PHP MYSQL mysql_fetch_row –从查询获得数据行列表感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! mysql_fetch_row用于从mysql数据库中查询数据 ...

  7. MySQL事务管理+安全管理+MySQL数据类型

    [0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL事务管理+安全管理+MySQL数据类型" 的基础知识: [ ...

  8. MySQL 数据库和表管理

    MySQL 基础之数据库和表管理 数据库中的默认库 INFORMATION_SCHEMA提供对数据库元数据的访问 ,有关MySQL服务器的信息,例如数据库或表的名称,列的数据类型或访问权限.有时用于此 ...

  9. mysql查询名字中第2个字为丽_假设有Student表,查询名字中第二个字为“丽”的所有学生姓名、学号的正确命令是(1.0分)_学小易找答案...

    [单选题]下列选项中,属于1:n联系的两个实体集是(1.0分) [单选题]下列关于二叉树的叙述中,正确的是(1.0分) [单选题]下列关于局部变量和用户变量的描述中,错误的是(1.0分) [单选题]设 ...

最新文章

  1. 编解码技术学习网站汇总
  2. html head
  3. EasyUI(前端框架)
  4. 数组实例的find() 和 findIndex()方法
  5. 云原生时代的 YAML 教程
  6. 如何监控一个Activity加载完毕(完成渲染)
  7. dsp 链接命令文件的写法
  8. Windows 10 Java安装教程
  9. 基于SSM的校园二手交易平台系统
  10. RPLIDAR A2 Windows 下开发
  11. c语言换行用分号代替,go语言换行的地方可以用分号替代吗?
  12. chrome调试工具使用技巧汇总
  13. 我不是教你诈 内容摘要
  14. VideoMAE 论文阅读
  15. 【文末送书】知识体系目录
  16. 关于Solidworks打包的更好的方式(并保留部分文件结构)——使用“另存为”保存装配体
  17. 第一篇博客——(自我介绍篇)
  18. QML QQuickView透明背景
  19. Apache Apisix 安全漏洞(CVE-2020-13945)
  20. Servlet过滤器与SpringMVC拦截器

热门文章

  1. dgl读取graph 错误,dgl安装
  2. Cypress使用npm启用时报Error: Cannot find module ‘minimist‘
  3. IPA模特委员会十月人气评选 辛梓宁荣获今日人气之星
  4. 深圳智能电销机器人oem高效开发自己的品牌
  5. 码农飞升日记——从陋室铭到ICU的那些年那些事
  6. 银行卡文字识别技术在项目里如何应用
  7. BugkuCTF-Web-计算器(随机数字运算验证码)
  8. java中HashMap、ArrayList、HashSet的存储原理及遍历方式汇总
  9. 记住不要学计算机,搞IT的我已经后悔了...
  10. python输出图片代码_通过Python pyecharts输出保存图片代码实例