第一章 MySQL 库表操作
1.5.
表的基本操作
1.5.1.
数据类型
类型组成:数字、文本、日期/
时间类型
整型
注意:
1:实际开发的角度,一定要为合适的列选取合适的数据类型,如
一个枚举字段只有
0
和
1
两个枚举值,选用
TINYINT
就足够了,但在开发场景下却使用了
BIGINT
,这就造成了资源浪费
简单计算一下,假使该数据表中有
100W
数据,那么总共浪费了
700W
字节也就是
6.7M
左右,
如果更多的表这么做了,那么浪费的更多
2:整型
(N)
表现形式:有时代码写法为
int(10),
表示数字宽度限制,要求如下:
无论
N
等于多少,
int
永远占
4
个字节
N
表示的是显示宽度,不足则补
0
,超过长度则会无视长度直接显示整个数字
浮点型
注意:可以使用
float(M
,
D)
、
double(M
,
D)
格式限制宽度按(
M
)和精度(
D
),如
float
(3,2
),不指定M
、
D
的时,会按照实际的精度来处理
定点型:
decimal(size,d)
,作为字符串存储的
DOUBLE
类型,允许固定的小数点,由于
float
、
double
类型存在精度丢失问题,即写入数据库的数据未必是插入数据库的数据
,而
decimal
无论写
入数据中的数据是多少,都不会存在精度丢失问题,这就是要引入decimal
类型的原因,
decimal
类
型常见于银行系统、互联网金融系统等对小数点后的数字比较敏感的系统中,结论:float/double
在
db
中存储的是近似值,而decimal则是以字符串形式进行保存
文本型:
注意:
1:blob
和
text
都是为了存储很大数据而设计的字符串数据类型,
blob
采用二进制形式存储无排序规
则和 字符集,text采用字符形式存储且有排序规则和字符集适用于存储如文章内容、评论等
2:char
是固定长度字符串,其长度范围为
0~255
且与编码方式无关,无论字符实际长度是多少,
都会按照指定长度存储,不够的用空格补足,char类型数据时会将结尾的所有空格处理掉
date型
总结:常用数据类型
1.5.2 创建表
格式:crate table 表名 (表选项)
表定义选项格式为:列名1 列类型1 约束, 列名2 列类型2 约束,……
默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存
在,则会出现错误
使用 crate table 创建表时,必须指定以下信息:
要创建的表的名称不区分大小写,不能使用
SQL
语言中的关键字,如
DROP
、
ALTER
、
INSERT等。
必须指定数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开
示例1:创建数据库并新建表
数据表属于数据库,在创建数据表之前,应使用语句
“use <
数据库
>”
指定操作在哪个数据库中进
行,如果没有选择数据库,就会抛出 No database selected
的错误
查看表: mysql>show tables;
示例2:新建员工表
练习:在
mydb2_stuinfo
库中新建班级表
class1
,字段如下:
cla_num int(5) , cla_name
varchar(10) , number int(4) , monitor varchar(20) ,creation_date date
1.5.3.
查看表
show语句:显示当前数据库中已有的数据表
show tables [from 数据库名][like wild];
describe语句:查看数据表中各列的信息
字段意义分析:
Field :
字段名称
type
:字段类型
null
:是否允许为空
key
:索引类型
default
:默认值
extra
:填充
使用\G可以查看更全面的表定义信息
1.5.4.
删除表
格式:
drop table
[
if exists
]
表名;
注意:
用户必须拥有执行
drop table
命令的权限,否则数据表不会被删除
推荐使用
if exists
字句,即先判断是否存在,存在则删除,如
1.5.5. 修改表
更改表名(重命名):
#
法
1
:
alter table
表名
rename
新表名
;
#
法
2
:
rename table
表名
to
新表名
;
例:mysql>use mydb2_stuinfo;
mysql> show tables;
添加新列
#
例:增加一列
password
mysql>
alter table
student1
add password
char
(
8
);
#
注意:数据库操作后得到的反馈,表明操作的结果。这个信息表示:
Records:
2
:
表示成功导入或处理的记录总数是
2
条。
Duplicates:
0
:
表示在操作过程中没有发现重复的记录。
Warnings
:
0
:
表示在操作过程中没有产生任何警告。
#
例
:
再添加一个新列
notes varchar(30)
,位置在
score
之前
#
例:再第一列添加一个新列
删除列 :alter table 表名 DROP 列名;
修改列名:alter table 表名 change 旧列名 新列名 列类型;
修改列类型:alter table 表名 modify 列名 列类型;
#
插入新列,修改类型
mysql>
alter table
student1
add
birthday
char
(
10
);
#
增加
Query
OK,
0
rows affected (
0.01
sec)
Records:
0
Duplicates:
0
Warnings
:
0
1.5.6. 修改列位置
格式:alter table 表名 modify 列名 列类型 after 某列;
1.5.7.
练习
新建商品数据库
mydb4_product_db,
使用该数据库
创建商品表
pro_tb1
,字段包含编号
num int
(
4
),商品名
trade_name varchar(30)
,数量
number
int(4) ,单价price float(5,2)
显示创建表的字段内容
新增一列备注
notes varchar(30)
将编号
num
字段类型修改为
char
(
4
)
删除该表(先判断)
1.5.8.
复制表的结构
方法一:在
create table
语句的末尾添加
like
子句,可以将源表的表结构复制到新表中,语法格式如
下:
create table
新表名
like
源表
方法二:在
create table
语句的末尾添加一个
select
语句,可以实现表结构的复制,甚至可以将源表
的表记录拷贝到新表中,下面的语法格式将源表的结构和记录都拷贝到新表中
create table
新表名
select
*
from
源表
方法三:如果已经存在一张结构一致的表,复制数据
:
1.5.9.
数据库字典
1:数据字典:类似于系统编目或花名册,它保存数据库服务器上的元数据信息(数据库的整体属
性信息)
2:元数据(meta data)
:即
“data about data”
关于数据的数据,理解为描述数据的数据,内容包
括:数据库 的属性信息、数据表的属性信息、字段的属性信息、视图的属性信息、用户信息、统
计类信息等。
3:information_schema
数据库是
MySQL
系统自带的数据库,它提供了数据库元数据的访问方式
mysql> show databases;
4:information_schema
就像是
MySQL
实例的一个百科全书,记录了数据库当中大部分我们需要了
结的信息,比如字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索
引信息,参数,优化,锁和事物等等。
5:通过
information_schema
我们可以窥透整个
MySQL
实例的运行情况,可以了结
MySQL
实例的
基本信息,甚至优化调优,维护数据库等,可以说是真正的一部百科全书。
1.5.10.
小结
1.5.11.
删除的注意事项