讲师中心 微信公众号
AI工具推荐 视频效率加速

ThinkPHP5数据库实例详解

浏览21089
更新时间2022-01-20

创建数据表

1、基本语法:

CREATE TABLE IF NOT EXISTS 数据表名称 (
 字段名称1  [AS 别名]  字段类型  [约束条件] [DEFAULT 默认值] [COMMENT 字段注释],
 字段名称2  [AS 别名]  字段类型  [约束条件] [DEFAULT 默认值] [COMMENT 字段注释],
 字段名称3  [AS 别名]  字段类型  [约束条件] [DEFAULT 默认值] [COMMENT 字段注释],
 ......
)ENGINE = 表存储引擎  DEFAULT CHARSET = 默认编码集  AUTO_INCREMENT = 自增主键起始值;

2、语法解释:

  • 字段名称:不与MySQL关键字重名的任何有效标识符即可;

  • IF NOT EXISTS:意思是“如果不存在”再创建数据表,防止重复建表引起错误;

  • AS 别名:表中字段名均为英文单词或缩写,创建一个有意义的别名,使数据表查询结果更加直观、人性化;

  • 字段类型:非常重要,本文后面有详细介绍;

  • 约束条件:主要是NULL(允许为空),NOT NULL(禁止为空)等,具体还要与字段类型相匹配;

  • DEFAULT 默认值:如某字段设置了默认值,则新增时未赋值则取默认值;

  • COMMENT 字段注释:非必须,但可以使字段信息看上去再完整、直观;

  • ENGINE = 表存储引擎:

    • MyISAM:读取快速、成熟稳定、支持全文检索、最常用,但不支持事务处理;
    • InnoDB:具备提交、回滚的事务处理,支持外键,战用空间大,不支持全文检索;
  • DEFAULT CHARSET 默认编码集: 通常与数据库采用的编码集相同(utf8)即可;

  • AUTO_INCREMENT = 自增主键起始值:如果设置,将从该值开始自增,如设置为1001,则第一条记录是1001,第二条是1002。如果不设置,主键将默认从1开始自增;


3、字段类型:

字段类型也叫列类型,主要有:数值、字符串、日期/时间三大类。

  1. 数值型:有无符号和有符号之分,直接书写,不要加引号,长度仅影响显示,不影响精度。

    1. 整型:又分为五类
      1. INT : 标准整型,4字节,取值范围大约正负21亿,足以应付正常开发需要;
      2. SMALLINT:小整数,2字节,取值范围大约正负3.2万之间,无符号翻倍。
      3. TINYINT:极小整数,1字节,取值-128~127,无符号:0~255。
      4. 其它:MEDIUMINT(3字节),BIGINT(8字节),不太常用。
    2. 浮点型:
      1. FLOAT:最常用,用4字节或8字节表示,具体依平台而定;
      2. DOUBLE:双精度8字节;
      3. DECIMAL:以字符串形式存储的浮点数,大小自定义,用于会计领域等。
  2. 字符串类型:

    1. CHAR(长度): 固定宽度存储字符串,忽略原始字符串长度;
    2. VARCHAR(长度):可变长度字符串,根据原始字符串长度存储;
    3. TEXT:小型文本,不能设默认值和长度;
    4. LONGTEXT:超大文本,同样不可设默认值和长度;
    5. ENUM(枚举):在括号中集合数据中,只可以单选,无默认值;
    6. SET(集合):集合最大64个成员,可以多选,无默认值。
  3. 日期/时间类型(不要设置长度):


    1. DATE:3字节,格式 YYYY-MM-DD,如 2016-10-20;
    2. TIME:3字节,格式 hh:mm:ss,如 12:25:35;
    3. DATETIME:8字节,格式 YYYY-MM-DD hh:mm:ss,如 2016-10-20 12:25:35;
    4. TIMESTAMP:3字节时间戳,格式YYYYMMDDhhmmss共14位,可设置显示长度进行截取操作,必须是偶数长度,常见6位,8位,12位;
    5. YEAR:单字节,格式 YYYY,显示年份,如2016。




4、约束条件:

主要有UNSIGNED、ZEROFILL、AUTO_INCREMENT、NULL / NOT NULL、DEFAULT等。

序号 约束条件 字段类型 说明
1 UNSIGNED INT , FLOATT等数值型 全是正数,范围扩大一倍
2 ZEROFILL INT , FLOAT 等数值型 宽度大于实际长度时补足前导零
3 AUTO_INCREMENT INT 无符号、默认从1开始自增,接受NULL或空值
4 NULL / NOT NULL 不限制 为空或不为空
5 DEFAULT 非TEXT类型或主键 添加新记录时没赋值,则取默认值

5、实例

任务:创建员工信息表staff

staff数据表结构如下:

序号 字段名 类型 宽度 约束 默认值 备注
1 id 整型 4位 无符号、不为空、自增、主键 无 编号
2 name 变长字符串 30位 不为空 无 姓名
3 sex 整型 1位 不为空 1 性别1男0女
4 salary 浮点型 共10位小数2位 无符号、不为空 2000 工资
5 dept 变长字符串 20位 不为空 开发部 部门
6 hiredate 日期 默认 不为空 0000-00-00 入职日期

要求数据表存储引擎为MyISAM,默认编码:utf8,自增主键起始:1001。

创建数据表SQL语句:
CREATE TABLE IF NOT EXISTS  staff (
id INT(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
name VARCHAR(30) NOT NULL    COMMENT '姓名',
sex TINYINT(2)  unsigned  NOT NULL  DEFAULT 1  COMMENT '性别1男0女',
salary FLOAT(10,2) NOT NULL DEFAULT 2000.00 COMMENT '工资',
dept VARCHAR(20)  NOT NULL  DEFAULT '开发部' COMMENT '部门' ,
hiredate DATE  NOT NULL  DEFAULT '0000-00-00' COMMENT '入职日期',
PRIMARY KEY (id)
)ENGINE = MyISAM DEFAULT CHARSET = utf8  AUTO_INCREMENT = 1001;
运行结果:

查看表结构:
  • 语法:DESC 表名

总结:

数据表,是我们ThinkPHP开发中,数据库操作的重要载体。而创建数据表,则是最重要的一环。一个结构良好、健壮的表结构是我们所有模型操作的基础。

请同学们,对于熟练创建数据表技能,给予足够重视!


关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn