PHP入门 – MySQL数据库/数据表设计

动态网站都是对数据进行操作,所谓的动态网站就是基于数据库开发的系统,最重要的就是数据管理,或者说我们在开发时都是在围绕数据库在写程序。

在我们使用PHP开发中小型网站时,一般首选使用MySQL数据库。LAMP或LNMP都是开源免费的,是我们经常搭建的服务器环境。

MySQL数据库常用操作

mysql –h 服务器主机地址 –u 用户名 –p 用户密码

只有客户机所在的主机被授予权限才能去连接MySQL服务器。

注意:

每个SQL命令都需要使用分号来完成

可以将一行命令拆成多行

可以通过\c来取消本行命令

可以通过\q、exit、ctrl+c或者quit来退出当前客户端

MySQL数据库创建/删除/选择

创建数据库

CREATE DATABASE [IF NOT EXISTS] 数据库名称;

删除数据库:

DROP DATABASE [IF EXISTS] 数据库名称;

显示当前数据库服务器下的所有数据库列表:

SHOW DATABASES;

选择数据库:

USE 数据库名称;

注意:

MySQL数据库中命令不区分大小写。

每创建一个数据库,就会在data目录下创建一个以此数据库名称命名的文件夹。

在Windows下,数据库名称也是不区分大小写的,但在Linux下,数据库名称严格区分大小写。

数据表的设计

1.数据列四大数据类型

数值类数据列类型 字符串类数据列类型 日期和时间类数据列类型 NULL值

1.1数值类数据列类型

图片1
图片2

整型注意事项:

INT(3)、SMALLINT(3)等整型后面的数字不会影响数值的存储范围,只会影响显示,整型后面的数字只有配合零填充的时候才有实际意义。整型后面的数字可以省略

浮点型注意事项:

浮点型后面的数字会将存入的数字四舍五入,例如:把一个1.234存入FLOAT(6,1)数据列中,结果是1.2,6代表显示长度,1代表小数位长度,会四舍五入.

1.2字符串数据列类型

图片3

字符串类型注意事项:

(1)CHAR和VARCHAR类型

CHAR和VARCHAR类型的长度范围都在0~255之间

在使用CHAR和VARCHAR类型时,当我们传入的实际的值的长度大于指定的长度,字符串会被截取至指定长度

在使用CHAR类型时,如果我们传入的值的长度小于指定长度,实际长度会使用空格补至指定长度

在使用VARCHAR类型时,如果我们传入的值的长度小于指定长度,实际长度即为传入字符串的长度,不会使用空格填补

CHAR要比VARCHAR效率更高,但占用空间较大

(2)BLOB和TEXT类型

BLOB和TEXT类型是可以存放任意大数据的数据类型

BLOB区分大小写,TEXT不区分大小写

(3)ENUM和SET类型

ENUM和SET类型是特殊的的串类型,其列值必须从固定的串集中选择

ENUM只能选择其中一个值,SET可以选择多个值

1.3时间和日期类据列类型

图片4

日期类型注意事项: 存储日期时,我们可以使用整型来进行存储时间戳,这样做便于我们进行日期的计算

1.4 NULL值

NULL值注意事项:NULL意味着“没有值”或“未知值,可以测试某个值是否为NULL,不能对NULL值进行算术计算,对NULL值进行算术运算,其结果还是NULL,0或NULL都意味着假,其余值都意味着真。

2.数据字段属性

UNSIGNED 只能用于设置数值类型,不允许出现负数,最大存储长度会增加一倍

ZEROFILL 只能用于设置数值类型,在数值之前会自动用0补齐不足的位数

AUTO_INCREMENT 用于设置字段的自动增长属性,每增加一条记录,该字段的值会自动加1

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

DEFAULT 可以通过此属性来指定一个默认值,如果没有在此列添加值,那么默认添加此值

3.索引

索引主要包含 主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、常规索引(INDEX)、全文索引(FULLTEXT)。

3.1 主键索引

主键索引是关系数据库中最常见的索引类型,主要作用是确定数据表里一条特定的数据记录的位置。我们可以在字段后添加PRIMARY KEY来对字段设置为主键索引。

注意:

最好为每张表指定一个主键,但不是必须指定。

一个表只能指定一个主键,而且主键的值不能为空

主键可以有多个候选索引(例如NOT NULL,AUTO_INCREMENT)

3.2 唯一索引

唯一索引与主键索引一样,都可以防止创建重复的值。但是,不同之处在于,每个数据表中只能有一个主键索引,但可以有多个唯一索引。我们使用关键字UNIQUE对字段定义为唯一索引

3.3 常规索引

常规索引技术是关系数据查询中最重要的技术,如果要提升数据库的性能,索引优化是首先应该考虑的,因为它能使我们的数据库得到最大性能方面的提升。常规索引也存在缺点:

多占用磁盘空间

会减慢插入,删除和修改操作

需要按照索引列上排序格式执行

创建索引我们可以使用INDEX和KEY关键字随表一同创建。

4.数据表操作

4.1 创建表

创建数据表之前,我们应该注意:创建数据库(如已存在则不需要创建),选择数据库,在该数据库当中创建数据表

创建数据表需要注意:指定数据表的名称(数据表不能重名),指定该表的字段名称、字段数据类型、字段索引,指定表类型和表默认字符集(可省略)

图片1

图片2

注意事项:

表的字段之间要使用逗号隔开。

建表的最后一句一定不能有逗号。

表名称和字段名称尽量不要使用MySQL系统的关键字

如果一定要使用关键字,我们可以使用反引号将表名称和字段名称包含起来来进行过滤屏蔽。

使用反引号会使建表效率增高。

数据表名称和字段名称不能重名

AUTO_INCREMENT属性必须依附于主键索引或唯一索引

查看表结构命令: DESC 表名;

4.2 修改表

修改表的语法:ALTER TABLE 表名 ACTION;

我们可以对表进行修改字段,添加字段,删除字段,添加索引,删除索引,更改表名称,更改字段名称,更改auto_increment属性的初始值等。

4.2.1 修改字段

我们使用change或者是modify关键字

ALTER TABLE `users` CHANGE `username` `uname` VARCHAR(32) NOT NULL;

ALTER TABLE `users` MODIFY `username` VARCHAR(32) NOT NULL;

由上例可以发现:

change可以改变字段名称,而modify不可以

4.2.2 添加字段

我们使用add关键字

ALTER TABLE `uses` ADD `tname` VARCHAR(32) NOT NULL;

这样我们就会新增一个tname字段。

如果添加在某个字段后面添加一个字段,可以按照下面的方法写:

ALTER TABLE `users` ADD `email` VARCHAR(20) NOT NULL DEFAULT ''  AFTER `tel`;

这样添加的 email 字段就会紧挨这字段 tel 后面

4.2.3 删除字段

我们使用drop关键字

ALTER TABLE `users` DROP `tname`; 这样我们会删除tname字段

4.2.4 更改表名称:

我们使用rename关键字

ALTER TABLE 旧表名 RENAME AS 新表名; 将旧表名更改为新表名

更改AUTO_INCREMENT初始值:

ALTER TABLE 表名称 AUTO_INCREMENT=1;  将AUTO_INCREMENT的初始值设置为1

4.2.5 添加索引:

我们使用add关键字

ALTER TABLE `uses` ADD INDEX/UNIQUE/PRIMARY KEY/索引名 (字段名称)

这样会在该字段上建立索引(普通索引,唯一索引,主键索引)。

ALTER TABLE user ADD UNIQUE username_unqiue (username);
ALTER TABLE user ADD INDEX username_index (username);

注意:在创建唯一索引时,有时会出现提示 ERROR 1062 (23000): Duplicate entry '***' for key 'username_unique'

这个问题的原因是该字段中已经存在重复的值,所以不能直接创建唯一索引。解决办法是删除重复的值,或清空表数据。

查看表里的全部索引

SHOW INDEX FROM 表名称;

或者 SHOW KEYS FROM 表名称;

查询的结果分别是:

· Table
表的名称。
· Non_unique
如果索引不能包括重复词,则为0。如果可以,则为1。
· Key_name
索引的名称。
· Seq_in_index
索引中的列序列号,从1开始。
· Column_name
列名称。
· Collation
列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。
· Cardinality
索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。
· Sub_part
如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
· Packed
指示关键字如何被压缩。如果没有被压缩,则为NULL。
· Null
如果列含有NULL,则含有YES。如果没有,则该列含有NO。
· Index_type
用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
· Comment

4.2.6 删除索引:

删除索引研究了半天,终于知道怎么删除了。

(1)删除UNIQUE唯一索引和INDEX常规索引的方法:

ALTER TABLE `users` DROP INDEX 索引名称;

注意:INDEX可以删除唯一索引

(2)删除PRIMARY KEY 主键索引,去掉一个表格的主键需要分2中情况:

A、该列(column)不光设置为主键(primary key),还有自增长(auto_increment);

句式:alter table +表名+ modify id int, drop primary key;

B、如果没有设置为自增长(auto_increment),那么可以直接删除主键(primary key );

句式:alter table +表名+drop primary key;

这样我们会删除这个索引,我们可以使用show indexes from 表名查看当前表索引。

4.3 删除表

DROP TABLE [IF EXISTS] 表名称;

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇