php104.tmp,首页-kaka窝论坛-综合管理-细说PHP-kaka窝 - Powered by Discuz!
本帖最后由 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!相关推荐
- 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 ) ( ...
- Discuz论坛标题和底部去掉版权信息 - Powered by Discuz!
需求: 一.标题:打开template/default/common/header_common.htm文件,里面的代码如下 <!DOCTYPE html PUBLIC "-//W3C ...
- discuz论坛怎么去掉标题和底部powered by discuz方法
discuz!论坛程序默认在标题后面带有powered by discuz!,为达到网站优化需要去除powered by discuz!,去除方法很多地方都有介绍,但都不完全,也讲的不够清楚,很多地方 ...
- (附源码)ssm家政综合管理平台 毕业设计 241103
SSM家政综合管理平台 摘 要 在社会快速发展的影响下,家政迅速发展,大大增加了家政服务信息管理的数量.多样性.质量等等的要求,使家政的管理和运营比过去十年更加困难.依照这一现实为基础,设计一个快捷 ...
- 智慧社区综合管理平台——小组展示1
智慧社区综合管理平台 一.项目概况 甲方需求 1.1 需求简介 本项目是为了开发涵盖社区居民服务.社区日常管理.社区物业等多个领域.基于互联网思维的智慧社区综合管理服务云平台.希望依托该系统来构建面向 ...
- 烟草物流信息综合管理平台研究与应用——以H市卷烟厂烟草物流配送中心为例
烟草物流信息综合管理平台研究与应用 --以H市卷烟厂烟草物流配送中心 摘 要 自我国正式加入世界贸易组织(WTO)以来,我国卷烟与外国卷烟之间对零售终端市场的竞争日益激烈,中国烟草目前正面临前所未有的 ...
- 【智慧消防】安科瑞智慧消防综合管理云平台解决方案
01系统概述 安科瑞 李亚俊 壹捌柒贰壹零玖捌柒伍柒 智慧消防综合管理云平台基于物联网.大数据.云计算等现代信息技术,将分散的火灾自动报警设备.电气火灾监控设备.智慧烟感探测器.智慧消防用水等设备连接 ...
- 智慧城市综合管理平台功能清单
智慧城市综合管理平台功能清单 一.九大标准子系统 序号 子系统名称 功能模块备名称 备注 1 无线数据采集子系统 用户管理 用户的权限.角色进行分配和设置.能进行方便而实用的登录和退出操作 考勤管理 ...
- 校园人员与车辆综合管理平台之服务端
目录 校园人员与车辆综合管理平台服务端模块设计与实现 4 一.项目立项 4 (一)项目提出 4 (二)开发团队组成和计划时间 5 (三)风险评估和规避 5 二.执行计划 5 (一)项目开发计划表 5 ...
最新文章
- [architecture]-AXI/APB/AHB/ACE的介绍
- elasticsearch使用优化备忘
- 微信小程序 WXBizDataCrypt 解密 报错
- LeetCode 4	Median of Two Sorted Arrays
- idea主题颜色Linux,IntelliJ IDEA更换主题样式分享
- lstm keras 权重 理解_Keras 作者:TF 2.0+Keras 深度学习研究你需要了解的 12 件事...
- Python typing —— 类型提示(type hint)
- 推荐几个好用又好玩的vscode插件!
- OpenCV/C++:点线面相关计算
- java微信小程序支付-回调(Jsapi-APIv3)
- 【前端html页面数据导出为pdf文件】
- 你是部门经理,老板对你说公司要裁员,你该怎么办?
- telegram 新增 删除 联系人
- python联机麻将_python麻将和牌算法
- 刀片服务器的故障信息,刀片服务器故障
- STM32寄存器编程思路 - 从51到stm32开发入门,真干货
- 关于emplace_back()的理解
- 委托交易怎么卖出开仓?买入开仓和卖出开仓要注意些什么?
- 以问题为导向剖析一些矩阵等价类的本质(合同篇)
- linux服务器两块网卡路由优先级冲突 Metric值
热门文章
- wps一直显示正在备份怎么办_笔记本电脑显示器一直闪动怎么办
- java怎么倒计时_详解java倒计时三种简单实现方式
- Win2008学习(九),Remote App发布MSI格式程序
- qtp xml联合xsl输出html报表,通过xml和xsl实现数据和页面展示模板的解耦(简单完整网站代码示例)...
- 宿主机docker容器互传文件命令
- js中做数字运算时出现的异常,期望值比实际值小太多太多
- Flash与组件:制作Slider组件
- linux grub内核选择,UBUNTU GRUB没有内核选项,怎么回事啊?
- 2. 抓ARP包, 抓PPPoE包
- 符号级别(二)--实际应用