php数据库表设计,MySQL数据表的设计
数据表:数据表由表结构和表内容两部分组成,先建⽴表结构,然后才能输⼊数据。
数据表结构设计主要包括字段名称、字段类型、和字段属性的设置。
在关系数据库中,为了确保数据的完整性和⼀致性,在创建表时除了必须指定字段名称、字段类型、字段属性外,还需要使⽤约束(constraint)、索引(index)、主键(primary key)和外键(foreign key)等功能属性。
数据值和列类型(字段的类型):
对MySQL中数据值的分类:有数值型、字符型、⽇期型和空值等。
MySQL中的列类型有三种:数值类、字符串类和⽇期/时间类。
数值类的数据列类型
数值分整型和浮点型两种。
整型中⼜分为5种整型数据列类型:数据列类型存储空间说明取值范围
TINYINT
男或⼥1字节⾮常⼩的整数带符号值:-127~127
⽆符号值:0~255
INT
最常⽤的4字节标准整数
BIGINT8字节⼤整数
SMALLINT
学校⼈数
MEDIUMINT
整型注意事项:INT(3)、SMALLINT(3)等整型后⾯的数字不会影响数值的存储范围,只会影响显⽰
整型后⾯的数字只有配合零填充的时候才有实际意义。
整型后⾯的数字可以省略
浮点型数据列类型:数据列类型存储空间说明取值范围
FLOAT4或8字节单精度浮点数
DOUBLE
(商城)8字节双精度浮点数
DECIMAL
(⾦融、银⾏、科学研究)⾃定义以字符串形式表⽰的浮点数取决于存储单元字节数
字符串类数据列类型
字符串可以⽤来表⽰任何⼀种值,所以它是最基本的类型之⼀。
我们可以⽤字符串类型来存储图像或声⾳之类的⼆进制数据,也可以存储⽤gzip压缩的数据。但是现在不会把图⽚存储到数据库中。
MySQL⽀持以单或双引号包围的字符序列。如:“MySQL”,'PHP'。
同PHP程序⼀样,MySQL能识别字符串中的转义序列,转义序列⽤反斜杠(\)表⽰。
字符串列类型:
枚举:存男或⼥这样的汉字或字符串。⽤的时候直接调⽤过来,⽤的很少,⼀般⽤tinyint代替,因为数字更快!
如果成员过多,可以考虑⽤集合,但是当能⽤到枚举和集合的时候就可以考虑换内存级别的数据库了,如:redius。
字符串类型注意事项:CHAR和VARCHAR类型的长度范围都在0~255之间
在使⽤CHAR和VARCHAR类型时,当我们传⼊的实际的值的长度⼤于指定的长度,字符串会被截取⾄指定长度
在使⽤CHAR类型时,如果我们传⼊的值的长度⼩于指定长度,实际长度会使⽤空格补⾄指定长度
在使⽤VARCHAR类型时,如果我们传⼊的值的长度⼩于指定长度,实际长度即为传⼊字符串的长度,不会使⽤空格填补
CHAR要⽐VARCHAR效率更⾼,但是占⽤空间较⼤
⽇期和时间型数据列类型
⽇期类型注意事项:
存储⽇期时,我们可以使⽤整型来进⾏存储时间戳,这样做便于我们进⾏⽇期的计算
时间戳:1970年1⽉1⽇0时0分0秒开始
调⽤PHP中的time()函数获取当前的时间戳
//设置时区
date_default_timezone_set("PRC");
//获取当前时间
echo time();
/
/输出当前时间
echo date('Y-m-d H:i:s',time());
NULL值
NULL值注意事项:NULL意味着“没有值”或“未知值”
可以测试某个值是否为NULL
不能对NULL值进⾏算术计算
php远程连接mysql数据库对NULL值进⾏算术运算,其结果还是NULL
0或NULL都意味着假,其余值都意味着真
数据字段属性:
UNSIGNED只能⽤于设置数值类型,不允许出现负数
最⼤存储长度会增加⼀倍
ZEROFILL只能⽤于设置数值类型,在数值之前会⾃动⽤0补齐不⾜的位数
当给⼀个字段使⽤ZEROFILL修饰时,该字段⾃动应⽤UNSIGNED属性。
AUTO_INCREMENT⽤于设置字段的⾃动增长属性,每增加⼀条记录,该字段的值会⾃动加1
NULL和NOT NULL默认为NULL,即插⼊值时没有在此字段插⼊值,默认为NULL值,如果指定了NOT NULL,则必须在插⼊值时在此字段填⼊值
DEFAULT可以通过此属性来指定⼀个默认值,如果没有在此列添加值,那么默认添加此值
字符集
完整创建表的语句:
create table 表名(
字段名 字段类型(长度) [unsigned] [not null][auto_increment],
字段名 字段类型(长度) [unsigned] [not null default 'xxx'],
....
primary key(id)
)engin=myisam default charset=utf8 collate utf8_general_ci;
表字段操作:
在实际应⽤中,当发现某个表的结构不满⾜要求时,可以⽤ALTER TABLE语句来修改表的结构,包括增加新的字段、删除原有的字段、修改列的类型、属性及索引、表名。
添加字段altertable表名add字段名称类型属性索引类型。。。[FIRST | AFTER列名]
删除字段altertable表名drop字段名称;
修改字段altertable表名modify字段名称类型属性;
altertable表名change原字段名称新字段名称类型属性;
修改表名altertable旧表名renameas新表名
altertable旧表名renameto新表名
altertable旧表名rename新表名
修改字段中,change除了更改类型外,还能更改列名,⽽modify不能实现这个功能。change更改;modify修改;
如果没有指定可选的FIRST或AFTER,则在列表尾添加⼀列,否则在指定列添加新列。
创建索引:
在MySQL中主要有四类索引:主键索引、唯⼀索引、常规索引、全⽂索引。
主键索引:是关系数据库中最常见的索引类型,主要作⽤是确定数据表⾥⼀条特定的数据记录的位置。我们可以在字段后添加PRIMARY KEY来对字段设置为主键索引。
注意:
1.最好为每张表指定⼀个主键,但不是必须指定。
2.⼀个表只能指定⼀个主键,⽽且主键的值不能为空
3.主键可以有多个候选索引(例如NOT NULL,AUTO_INCREMENT)
唯⼀索引与主键索引⼀样,都可以防⽌创建重复的值。
但是,不同之处在于,每个数据表中只能有⼀个主键索引,但可以有多个唯⼀索引。
我们使⽤关键字UNIQUE对字段定义为唯⼀索引。
常规索引技术是关系数据查询中最重要的技术,如果要提升数据库的性能,索引优化是⾸先应该考虑的,因为它能使我们的数据库得到最⼤性能⽅⾯的提升。
常规索引也存在缺点:
1.多占⽤磁盘空间
2.会减慢插⼊,删除和修改操作
3.需要按照索引列上排序格式执⾏
创建索引我们可以使⽤INDEX和KEY关键字随表⼀同创建。
创建索引
createindex索引名称on数据表名(字段)
createuniqueindex索引名on数据表名(字段)
添加⼀个主键索引:altertable数据表名addprimarykey(列);
添加⼀个唯⼀索引:altertable数据表名addunique索引名(字段名);
添加⼀个常规索引:altertable数据表名addindex索引名(字段名);
删除索引
删除常规索引:dropindex索引名称on数据表名;
删除常规索引:altertable表名dropindex索引名;
删除唯⼀索引:altertable表名dropindex索引名;
查看索引:show index(es) from 数据表名;
bbs_user | CREATE TABLE bbs_users1 (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`sex` tinyint(4) DEFAULT '1',
`email` varchar(50) DEFAULT NULL,
`qq` varchar(15) NOT NULL,
`xingqu` text,
PRIMARY KEY (`id`),
UNIQUE KEY `cde` (`username`),
UNIQUE KEY `aaaa` (`email`),
KEY `qqin` (`qq`)
ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论