`
frank1998819
  • 浏览: 758531 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

MySQL 表字段属性 (转)

 
阅读更多
http://www.5idev.com/p-php_mysql_column_property.shtml

主键

表的主键(primary key,主关键字)是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录。一个表不能有多个主关键字,并且主关键字的列不能包含空值和重复值。主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。

语法:
PRIMARY KEY (column_name)



uid

username

password

email

regdate



1

admin

b7e591c246d010bb2ccd77d52490c85e

admin@5idev.com

1277992339



2

小明

a193686a53e4de85ee3f2ff0576adf01

xiao@163.com

1278063917



3

Jack

0193686a35e4de85ee3f2ff0567adf490

jack@gmail.com

1278061380


在这个表中,uid 这个字段就是该表的主键。

建立主键应该遵循的一般原则
1.主键应当是对用户没有意义的
2.永远也不要更新主键,如果主键需要更新,则说明主键应对用户无意义的原则被违反了
3.主键不应包含动态变化的数据,如时间戳、创建时间等
4.主键应当由系统自动生成

外键

在两个表的关系中,当一张表(如表A )的主关键字被包含在另一张表(如表B)中时,A 表中的主关键字便成为 B 表的外键(外关键字)。B 表称为主表,A 表称为从表。

外键主要用于保持数据一致性,完整性,避免冗余数据,使两张或多张表形成关联。



cid

uid

comment

createtime

clientip



1

1

评论测试。。

1278011380

123.123.123.123



2

1

写得很详细呀,谢谢!

1278063917

123.123.123.123



3

3

学习了!

1278069380

123.123.123.123


在这个文章评论表 comment 样例中,uid 便是外键,它是 user 表的主键。在该表中记录了用户对文章的评论,关于用户信息,只需对应 user 表的主键 uid 即可。在数据一致性方面,比如当 comment 表没有 uid 为 3 的评论后,才可以删除 user 表中 uid = 3 的记录。

自动递增

在 MySQL 数据库中,提供了字段的自动递增(AUTO_INCREMENT)属性,即将该字段设置为 int 类的数据类型,每向数据表添加一条记录,该字段的值会自动加1 。设置了自动递增后,该列不用再设置默认值和唯一性约束。

例子:
uid mediumint(8) NOT NULL auto_increment

非空

因为逻辑上的一些要求,有时候需要把字段属性设置为非空(NOT NULL),如记录用户名、密码等非空值的字段。

设置为非空的列,虽然不是必须,但最好设定一个默认值,以防止意外的错误和减少增加数据时的 SQL 语句复杂度。当向数据表增加数据记录时,如果设置为非空的字段不写入数据,系统将会以默认值写入。

例子:
username char(20) NOT NULL default ''
//将NOT NULL 改为 NULL
ALTER TABLE user CHANGE username username char(20) NULL

提示

在上面的例子中 CHANGE 后面 username username ,前者表示更改的字段名,后者表示新字段名。在本例中,只更改了字段属性为 NULL ,不涉及到字段名称的更改,因此二者一致。



与非空相反,可以将字段属性设置为空,如果字段属性没有设置为非空(NOT NULL)属性,那么系统默认就是可以为空(NULL)值的。

将NULL 改为 NOT NULL:
ALTER TABLE user CHANGE username username char(20) NOT NULL DEFAULT ''

唯一性约束

有时候某些字段数据不允许重复,如用户名,这时候就需要增加唯一性约束(UNIQUE)。

语法:
UNIQUE (column_name)
//给表字段增加 UNIQUE
ALTER TABLE tb_name ADD UNIQUE (column_name)
//去掉 UNIQUE
ALTER TABLE tb_name DROP INDEX column_name

主键(PRIMARY KEY)会强制性的拥有自动定义的唯一性约束,不用额外定义 UNIQUE 。

索引

数据库索引(index)是为了增加查询速度而对字段附加的一种标识。我们对表的某些可能需要经常查询的字段建立适当的索引,那么在查询该字段数据时,便会显著的加快查询速度。

语法:
KEY key_name (column_name)

KEY 后面的字符为索引名称,括号内为建立索引的字段名。

改进后的建表 SQL
CREATE TABLE user (
    uid mediumint(8) unsigned NOT NULL auto_increment,
    username char(15) NOT NULL default '',
    password char(32) NOT NULL default '',
    email varchar(40) NOT NULL default '',
    regdate int(10) unsigned NOT NULL default '0',
    PRIMARY KEY (uid),
    UNIQUE KEY username (username),
    KEY email (email)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

补充说明

在建表语句正文后面还附加了建表的其它几个属性:
1.ENGINE:表示存储引擎类型,分为 MyISAM 和 InnoDB 两种类型。MyISAM 不支持事务处理等高级处理,强调表的性能,执行也比 InnoDB 快。而 InnoDB 提供事务支持已经外部键等高级数据库功能,性能上比 MyISAM 差。默认为 MyISAM 类型
2.CHARSET:表示数据表表字符集,一般为 gbk 或 utf8 以及 big5 等,为了兼容性考虑,我们设置为 utf8 字符集
3.AUTO_INCREMENT:设置主键默认增长的开始数
分享到:
评论

相关推荐

    MySQL 表字段属性.docx

    MySQL 表字段属性 MySQL 表字段属性是指在 MySQL 数据库中,表的每个字段所具有的特性和约束,包括主键、外键、自动递增、非空、唯一性约束等。 1. 主键(PRIMARY KEY) 主键是表中的一个或多个字段,它的值用于...

    mysql基本操作 5.查看表字段信息

    在MySQL数据库管理系统中,了解如何查看表字段信息是日常数据库管理的重要部分。这涉及到查询数据库模式,获取关于数据表结构的详细信息,如列名、数据类型、约束等。本教程将详细介绍如何进行这一基本操作。 首先...

    根据数据库表字段自动生成javaBean工具(支持Mysql,Oracle)

    为了提高开发效率,各种自动化工具应运而生,其中“根据数据库表字段自动生成JavaBean工具”便是其中之一。这个工具能够帮助开发者快速地从数据库表结构生成对应的JavaBean类,极大地减少了手动编写代码的工作量,...

    mysql导出表的字段和相关属性的步骤方法

    在MySQL数据库管理中,有时我们需要将表的结构信息导出,包括字段名、数据类型、长度、是否可为空、默认值以及备注等属性,以便于文档化或迁移数据。以下是一个详细步骤,指导如何完成这一任务: 1. **确定目标...

    java mysql student

    这些字段定义了学生实体的属性,符合数据库规范化原则,确保数据的一致性和完整性。 5. **数据库连接池**:为了提高性能和资源利用率,通常会使用数据库连接池(如C3P0、HikariCP、Druid等),预先创建并维护一定...

    统一增加表字段.vbs

    powerdesigner 设置公共基础属性,统一给表增加公共基础属性,vbs脚本

    数据库表字段自定义

    本主题将深入探讨如何自定义数据库表字段,以及它的重要性、实现方式和最佳实践。 首先,我们要明白数据库表是数据组织的核心,而字段则是表的构成元素,它们决定了表能存储何种类型的数据。自定义字段意味着可以...

    ogr2ogr将shp文件导入到Mysql.zip

    - **数据类型不兼容**:检查Shapefile字段类型与MySQL表字段类型是否兼容,如有需要,可以使用 ogr2ogr 的 `-nlt` 参数指定几何类型。 6. **优化与注意事项**:为了提高性能,可以考虑使用InnoDB引擎代替MyISAM,...

    MySQL表自动生成Java实体类

    实体类通常包含对应于数据库表字段的属性,并且具有getter和setter方法,以及可能的构造函数和注解,如`@Entity`、`@Table`、`@Id`等,以定义表名和主键。 接下来,我们讨论如何自动生成这些实体类。这里提到的工具...

    Java实体类字段生成工具类-将数据库表列字段转为Java实体类驼峰字段

    1、在Java开发中,常常需要将数据库表列字段换成Java实体类字段。但是手动实现这个转换过程比较慢,且容易出错,影响开发效率。为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表...

    php mysql获取表字段名称和字段信息的三种方法

    这将返回与`DESC`类似但更丰富的信息,包括每个字段的额外属性。 3. 使用`mysql_fetch_field`函数 `mysql_fetch_field`函数允许在执行查询后逐个获取字段信息,而不是一次获取所有信息。以下是如何使用它的示例: ...

    Mysql 代码生成模板

    例如,一个简单的实体类模板可能包含类名(对应数据库表名)、属性(对应表字段)等元素。 接下来,你需要配置模板连接到MySQL数据库,提供数据库连接信息,如主机名、用户名、密码和数据库名。然后,选择要生成...

    Python SqlAlchemy动态添加数据表字段实例解析

    本文将深入探讨如何在SQLAlchemy中动态添加数据表字段。 首先,让我们理解SQLAlchemy的基本用法。通常,我们通过定义一个继承自`Base`的类来创建数据表映射,类的属性对应于数据库中的字段。例如: ```python from...

    mysql表转jfinal model

    JFinal的Model是与数据库表进行交互的基础,它定义了表字段及其属性,实现了ORM(对象关系映射)机制。在JFinal中,你可以通过继承`com.jfinal.plugin.activerecord.Model`类并定义相应的字段来创建一个Model。例如...

    java连接Mysql驱动包

    例如,如果你有一个名为`users`的表,可能会生成一个`User`类,包含与表字段相对应的属性。 “自动生相应的实体类格式的表结构”可能是指反向工程(Reverse Engineering)的过程,通过工具分析数据库表结构,自动...

    Mysql数据库实体生成工具

    工具会根据选定的表自动创建相应的实体类,每个实体类通常包含一个与数据库表字段相对应的属性,并且可能会包含一些额外的特性(如Entity Framework的Ignore特性,用于忽略某些字段不进行映射),以便更好地与ORM...

    mysql 讲义

    表字段类型包括数值型(如int、float)、字符型(如char、varchar、text)以及日期和时间型(如datetime、timestamp、year)。 数据字段的属性有: 1. **unsigned**:表示数字无符号。 2. **zerofill**:在数字前...

    java通过Mysql实现类似oracle序列功能序列.rar

    - 在MySQL中,你可以创建一个带有`AUTO_INCREMENT`属性的表字段,这个字段会在每次插入新记录时自动增加。这可以作为序列的替代方案。例如,创建一个名为`sequence`的表,包含一个名为`id`的自增字段。 4. **存储...

    MySql + JDBC +EasyUI DataGrid实现数据表格的展示和分页

    为了将数据库中的记录转化为前端友好的格式,通常会定义DTO对象,该对象的属性与数据库表字段一一对应。查询结果转换为DTO对象列表,再转换成JSON,这样前端就可以直接解析并展示。 总结,本项目结合了MySQL数据库...

    MySQL所支持的数据类型与表字段约束类型的学习教程

    MySQL是世界上最流行的关系型数据库管理系统之一,其支持多种数据类型和表字段约束,这些是数据库设计的基础。在本文中,我们将深入探讨MySQL的数据类型和字段约束。 首先,MySQL中的数据类型分为四大类:数值类型...

Global site tag (gtag.js) - Google Analytics