时间:2014年3月27日20:08:01网站建表实战与优化意识
建表:
SNS社交网站:
会员表:member
Mysql中没有布尔型,相当于tinyint类型 false 就是0 其他都是true
大小 字节 |
列名称 |
列类型 |
默认值 |
是否主键 |
4 |
编号id |
int |
Primary key |
|
用户名:uesrname |
varchar(20) char(20) |
‘’ |
||
1 |
性别:gender |
char(1) tinyint |
||
1 |
体重KG:weight |
tinyint unsigned 0--255 |
||
3 |
生日:birthday |
date |
||
8 |
工资:salary |
Decimal(8,2) |
||
8 |
上次登录时间:lastlogin |
Datetime int |
||
个人简介intro |
Varchar(1500) |
|||
日志 blog |
text |
数据每一行的长度,都是固定的,查找的速度更快
浪费一定空间,从而加快速度值,但不能浪费过大
存储空间和时间时矛盾的的
时间换空间 空间换时间
所以intro 可以单独拿出来,另放到一张表里
大小 字节 |
列名称 |
列类型 |
默认值 |
是否主键 |
4 |
编号id |
int |
Primary key |
|
用户名:uesrname |
varchar(20) char(20) |
‘’ |
||
个人简介intro |
Varchar(1500) |
在开发中,会员的信息优化,把频繁用到的信息,优先考虑效率,存储到一张表中,
不常用的信息,或比较占据空间的信息,优先考虑空间占据,存储到辅表中
上次登录时间,从查询角度和计算来看,利用int时间戳进行计算
建表语法:所谓建表就是声明列的过程
create table 表名(
列1声明 列1参数,
列1声明 列1参数,
... ...
列n声明 列n参数
)engine myisam/innodb/bdb charset utf8/gbk/latin1;
create table member(
id int unsigned auto_increment primary key,
username char(20) not null default '',
gender char(1) not null default '',
weight tinyint unsigned not null default 0,
birthday date not null default '0000-00-00',
salary decimal(8,2) not null default 0
)engine myisam charset utf8;
时间:2014年3月28日17:11:02表修改语法之列的增删改
mysql> #修改表的语法:
mysql> #一张表,创建完毕,有了N个列
mysql> #之后还有可能增加或者删除列
mysql> #使用语句:
mysql> #alter table 表名 add 列名 列类型 列参数
mysql> use test;
Database changed
mysql> create table m1(
-> id int unsigned auto_increment primary key
-> )engine myisam charset utf8;
Query OK, 0 rows affected (0.08 sec)
mysql> desc m1;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
+-------+------------------+------+-----+---------+----------------+
1 row in set (0.05 sec)
mysql> alter table m1 add username char(20) not null default '';
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | char(20) | NO | | | |
+----------+------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> #关键熟悉列类型
mysql> alter table m1 birthday date not null default '0000-00-00';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'birthday date not null default '0000-00-00'' at line 1
mysql> alter table m1 add birthday date not null default '0000-00-00';
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | char(20) | NO | | | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+----------------+
3 rows in set (0.01 sec)
mysql> #发现gender性别列忘了加上,想加到username后,
mysql> alter table m1 add gender char(1) not null default '男' after username;
ERROR 1067 (42000): Invalid default value for 'gender'
mysql> set names gbk;
Query OK, 0 rows affected (0.02 sec)
mysql> alter table m1 add gender char(1) not null default '男' after username;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | char(20) | NO | | | |
| gender | char(1) | NO | | 男 | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+----------------+
4 rows in set (0.02 sec)
mysql> #在指定的列后,需要使用after
mysql> #如果想放到第一位,id前面
mysql> #用first
mysql> #alter table m1 add pid int not null default 0 first;
mysql> desc m1;
+----------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | char(20) | NO | | | |
| gender | char(1) | NO | | 男 | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+----------------+
4 rows in set (0.01 sec)
mysql> alter table m1 add pid int not null default 0 first;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+----------------+
| pid | int(11) | NO | | 0 | |
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | char(20) | NO | | | |
| gender | char(1) | NO | | 男 | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+----------------+
5 rows in set (0.01 sec)
mysql> #把新列加到最前面,使用frist
mysql> #删除列,
mysql> alter table m1 drop pid;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | char(20) | NO | | | |
| gender | char(1) | NO | | 男 | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+----------------+
4 rows in set (0.01 sec)
mysql> #修改列
mysql> alter table m1 modify gender char(4) not null default '';
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | char(20) | NO | | | |
| gender | char(4) | NO | | | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+----------------+
4 rows in set (0.01 sec)
mysql> #modify 不能修改列名,
mysql> #修改列名和列类型,需要使用change
mysql> alter table m1 change id uid int unsigned;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+-------+
| uid | int(10) unsigned | NO | PRI | 0 | |
| username | char(20) | NO | | | |
| gender | char(4) | NO | | | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+-------+
4 rows in set (0.01 sec)
mysql> #主键在,自增长丢失
mysql> 如果列类型改变,导致数据存不下怎么办?
-> #主键在,自增长丢失
->
-> exit
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '如果列类型改变,导致数据存不下怎么办?
exit' at line 1
mysql> #主键在,自增长丢失
mysql> #如果列类型改变,导致数据存不下怎么办?
mysql> #比如,int改为smallint ,如果不匹配,数据将会丢失
mysql> #或者在mysql的strict mode下,修改不了
mysql> alter table m1 modify gender char(1) not null default '';
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc m1;
+----------+------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+------------+-------+
| uid | int(10) unsigned | NO | PRI | 0 | |
| username | char(20) | NO | | | |
| gender | char(1) | NO | | | |
| birthday | date | NO | | 0000-00-00 | |
+----------+------------------+------+-----+------------+-------+
4 rows in set (0.01 sec)
mysql> web操作的读写比是20:1
-> exit;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'web操作的读写比是20:1
exit' at line 1
转载于:https://blog.51cto.com/duguodong/1386397
时间:2014年3月27日20:08:01网站建表实战与优化意识相关推荐
- 千寻浏览器 1.0 Beta 1(524)(2014年5月27日)
千寻浏览器--又一款新生浏览器今天进入各位浏览迷的视野.千寻浏览器基于IE内核,据传是由百度浏览器的上海团队操刀,在功能定位上,与目前的QQ浏览器有些相似. 千寻来自官方的解释:寻,追寻,探索,又是古 ...
- 文学 2014年2月23日 20:43:43
文学 2014年2月23日 20:43:43 Kim (Barnes & Noble Classics Series) - Rudyard Kipling.epub: http://www.t ...
- 王晋康 - 替天行道 ▪ 王晋康科幻小说精选集2(2014年3月27日)
<替天行道 ▪ 王晋康科幻小说精选集2> 作 者:王晋康 译 者: 系 列:王晋康科幻小说精选集 出 版:时代文艺出版社 字 数:212千字 阅读完成:2014年3月27日 转载于:htt ...
- 22年最后一次PMP考试时间定了-11月27日,进来了解相关内容信息
2022年11月PMP具体考试时间定了:11月27日 考试分为[上午]和[下午]两场,上午是新报名考试考试,下午是之前6.7.8月申请缓考以及未通过乃至延期的考生考试. 这里是PMP相关发布的通知: ...
- 番茄时间--2018年1月27日
上午10点醒,在宿舍逛淘宝买鞋,牛仔裤. 番茄时间:19点42到20点07 目标:完成第四章的符号匹配和延迟缓冲 完成情况:完成 番茄时间:23点06到23点31 目标:码完求值算法 完成情况:未完成 ...
- 时间:2014年3月27日文件和目录操作函数
主要内容: 目录操作:打开.读取.关闭.创建.重命名.删除 文件操作:打开.读.写.关闭.重命名.删除 信息获取函数 filemtime() filesize() file_exists() is_ ...
- 计科1111-1114班第三周讲义、课外作业(截止日期:2014年3月27日23点-周四晚,学委飞信通知同学)
第三周,我们主要探讨了 哈希算法 与 分治法.分治法是一个通用的算法框架,很多我们日常生活中接触到的算法都可以归类到分治法中. 本周重点 1. 哈希算法及其应用--MD5.大家应该明白哈希算法的主要三 ...
- 2014年10月27日
流行语抹杀我们的个人特质 网络.春晚.电影.电视等媒体,都是制造流行语言的工厂.那些石破天惊的句子或者词语,从一开始就注定被千万人重复使用的命运.它们和使用者一起,为平静的生活增添了不少的乐趣与色彩. ...
- 2014年04月27日
据说是最高效的邻接表.... 别误会,小人只是个渣,这里不自量力下,昨天刚向老蔡学的,给出我的理解 先给出数据结构 struct EDGE{ int next; int to; i ...
最新文章
- Libzip 版本过低或提示reinstall解决方法
- 信号完整性(四):信号振铃是怎么产生的
- 2、Java Swing JFrame和JPanel:窗口容器和面板容器
- 用户注册模块详解(30)
- Android23版本以上删除HttpClient的解决办法
- 马尔可夫链蒙特卡罗法(Markov Chain Monte Carlo,MCMC)
- 北信源管理网页卸载密码_Homebrew: 一行代码实现mac软件管理
- 按英语体育计算机创建透视表,数据透视表和数据透视图概述
- oracle 10g分区表,oracle10g--11gR2分区表汇总四
- iOS Runtime特性之关联对象
- 苹果又出新专利?全包围屏幕iPhone
- java工具类使用_Java工具类使用注意事项
- C++项目中编译部分C的代码
- 程序员笑话集锦:丈夫与妻子篇
- scp ssh: connect to host 192.168.6.129 port 22: Connection refused lost connection
- 迅雷老版本总是提示升级,怎样关闭?
- python:epub文件批量转TXT
- HDOJ 1002 A + B Problem II 高精度的A+B问题
- 微信开发工具取消域名检查_如何检查域名可用性(简易域名搜索工具)
- 努比亚Z5Smini刷机包 正式版时间锁屏 音量唤醒 精简优化 流畅稳定