本帖最后由 why 于 2020-9-21 12:20 编辑

第13章 MySQL数据表设计

数据表是数据库中的基本对象元素,以记录(行)和字段(列)组成的二维结构用于存储数据.

数据表由表结构和表内容两部分组成,先建立表结构,然后才能输入数据

数据表结构设计主要包括字段名称,字段类型和字段属性的设置

数据字段属性:

unsigned:该属性只能用于设置数值类型,不允许数据列出现负数

zerofill:该属性也只能用于设置数值类型,在数值之前(左端)自动用0补齐不足的位数

auto_increment:该属性用于设置字段的自动增量属性,当数值类型的字段设置为自动增量时,每增加一条新记录,该字段的值就自动增加1,且此字段不允许重复

NULL和not NULL:默认为NULL,即插入值时没有在此字段插入值,如果指定了not NULL,则必须在插入值时在此字段填入值

default:可以通过此属性来指定一个默认的值,如果没有在此列添加值,那么默认添加这个默认值作为值

创建一个用于存储用户信息表users

create table users (

id int(10) unsigned not NULL auto_increment,

username varchar(50) not NULL,

userpass varchar(50) not NULL,

telno varchar(20) not NULL,

sex enum('男','女')not NULL default '男',

brithday date not NULL default '2000-01-01',           //'2000-01-01'这里在5.7版本的MySQL中值不能为0

primary key(id),

index user_username(username,userpass)

)ENGINE=MYISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;

//ENGINE=MYISAM设置默认表类型为MYISAM

//CHARSET=utf8设置字符集为utf8,因为表里出现了中文

//COLLATE utf8_general_ci校对规则

//书上用的<>写的语句,但是在5.7版本的MySQL中这样写不行,换成()就可以了

desc命令查询结果:

为指定的数据表添加一个新字段,语法格式如下所示:

alter table 表名 add 字段名(建表语句)[first|after列名];     //在某列之前|之后添加一个新字符

为上表条件一个Email字段:

alter table users add email varchar(30) not null;

在第一列前面添加一个真实姓名(name)的新列,列类型为字符串,属性设置为非空

alter table users add name varchar(30) not null first;

在原有字段userpass之后添加一个身高(height)的新列,类型为double,属性为非空并设置默认值为0.00

alter table users add height double not null default '0.00' after userpass;

删除表的一个字段

alter table cats drop pid;

为指定的数据表更改原有字段的类型,可使用change或modify语句.如果原列的名字和新列的名字相同,则change和modify的作用相同

alter table change(modify)列名(建表语句)

将user表中的电话号码字段telNo类型varchar(20)更改为数值类型int,并将默认值设置为0

alter table users modify telno int unsigned default '0';

再用change将字段telNo类型int型修改回varchar(20)类型

alter table users change telno(原字段名) phone(新字段名) varchar(20)(类型);       //change修改类型的时候需要连原字段名一起修改

为指定的数据表重新命名:

alter table 旧表名 rename as 新表名

为users重新命名为userss:

alter table uerss rename as userss;

当某个数据表不再需要时,可以使用drop table语句删除,语法如下:

drop table [if exists]表名

[if exists]当不能确定数据表是否存在,如果存在就删除它,不存在则在删除时也不希望出现错误,添加[if exists]语句后如果表不存在,脚本也会向下继续执行而不会抛出错误

创建一个新表的时候,可以通过engine或type选项决定数据表类型

主键索引(primary key)是关系数据库中最常见的额索引类型,主要作用是确定数据表里一条特定的数据记录的位置.数据表会根据主键的唯一性来唯一标识每条记录,任意两条记录里的主键字段不允许是同样的内容.一个表只能指定一个主键,且主键的值不能为空

分别创建两个数据表,并为每个表的id指定主键:

CREATE TABLE cats(

->    cid int not NULL auto_increment primary key,

->    catname varchar(15)not NULL

->    );

CREATE TABLE books(

->    bid int(10) unsigned not null auto_increment,

->    cid mediumint(8) not null,

->    bookname varchar(50) not null,

->    price double not null,

->    detail text not null,

->    primary key(bid)

->    );

唯一索引(unique)与主键索引一样,都可以防止创建重复的值.不同之处在于,每个数据表只能有一个主键索引,但可以有多个唯一索引,如果能确定某个数据列将只包含彼此不相同的值,在位这个数据创建索引时就应该使用关键字unique把它定义为一个唯一索引.这样在有新记录插入时,就会自动检查新记录的这个字段的值,是否已经存在某个现有记录的这个字段里出现过,如果是,MySQL将拒绝插入这条新记录,唯一索引的目的往往只是为了避免数据出现重复

常规索引(index)是关系数据查询中最重要的技术,如果要提升数据库的性能,索引优化是首先应该考虑的,因为它能使我们的数据库得到最大性能方面的提升.如果没有索引的数据表,就没有排序的数据集合,要查询数据,就需要全表扫描.有索引的表是一个在索引列上排序了的数据表,可以通过索引快速定位记录.在myisam数据表中数据行保存在数据文件中,索引保存在索引文件中

创建表carts时,随表一同为uid和bid创建一个名为ind的索引,如下:

CREATE TABLE carts(

cid int(10) not null auto_increment,

uid int(10) not null,

bid int(10) not null,

num int(10) not null,

primary key(cid),

key ind(uid,bid)           //创建一个名为ind的常规索引,key通常是index的同义词

);

如果未给出索引名ind,系统会根据第一个索引列的名称自动选一个(一般使用"表名_列表"为索引命名).如果在创建表时没有创建索引,就需要使用create index命令来创建同样的常规索引,如下所示:

create index ind on carts(uid,bid);                     //创建名称为in对的索引为carts表的两个列

创建索引后,可以通过show index from carts命令为表carst生成一份索引的清单,

show index from carts;                                   //索引生成命令也能查看索引情况

还可以使用drop index ind on carts命令删除索引

全文索引(fulltext)

php104.tmp,首页-kaka窝论坛-综合管理-细说PHP-kaka窝 - Powered by Discuz!相关推荐

  1. lisp文字上标源码_删除重叠文字源码 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - 源码,程序 - Powered by Discuz!...

    [code="lisp] (defun C:DUPREM (/ F1 SLE SA CA TA LA LB ENTA EA TYPA A1 A2 A3 A4 SC LTEST TES ) ( ...

  2. Discuz论坛标题和底部去掉版权信息 - Powered by Discuz!

    需求: 一.标题:打开template/default/common/header_common.htm文件,里面的代码如下 <!DOCTYPE html PUBLIC "-//W3C ...

  3. discuz论坛怎么去掉标题和底部powered by discuz方法

    discuz!论坛程序默认在标题后面带有powered by discuz!,为达到网站优化需要去除powered by discuz!,去除方法很多地方都有介绍,但都不完全,也讲的不够清楚,很多地方 ...

  4. (附源码)ssm家政综合管理平台 毕业设计 241103

    SSM家政综合管理平台 摘  要 在社会快速发展的影响下,家政迅速发展,大大增加了家政服务信息管理的数量.多样性.质量等等的要求,使家政的管理和运营比过去十年更加困难.依照这一现实为基础,设计一个快捷 ...

  5. 智慧社区综合管理平台——小组展示1

    智慧社区综合管理平台 一.项目概况 甲方需求 1.1 需求简介 本项目是为了开发涵盖社区居民服务.社区日常管理.社区物业等多个领域.基于互联网思维的智慧社区综合管理服务云平台.希望依托该系统来构建面向 ...

  6. 烟草物流信息综合管理平台研究与应用——以H市卷烟厂烟草物流配送中心为例

    烟草物流信息综合管理平台研究与应用 --以H市卷烟厂烟草物流配送中心 摘 要 自我国正式加入世界贸易组织(WTO)以来,我国卷烟与外国卷烟之间对零售终端市场的竞争日益激烈,中国烟草目前正面临前所未有的 ...

  7. 【智慧消防】安科瑞智慧消防综合管理云平台解决方案

    01系统概述 安科瑞 李亚俊 壹捌柒贰壹零玖捌柒伍柒 智慧消防综合管理云平台基于物联网.大数据.云计算等现代信息技术,将分散的火灾自动报警设备.电气火灾监控设备.智慧烟感探测器.智慧消防用水等设备连接 ...

  8. 智慧城市综合管理平台功能清单

    智慧城市综合管理平台功能清单 一.九大标准子系统 序号 子系统名称 功能模块备名称 备注 1 无线数据采集子系统 用户管理 用户的权限.角色进行分配和设置.能进行方便而实用的登录和退出操作 考勤管理 ...

  9. 校园人员与车辆综合管理平台之服务端

    目录 校园人员与车辆综合管理平台服务端模块设计与实现 4 一.项目立项 4 (一)项目提出 4 (二)开发团队组成和计划时间 5 (三)风险评估和规避 5 二.执行计划 5 (一)项目开发计划表 5 ...

最新文章

  1. [architecture]-AXI/APB/AHB/ACE的介绍
  2. elasticsearch使用优化备忘
  3. 微信小程序 WXBizDataCrypt 解密 报错
  4. LeetCode 4 Median of Two Sorted Arrays
  5. idea主题颜色Linux,IntelliJ IDEA更换主题样式分享
  6. lstm keras 权重 理解_Keras 作者:TF 2.0+Keras 深度学习研究你需要了解的 12 件事...
  7. Python typing —— 类型提示(type hint)
  8. 推荐几个好用又好玩的vscode插件!
  9. OpenCV/C++:点线面相关计算
  10. java微信小程序支付-回调(Jsapi-APIv3)
  11. 【前端html页面数据导出为pdf文件】
  12. 你是部门经理,老板对你说公司要裁员,你该怎么办?
  13. telegram 新增 删除 联系人
  14. python联机麻将_python麻将和牌算法
  15. 刀片服务器的故障信息,刀片服务器故障
  16. STM32寄存器编程思路 - 从51到stm32开发入门,真干货
  17. 关于emplace_back()的理解
  18. 委托交易怎么卖出开仓?买入开仓和卖出开仓要注意些什么?
  19. 以问题为导向剖析一些矩阵等价类的本质(合同篇)
  20. linux服务器两块网卡路由优先级冲突 Metric值

热门文章

  1. wps一直显示正在备份怎么办_笔记本电脑显示器一直闪动怎么办
  2. java怎么倒计时_详解java倒计时三种简单实现方式
  3. Win2008学习(九),Remote App发布MSI格式程序
  4. qtp xml联合xsl输出html报表,通过xml和xsl实现数据和页面展示模板的解耦(简单完整网站代码示例)...
  5. 宿主机docker容器互传文件命令
  6. js中做数字运算时出现的异常,期望值比实际值小太多太多
  7. Flash与组件:制作Slider组件
  8. linux grub内核选择,UBUNTU GRUB没有内核选项,怎么回事啊?
  9. 2. 抓ARP包, 抓PPPoE包
  10. 符号级别(二)--实际应用