动态网站都是对数据进行操作,所谓的动态网站就是基于数据库开发的系统,最重要的就是数据管理,或者说我们在开发时都是在围绕数据库在写程序。
在我们使用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数值类数据列类型
整型注意事项:
INT(3)、SMALLINT(3)等整型后面的数字不会影响数值的存储范围,只会影响显示,整型后面的数字只有配合零填充的时候才有实际意义。整型后面的数字可以省略
浮点型注意事项:
浮点型后面的数字会将存入的数字四舍五入,例如:把一个1.234存入FLOAT(6,1)数据列中,结果是1.2,6代表显示长度,1代表小数位长度,会四舍五入.
1.2字符串数据列类型
字符串类型注意事项:
(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时间和日期类据列类型
日期类型注意事项: 存储日期时,我们可以使用整型来进行存储时间戳,这样做便于我们进行日期的计算
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 创建表
创建数据表之前,我们应该注意:创建数据库(如已存在则不需要创建),选择数据库,在该数据库当中创建数据表
创建数据表需要注意:指定数据表的名称(数据表不能重名),指定该表的字段名称、字段数据类型、字段索引,指定表类型和表默认字符集(可省略)
注意事项:
表的字段之间要使用逗号隔开。
建表的最后一句一定不能有逗号。
表名称和字段名称尽量不要使用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] 表名称;