首先需要说明:数据库到底是怎么存储数据库的! (现在的数据库基本都是关系数据库)
数据库是以二维表的形式存储数据的(有点像Excel 的样子)
表中每一列必须有一个列名,数据类型和约束,每一行数据都表示一个数据实体。每个数据库可以有多张表。
可以提供多个给多个用户使用,多个数据库都存储在一个数据库服务器(程序)中
SQL :(结构化查询语句 (Structured Query Language) ,用于操作数据库以及数据库中的表 )主要分为:
1.DDL(Data Definition Language):数据定义语言 主要有:(CREATE ALTER DROP
)
2.DML(Data Manipulation Language ):数据操纵语言 主要有:(插入:INSERT2) 更新:UPDATE3) 删除:DELETE)
3.DQL(Data Query Language): 数据查询语言 SELECT<字段名表> FROM <表或视图名 > WHERE<查询条件>
4.TCL(Transaction Control Language): 事务控制语言
文件后缀名的说明:
Mysql安装后在data文件夹中有4种文件frm,MYD,MYI,OPT,请问这四种文件的作用
*.frm是描述了表的结构,*.MYD保存了表的数据记录,*.MYI则是表的索引
数据类型:
1.整数类型
tinyint :无符号(0-255) 有符号(-128 到127) 1字节
smallint : 2字节
mediumint : 3字节
int : 4字节
bigint : 8字节
2.浮点型
float : 4字节
double : 8字节
1. 定点数
decimal(数据类型,小数长度)
4.日期时间类型
Year : 00-99 之间的数: 00-69 的年表示2000-2069 70-99 表示1970-1999
需要区分字符的‘00’和0 ‘0’表示2000年 0 表示的值为0000
date:可以存储yyyy-mm-dd 或者 yyyymmdd 的字符串或存储yy-mm-dd和YYMMDD 的字符串值,还可以使用YY-MM-DD 和YYMMDD的数字格式
‘2017-2-14’或‘20170214’
‘17-2-14’或‘170214’
17-2-14 或 170214
使用now()或current_date 表示当前系统时间
time :可以存储‘D HH-MM-SS’, D 表示日,0-34之间的值,表示的小时数为 D*24
eg:‘2 12:32:25’表示的‘60:32:25‘ ;
可以使用HHMMSS的字符串或数字表示,‘144025’和144025 都表示14:40:25
datetime : 日期时间 eg:‘2017-02-14 14:44:30‘ 或20170214144430
或 ‘17-02-14 14:44:30‘或170214144430 或‘0170214144430’
timestamp :和datetime不同的地方是,使用 current_ timestamp可以输入当前日期和时间,输入null时系统会输入mysql日期和时间,输入任何数据时,系统会输入当前mysql系统日期和时间
字符串类型:
text :存储大文本,有4中可选
tinytext:存储0-255个字节
mediumtext :
longtext
char:存储固定
定义语法: char(长度)和varchar(长度)
char(10) varchar(10)
‘abc’ ,在char 中存储10个字节 ,在varchar中存储3个字节
varchar:存储可变
enum:只能输入枚举中的数据类型
表的约束:避免输入错误数据
按照功能划分:
- NOT NULL(非空约束)
- PRIMARY KEY(主键约束) : 数据库中每一张表只能有一个主键约束 ,主键列默认是 非空 唯一 的
- UNIQUE KEY(唯一约束)
- DEFAULT(默认约束)
- FOREIGN KEY (外键约束)
主键约束只能有一个,唯一约束可以有多个, 主键约束必须是非空的, 唯一约束 可以是非空的。
列级约束即可在列定义时声明,也可以在列定义后声明,表级约束只能在列定义后声明。
外键约束的条件
1. 父表(子表参照的表)和子表(具有外键列的表)必须使用相同的存储引擎,而且禁止使用临时表。
2. 数据表的存储引擎只能为InnoDB。
3. 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号必须相同;而字符的长度可以不同。
4. 外键列和参照列必须创建索引。如果外键列不存在索引的话,MYSQL将自动创建索引。
索引:提高数据的查询和排序效率
unique:唯一索引,要求索引列的值必须是唯一的
fulltext:全文索引,只能创建在使用char , varchar , text的列上
spatial:空间索引,只能在非空的和使用空间数据类型的列上
index | key :都一样,二选一
使用create index 给已经存在的表上添加索引
create [unique|fulltext|spatial]index|key[别名] on 表名 (列名[asc|desc])
删除索引:
Alter table 表名 drop index 索引名
或 drop index 索引名 on 表名
注意:索引会消耗磁盘空间,需要及时删除不使用的索引