Java之mySQL数据库表

字段类型

  1. 整数类型
    tinyInt:很小的整数,
    smallint:小的整数
    mediumint:中等大小的整数
    int:普通大小的整数
  2. 小数类型
    float(m,d):单精度浮点数,m表示数字长度,d表示小数位数,例如float(5,2)最大值999.99
    double(m,d):双精度浮点数
    decimal(m,d):压缩严格的定点数
  3. 日期类型
    year:YYYY 1901~2155
    time:HH:MM:SS -838:59:59~838:59:59
    date:YYYY-MM-DD 1000-01-01~9999-12-3
    datetime:YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
    timestamp:YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07UTC
  4. 文本、二进制类型
    CHAR(M):M为0~255之间的整数,长度不可变,保存数据长度不变的数值,比如身份证号(18位)、手机号(11位)、UUID(36位)、MD5(32位)
    VARCHAR(M):M为0~65535之间的整数,长度可变,保存数据长度不一的数值,比如用户名、密码、地址;
    TINYBLOB:允许长度0~255字节
    BLOB:允许长度0~65535字节
    MEDIUMBLOB:允许长度0~167772150字节
    LONGBLOB:允许长度0~4294967295字节
    TINYTEXT:允许长度0~255字节
    TEXT:允许长度0~65535字节
    MEDIUMTEXT:允许长度0~167772150字节
    LONGTEXT:允许长度0~4294967295字节
    VARBINARY(M):允许长度0~M个字节的变长字节字符串
    BINARY(M):允许长度0~M个字节的定长字节字符串

操作表

创建表:
语法结构:
CREATE TABLE table_name(
column_name data_type [default default_value] [column_constaint] [comment ‘comment_content’],
……
[table_constaint]
)[engine=engine_type] [default charset=charset_type];
说明:
1、table_name:表名;
2、column_name:字段名,字段名一般由字母和下划线构成,多个单词时,单词与单词之间使用下划线间隔;同一个表中字段名不允许重复;
3、data_type:字段类型;
4、default default_value:设置默认值;
5、column_constaint:设置字段级约束;
6、comment ‘comment_content‘:设置注释;
7、table_constaint:设置表级约束;
8、engine:设置存储引擎 https://blog.csdn.net/gaohuanjie/article/details/50944782
9、charset:设置编码,一般为uft8;

常见约束:

  1. primary key:指定主键。该约束强制字段或字段组合必须具有唯一性且每个字段不能为空。可以为字段级别约束,也可以为表级别约束。
#unique 数据不能重复,但若为null则可以重复
create table user_info(
id char(36),
user_name varchar(18) unique,
password char(32)
)
  1. not null:指定字段不能为空,只能定义为字段级约束。
#not null 数据不允许为null
drop table user_info
create table user_info(
id char(36),
user_name varchar(18) not null,
password char(32)
)
  1. unique:指定字段的值(或字段组合的值)对于表中所有的行必须是唯一的。对于无非空约束的字段,唯一键约束允许输入空值,且包含空值的行可以有多个。可以为字段级别约束,也可以为表级别约束,表级约束时可以定义复合唯一键。
#主键约束 primary key 数据不允许重复,不允许为null
drop table user_info
create table user_info(
id char(36) primary key,
user_name varchar(18),
password char(32)
)
  1. foreign key:指定一个字段或字段组合作为一个外键(即外来的主键或唯一键),该外键和另一个表的主键或唯一键(MySQL不支持,Oracle支持)建立起一个关系,只能定义为表级约束。

外键应用举例:
如何将京东fuliuqingfeng的用户信息及其多个邮寄商品地址保存到数据库中?
方案1:

create table user_info(
  id char(36) primary key,
  user_name varchar(30) not null,
  password varchar(30) not null,
  real_name varchar(8),
  mobile char(11),
  address varchar(150)
);
insert into user_info (id,user_name,password,real_name,mobile,address) 
values ('51b28fe1-4ebf-41ac-a17b-d5e276861fd0','fuliuqingfeng','123456','张三','18920120206','河南安阳');
insert into user_info (id,user_name,password,real_name,mobile,address) 
values ('cc95772b-75a2-4702-bd99-4c3b0322d606','fuliuqingfeng','123456','李四','18617297545','北京海淀');
insert into user_info (id,user_name,password,real_name,mobile,address)
values ('c63028fd-cf8d-4dac-a278-b5cc8fd61e3c','fuliuqingfeng','123456','王五','17694976949','山西大同');

在这里插入图片描述
问题:这种表结构存在严重的字段冗余(user_name和password列),如果个人信息字段比较多这一问题表现的越严重。

方案2:

create table user_info(
  id char(36) primary key,
  user_name varchar(30) not null,
  password varchar(30) not null
)
insert into user_info (id,user_name,password) values ('51b28fe1-4ebf-41ac-a17b-d5e276861fd0','fuliuqingfeng','123456');

create table address(
  id char(36) primary key,
  user_info_id char(36),
  real_name varchar(8) not null,
  mobile char(11) not null,
  address varchar(150) not null
)
insert into address (id,user_info_id,real_name,mobile,address) 
values ('bfb9472a-7911-4e6f-a479-3b719454ebab','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','张三','18920120206','河南安阳');
insert into address (id,user_info_id,real_name,mobile,address) 
values ('5227c6b9-45a2-44aa-8ac0-1f63a38d3b65','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','李四','18617297545','北京海淀');
insert into address (id,user_info_id,real_name,mobile,address) 
values ('30b8584b-aa6a-4516-a623-03f487058586','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','王五','17694976949','山西大同');

问题:这种表结构消除了字段冗余,但由于只是逻辑上的“外键”关系,所以依然无法保证数据完整性,例如可以将user_info中id为51b28fe1-4ebf-41ac-a17b-d5e276861fd0的数据删除,但此时地址表中数据将不再完整——找不到这些地址属于哪个用户;再例如也可以向address表中添加一条user_info_id不存在的地址信息(如:insert into address (id,user_info_id,real_name,mobile,address) values (‘7da42cc6-36a6-4ad5-9998-71dbc30c8e17’,‘ddc376dd-f8b3-42a6-b42a-db22abed1941’,‘xiaowang’,‘18338970095’,‘北京东城区’);)——同样,该条数据并不完整,依然找不到这些地址属于哪个用户。

方案3:

create table user_info(
  id char(36) primary key,
  user_name varchar(30) not null,
  password varchar(30) not null
)
insert into user_info (id,user_name,password) values ('51b28fe1-4ebf-41ac-a17b-d5e276861fd0','fuliuqingfeng','123456');

create table address(
  id char(36) primary key,
  user_info_id char(36),
  real_name varchar(8) not null,
  mobile char(11) not null,
  address varchar(150) not null,
  constraint address_user_info_id_fk foreign key(user_info_id) references user_info(id)
)
insert into address (id,user_info_id,real_name,mobile,address) 
values ('bfb9472a-7911-4e6f-a479-3b719454ebab','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','张三','18920120206','河南安阳');
insert into address (id,user_info_id,real_name,mobile,address) 
values ('5227c6b9-45a2-44aa-8ac0-1f63a38d3b65','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','李四','18617297545','北京海淀');
insert into address (id,user_info_id,real_name,mobile,address) 
values ('30b8584b-aa6a-4516-a623-03f487058586','51b28fe1-4ebf-41ac-a17b-d5e276861fd0','王五','17694976949','山西大同');

说明:这种方案为user_info_id添加了外键,指向user_info表的主键,该约束起到了保护数据完整性的作用:如果删除的用户信息id已经在address表中使用,则该条数据无法删除;无法向address表中添加用户id不存在的地址信息。

设置默认值:

#设置默认值 default 当添加数据时不添加此字段,则启用默认值
create table user_info(
id char(36) primary key,
user_name varchar(18),
password char(32) default '123456'
)
insert into user_info (id,user_name) values('1','2')

截断表:

#截断表
truncate table user_info;
#在Oracle数据库中需要进行提交commit操作才有效
commit;
#在mySQL数据库中不需要提交,即相当于delete操作
delete from user_info

重命名:

#重命名
rename table user_info to ui

修改表(添加、修改、删除字段):

#添加字段
alter table user_info
add mobile char(11)
#在指定位置添加字段
alter table user_info
add mobile char(11) after id
#修改字段
alter table user_info
modify user_name varchar(120)
#删除字段
alter table user_info
drop user_name

添加注释:

#添加注释comment
create table user_info(
  id char(36) primary key comment '主键',
  user_name varchar(30) not null comment '用户名',
  password varchar(30) not null default '123456' comment '密码'
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章