创建数据库
所有关键字最好大写,虽然不区分大小写
二、创建数据表的SQL语句模型
DDL
CREATE TABLE [IF NOT EXISTS]表名称(
字段名1 列类型[属性][索引]
字段名2 列类型[属性][索引]
……
字段名n 列类型[属性][索引]
)[表类型][表字符集];
表名称 和 字段名 需要我们自己定义名称
表名最好用复数
users
articles
SQL是不区分大小写的,但是表就是一个文件名,windows不区分大小写,Linux区分大小写
1、一定要有意义(英文或英文组合和多个单词的缩写)
2、自己定义的名称最好都小写
3、SQL语句都大写
三、数据值和列类型
细分都是按空间大小来区分的
可以存下就可以
1、数值型
整型(整数)
非常小的整型 1字节 -128--127 0---255(无符号) TINYINT
较小的整型 2字节 -32768---32767 0----65535(无符号)SMALLINT
中等大小的整型 3字节 0---16777215(无符号)MEDIUMINT
标准的整数型 4字节 -2147483648-----2147483647 INT
大整数型 8字节 BIGINT
浮点型(小数)
float(M,D) 4字节
double (M,D) 8字节
定点数
decimal(M,D) M+2字节
浮点数有误差,最好不要用于等号比较,在涉及资金等重要数据时,应该用定点数; 定点数以字符串的形式保存,会自动转换,执行效率较低;
2、字符型
'mysql' "mysql" \(转义字符)
char(m) 255(最大存储空间) 超过255个字符会被节断 固定长度字符串
varchar(m) 255 可变长度字符串(内容长度+1)
char(4) varchar(4)
'' 4 '' 1字节
ab 4 ab 3
abc 4 abc 4
abcdef 4 abcdef 5
text文本数据(文章) 2 16次方-1
MEDIUMTEXT
LONGTEXT
blob二进制数据(相片)
MEDIUMBLOB
LONGBLOB
ENUM 枚举 1或2字节
ENUM("one","two","three","four")-------65535 一次只能用一个值
SET 集合 1,2,3,4,8字节 ------64 一次可以用多个集合中的值,中间使用“,”分开
3、日期型
TIME hh:mm:ss
DATE YYYY-MM-DD
DATETIME YY-MM-DD hh:mm:ss
TIMESTAMP YYYYMMDDhhmmss
YEAR YYYY
创建表时最好不用使用这些中的时间格式(PHP中时间戳 1970-1-1 0:0:0)是一整数
用整数保存时间 time();
int
四、数据字段属性
1、unsigned 可以让空间增加一倍
只能用在数值型字段
2、zerofill
只能用在数值型字段,前导0
该字段自动应用 unsigned
3、auto_increment
只能是整数,数据每增加一条就会自动增加1,字段值不允许重复
null 0 留空 会在字段自动加1
每个表都最好有一个ID字段,设置为自动增涨,auto_increment
4、NULL 和 NOT NULL
默认是空
NULL 是一个值
将这个表的数据转为PHP程序的数据时,整数列有NULL,能转成0吗
建议:在创建表时每个字段都不要插入NULL
not null
5、default
CREATE TABLE USRES(
id INT UNSIGNED NOT NULL AUTO_ INCREMWENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
height DOUBLE(10,2) NOT NULL DEFAULT 0.00,
age INT NOT NULL DEFAULT '男'
);
五、创建索引
1、主键索引
主要作用确定数据库表里一条特定数据的位置
最好为每一张数据表定义一个主键
一个表只能指定一个主键
主键的值不能为空
2、唯一索引
(与主键索引一样)都可以防止创建重复的值
每一个表可以有多个唯一索引
unique
3、常规索引
最重要的技术
提升数据库的性能
1111111111
22222
……
索引顺序 5层 软件开发 PHP 《细说PHP》
可以提高查找的速度,减慢数据列上插入,删除,修改的速度
和表一样是独立的数据对象
可以单独使用
也可心以在创建表时创建
index 与 key 是同义词
多列都可以指定索引
4、全文索引
fulltext类型索引,MyISAM表类型使用,只有在varchar char text 文本字符串上使用
也可以多个数据列使用
create table books(
id int,
bookname varchar(30),
price double,
detail text not null,
fulltext(detail,bookname),
index ind(price),
primary key(id)
);
如果没有全文索引,则
select * from books where bookname like '%php%';
如果有全文索引,则
select bookname,price from books where MATCH(detail) AGAINST('php');
在detail这个字段中查询包含php的字段
六、数据表类型及其存储位置
MySQL和大多数数据库不同,MySQL有一个存储引擎概念
MySQL可以针对不同的存储引擎需要可以选择最优的存储引擎
引擎也叫做数据表类型
我们只学12种中的MyISAM和InnoDB两种(show engines)
create table() type InnoDB
create table() engine InnoDB
type和engine是同义词
MyISAM表类型是默认的
注意:在一个MySQL库(创建表时)中可以指定不同的表类型 MyISAM表类型
OPTIMIZE TABLE 表名 (恢复浪费的空间)
优点:强调可以快速读取操作
缺点:有一些功能不支持
InnoDB表类型
优点:支持一些MyISAM所不支持的功能
缺点:占用空间大
功能 MyISAM InnoDB
事务处理 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
表空间占用 相对小 相对大,最大2倍
全文索引 支持 不支持
七、MySQL默认字符集
ACSII
IS0-8859-1/latin1
gb2312-80 不推荐使用
gb13000 不推荐使用
GBK 可以用
GB18030 数据支持比较少
UTF -32
USC -2
UTF -16
UTF -8 1----4个字节的编码,强烈推荐
GBK 2字节 UTF8 3字节汉字
name varchar(12) 6个汉字 GBK
name varchar(12) 4个汉字 UTF-8
MySQL服务器,数据库,数据表,字段
查看支持的字符集 show character set;
数据库中的UTF-8 是 utf8
MySQL的字符集包括
字符集:是用来定义MySQL存储字符的方式 36个
校对规则:是对规则定义了比较字符串的方式 70个
一对多的关系:1个字符集可以对应多个校对规则
客户端与服务器交互时
character_set_client
character_set_connection
character_set_results
set names 字符集,同时修改以上三个的值
八、修改表
Alter table

浙公网安备 33010602011771号