減少mysql儲存列的方法

2021-09-08 20:47:20 字數 2664 閱讀 6005

減少mysql儲存列的方法 | 網路漁夫

posted on

2011 年 06 月 04 日

byadmin

在設計資料庫時,我們會經常碰到表示是非的字段,網路漁夫-汪維曾在設計店鋪表時就遇到下列情況:

該店鋪有如下屬性:首先是否具有如圖所示的消費者保障服務:

其次還有諸如是否屬於中關村商圈等等;在這裡如果要表示上述的幾種屬性,按照常規做法我得設計7個字段;如果以後又增加了個如平台保的服務,我又得增加個字段,所以這樣做的缺點之一是不便於擴充套件;第二是占用的列太多,列太多會影響查詢資料時的速度;第三就是這些字段由於是表示是非的值,所以做索引純屬浪費。

介於以上缺點,我拋棄了上述方法;在這裡我只要乙個欄位就可以表示上述所有的屬性。

做法如下:

1.設計乙個名為protect_str的字段,型別為binary(12);其值預設為000000000000;這裡設計為12位是為了以後擴充套件需要

這裡我用從左到右的六位依次來表示6種消保,如000000000011表示如實描述和快速發貨;

為0的位置表示沒有這個屬性,如000000000001表示這家店沒有快速發貨這個屬性;反之則表示有;第7位表示是否屬於中關村商圈子。

2.查詢:

現在要查詢所有擁有如實描述屬性的店鋪,sql語句如下:

select *

from `shops1`

where (

protect_str &000000000001

) =1

查詢既擁有如實描述又擁有快速發貨屬性的店鋪,sql語句如下:

select *

from `shops1`

where (

`protect_str` &000000000011

) =11

現在要查詢所有擁有如實描述屬性的店鋪,sql語句如下:

select *

from `shops1`

where (

protect_str &1

) =1

現在要查詢所有擁有快速發貨屬性的店鋪,sql語句如下:

select *

from `shops1`

where (

protect_str &2

) =2

如若以後有擴充套件則接著往高位上補數字就行了,比如說現在在對id=5的店鋪增加了乙個平台保障服務

則這時可對有此項服務的店鋪protect_str 欄位的第八位值設為1即10000000轉化為十進位制即為128(1*2的7次方)

執行如下語句:

update `test`.`shops1` set `protect_str` = ( `protect_str` |128 ) where `shops1`.`id` =5

即可將此字段值改為135;

綜上所述,凡是我們要加上某項服務的地方,我們用」|」或運算;凡是要查詢具有某項服務的地方我們用」&」與運算。

掌握了二進位制轉十進位制,還有查詢和更新,減少mysql儲存列將不再是問題。

下面給出試驗用的資料庫,大家可以用上述語句測試一下

create table `shops1` (

`id` int(10) unsigned not null auto_increment,

`shop_name` char(50) collate utf8_unicode_ci not null,

`protect_str` int(12) not null default '0',

`shop_id` int(11) unsigned not null,

primary key (`id`)

) engine=myisam default charset=utf8 collate=utf8_unicode_ci comment='店鋪表' auto_increment=8 ;

--

-- 匯出表中的資料 `shops1`

--insert into `shops1` values (1, 'bestshop', 1, 13);

insert into `shops1` values (3, 'firstshop', 2, 15);

insert into `shops1` values (4, 'nihao', 71, 23);

insert into `shops1` values (5, 'shis', 135, 34);

insert into `shops1` values (6, 'ytshop', 6, 45);

insert into `shops1` values (7, 'uushop', 65, 65);

this entry was posted in

mysql and tagged

mysql與運算,

mysql位運算,

mysql或運算,

資料庫設計,

汪維,

網路漁夫. bookmark the

permalink.

mysql列儲存 減少mysql儲存列的方法

在設計資料庫時,我們會經常碰到表示是非的字段,網路漁夫 汪維曾在設計店鋪表時就遇到下列情況 該店鋪有如下屬性 首先是否具有如圖所示的消費者保障服務 其次還有諸如是否屬於中關村商圈等等 在這裡如果要表示上述的幾種屬性,按照常規做法我得設計7個字段 如果以後又增加了個如平台保的服務,我又得增加個字段,所...

減少配置的方法

一種是抽象的方式.一種自動裝配的方式.抽象的方式 通過標籤將公共的配置提取出來,然後指定標籤中的abstract屬性為true 在其他標籤中指定其parent即可 如有兩個bean,如下 public class bean3 private int id private string name pr...

MySQL中的列轉行方法

資料如下 create table test id int 10 not null auto increment primary key,name varchar 20 default null,course varchar 20 default null,score float default 0...