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 '密碼'
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章