数据库的配置
1) 在mysql安装目录下,创建配置文件:my.ini
2) 设置配置文件内容并保存
[mysqld] # 服务器的配置
port=3306
character-set-server=utf8
collation-server=utf8_general_ci
[client] # 客户端的配置
default-character-set=utf8
3) 重启数据库服务
数据库表的引擎
引擎:驱动数据的方式 ---> 数据库的优化
前提:引擎是建表规定的,提供给表使用的,不是给数据库的
# 展示所有引擎
mysql> show engines;
# innodb(默认):支持事务,行级锁,外键
mysql> create table t1(id int) engine=innodb;
# myisam:查询效率要优于innodb,当不需要支持事务,行级锁,外键,可以通过设置myisam来优化数据库
mysql> create table t2(id int) engine=myisam;
# blackhole:黑洞,存进去的数据都会消失(可以理解为不存数据)
mysql> create table t3(id int) engine=blackhole;
# memory:表结构是存储在硬盘上的,但是表数据全部存储在内存中
mysql> create table t4(id int) engine=memory;
数据库的模式
# mysql 5.7版本往后默认都是安全模式
# mysql 5.6版本
sql_mode=no_engine_substiution # 非安全性,默认
sql_mode=strict_trans_tables # 安全性
# 查看当前数据库模式:
show variables like "%sql_mode%s"; # %匹配0~n个任意字符 ---> 模糊查询
# root用户登录状态下,设置为临时安全模式,设置后,quit断开数据库连接,重新连接后进入安全模式,服务重启后会重置
mysql> set global sql_mode="strict_trans_tables";
# 安全模式下,非安全模式下sql执行的警告语句,都会抛异常
mysql支持的数据类型
整型
'''
类型
tinyint: 1字节,取值范围 -128~127
smallint: 2字节,取值范围 -32768~32767
mediumint: 3字节
int: 4字节,取值范围 -2147483648~2147483647
bigint: 8字节
'''
'''
约束
unsigned: 无符号
zerofill: 0填充
'''
浮点型
'''
类型
float(M, D): 4字节,3.4E-38~3.4E+38
double(M, D): 8字节,1.7E-308~1.7E+308
decimal(M, D): 所在字节M,D大值基础上+2,其实就是M值+2就是decimal字段所占字节字数
'''
'''
宽度
(M, D) ==> M为位数,D为小数位,M要大于等于D
float(255, 30): 精度最低,最常用
double(255, 30): 精度高,占位多
decimal(255, 30): 字符串存,全精度
'''
字符串
数据库优化:char效率要高于varchar
'''
类型
char: 定长,永远采用设置的长度存储数据
varchar: 不定长,在设置的长度范围内,变长的存储数据
'''
'''
宽度
char(4): 存"a" "ab" "abc" "abcd" 都采用4个长度,"abcde"只能存储前4位
varchar(4): 存"a" "ab" "abc" "abcd" 分别采用1,2,3,4个长度,"abcde"只能存储前4位
char按定长存储,如果数据长度变化大,会占更多空间,但是存取数据按固定定长存取,效率高
varchar存储数据时,会先计算要存储数据的长度,动态的变长存储数据,一般会省空间,但是因为要计算数据的长度,效率会低
'''
时间
'''
类型
year: yyyy(1901~2155)
data: yyyy-MM-dd(1000-01-01~9999-12-31)
time: HH:mm:ss
datetime: yyyy-MM-dd HH:mm:ss(1000-01-01 00:00:00~9999-12-31 23:59:59)
timestamp: yyyy-MM-dd HH:mm:ss(1970-01-01 00:00:00~2038-01-19 11:14:07)
'''
枚举和集合
'''
枚举和集合:为某一个字段提供选项
枚举:只能单选(1个)
集合:可以多选(0~n个)
'''
约束
'''
primary key:主键,唯一标识,表都会拥有,不设置为默认找第一个 不空,唯一字段,未标识则创建隐藏字段
foreign key:外键
unique:唯一性数据,该条字段的值需要保证唯一,不能重复
auto_increment:自增,只能加给key的int类型字段,作为辅助修饰,一个表中只能设置一个自增字段
not null:不为空,不能设置为null,必须要对其赋值
default:默认值,对有默认值以外的字段赋值时,有默认值的字段会被赋默认值
unsigned:无符号,存储的数字从0开始
zerofill:0填充,存整数时,数据长度小于取值范围长度,会在数字左方用0填充
'''