* 创建数据表
*
*
* 一、什么是数据表
*
*
*
* 二、创建数据表的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 固定长度
* varchar(m) 255 可变长度
*
* char(4) varchar(4)
* '' 4 '' 1字节
* 'ab' 4 'ab' 3字节
* 'abcd' 4 'abcd' 5字节
* 'abcdefg'4 'abcdefg'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、日期型
*
* DATE YYYY-MM-DD
* TIME hh:mm:ss
* DATETIME YYYY-MM-DD hh:mm:ss
* TIMESTAMP YYYYMMDDhhmmss
*
* YEAR YYYY
*
* 创建表时最好不要使用这些中的时间格式(PHP中时间戳 1970-1-1 0:0:0)是一整数
*
* 用整数保存时间 time();
*
* int
*
* 四、数据字段属性
* 1. unsigned 可以让空间增加一倍 -128-127 0-255
*
* 只能用在数值型字段
*
* 2. zerofill
*
* 只能用在数值型字段, 前导0
*
* 该字段自动应用UNSIGNED
*
* 3. AUTO_INCREMENT
* 只能是整数, 数据每增加一条就会自动增1, 字段的值是不充许重复
*
* NULL 0 留空
*
* 每个表都最好有一个ID字段,设置为自动增涨, auto_increment
*
* 4. NULL 和 NOT NULL
*
* 默认是空
*
* NULL 值
*
* 将来将这个表的数据转为PHP程序的数据时, 整数列有NULL 转成0吗 字符串NULL PHP '' 0.00
*
* 建议: 在创建表时每个字段都不要插入NULL
*
*
* not null
*
* 5 default
*
CREATE TABLE users(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
height DOUBLE(10,2) NOT NULL DEFAULT 0.00,
age INT NOT NULL DEFAULT 0,
sex CHAR(4) NOT NULL DEFAULT '男'
);
*
*
*
*
*
*
* 五、创建索引
*
* 1. 主键索引
* 主要作用是确定数据库表里一条特定数据记录的位置
*
* 最好为每一张数据表定义一个主键
*
* 一个表只能指定一个主键
*
* 主键的值不能为空
*
*
* 2. 唯一索引
* 都可以防止创建重复的值
*
* 每个一表都可以有多个唯一索引
*
* unique
*
*
*
* 3. 常规索引
*
* 最重要的技术
*
* 提升数据库的性能
*
* 11111111111
* 22222222222
* 3333333333333
* 44444444444444
* 55555555555
* .。。。
* 101010100101011
*
* 索引顺序 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),
* primay key(id));
*
* select * from books where bookname like '%php%';
*
* select bookname, price from books where MATCH(detail) AGAINST('php');
*
* select match(detail) against('php') from books;
*
*
*
*
* );
*
* 六、数据表类型及存储位置
*
* MySQL和大多数数据库不同, MySQL有一个存储引擎概念。
*
* MySQL可以针对不同的存储引擎需求可以选择最优的存储引擎
*
* 引擎 数据表类型
*
* 我们只学12中的MyISAM 和 InnoDB两个
*
* create table () type InnoDB;
* create table () engine InnoDB;
*
* MyISAM 表类型是默认的
*
* 选择MyISAM还是选择InnoDB
*
* 注意: 在一个MySQL库中可以(创建表时)指定不同表类型
*
* MyISAM 表类型
*
* OPTIMIZE TABLE 表名
*
* 强调快速读取操作
*
* 也有缺点:有一些功能不支持
*
* InnoDB 表类型
*
* 支一些MyISAM所不支技功能
*
* 也有缺点:占用空间大
*
* 功能 MyISAM InnoDB
*
* 事务处理 不支持 支持
* 数据行锁定 不支持 支持
* 外键约束 不支持 支持
* 表空间占用 相对小 相对大 最大2倍
* 全文索引 支持 不支持
*
*
*
*
*
* 七、MySQL默认字符集
* ACSII
* ISO-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服务器, 数据库, 数据表, 字段
*
*
* 数据库中的UTF-8 utf8
*
* MySQL的字符集包括
*
*
* 字符集: 是用来定义MySQL存储字符串的方式 36
*
* 校对规则:是对规则是定义了比较字符串的方式 70
*
* 一对多的关系: 1 个字集可以对应多个校对规则
*
*
*
* 客户端与服务器交互时
*
* character_set_client
* character_set_connection
* character_set_results
*
* set names 字符集 同时修改以上三个的值
*
*
*
* 八、修改表
* Alter table
1.创建数据库
2.显示数据库
3.使用数据库
4.查看状态
5.创建表
6.显示表
7.显示表结构
8.添加数据
9.查看数据