mysql对字母大小写不敏感
MySQL内部针对数据的存储有不同的方式 数据库的存储方式就是存储引擎
show engines;
innoDB MySQL5.5之后的版本默认的存储引擎 特点: 支持事务、行锁、外键 安全性高 ''' 事务:用于保证多个数据的操作能全部完成或失败 行锁:在每行的同一时间,只能有一个人操作 外键:建立表与表之间的关系 ''' myisam MySQL5.5之前版本默认的存储引擎 特点: 不支持事务、外键等功能 安全性比innoDB低 存取速度比innoDB快 memory: 数据直接存储在内存 特点: 速度快 断电立刻丢失 blackhole: 性能如其名,写入的数据会丢失
语法: create table 表名(id int,内容 类型)engine=innoDB;
innoDB: .frm 表结构 .idb 表数据、索引(类似于目录) myisam: .frm 表结构 .myd 表数据 .myi 表索引 memory: .frm 表结构 blackhole: .frm 表结构
innorDB: insert into r1 values(1);
myisam: insert into r2 values(1);
blackhole: insert into r4 values(1);
memory: insert into r3 values(1);
但是重启之后
语法: create table 表名( 字段名 数据类型(宽度)约束条件, 字段名 数据类型(宽度)约束条件 ); ''' 1.字段名和数据类型是必须的,宽度和约束条件可选 2.约束条件可选,且一个字段可以有多个约束条件 3.最后结尾字段语句不能有逗号 '''
tinyint smallint int bigint '''不同整形存储的数字范围不同'''
验证整型是否自带正负号
# 其他数据类型也默认自带正负号
float double decimal '''不同的浮点型小数范围不同和精度不一样''' float(255,30) # 占255位,小数占30位 double(255,30) # 占255位,小数占30位 decimal(65,30) # 占65位,小数占30位 create table r6(id float(255,30)); create table r7(id double(255,30)); create table r8(id decimal(65,30)); insert into r8 values(1.11111111111111111); insert into r7 values(1.11111111111111111); insert into r6 values(1.11111111111111111);
# 精确度:float< double < decimal
char varchar char(x): 最多可以存储x个字符,在严格模式下,操过了报错,没有超过时默认空格填充空余 varchar(x): 最多可以存储x个字符,超过报错,没有超过时不用空格填充空余 eg: create table r9(id int,name char(4)); create table r10(id int ,name varchar(4)); insert into r9 values(1,'jjjjj'); # 改版为5.6,因在5.7版本之前没有开启严格模式,所以没有报错
# char_length() 默认情况下char会自动填充存储并在查询的时候自动去除空格 eg: insert into r9 values(1,'g'); insert into r10 values(1,'g'); # 设置严格模式(需要重启客户端) set gloabl sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
思考 char: 优点:存取速度快 缺点:浪费存储空间 varchar: 优点:节省存储空间 缺点:存取速度慢 # varchar在存储数据时,会空出一字节计算字符长度没所以慢 ''' 结论:两者各有相应的使用场合,要取长补短 '''
# 查看严格模式 show variables like '%mode%';
# 修改严格模式(需要退出客户端重新登录生效) set global sql_mode = 'strict_trans_tables';
date 年以日 time 时分秒 Datatime 年月日时分秒 year 年 # 针对时间的数据一般为自动获取 eg: create table people( id int, name char(16), born year, birth date, study time, reg_time datetime ); insert into student values(1,'jjj','1980','1980-1-12','2:4:0','1980-1-12 2:4:0');
enum 多选一 # 枚举类型 create table en1( id int, name varchar(16), gender enum('male','female','other') ); # 插入数据的时候只能够插入提前规定好的 insert into t13 values(1,'jj','animals'); # 报错
set 多选多(包含多选一) # 集合类型 create table s1( id int, name char(16), hobby set('basketball','football','doublecolorball') ); insert into s1 values(1,'jj','play'); # 报错
insert into s1 values(1,'jj','baseball'),(2,'zz','baseball,football');
int(x) char(x) # 针对数字类型 宽度并不是用来限制存储长度而是用来表示展示长度 ''' 以后在定义数字,不需手动添加宽度 '''
''' 插入数据两种方式: # 按照字段顺序依次传入(一个都不能少) 1.insert into 表名 values() # 按照指定的字段传入(可以少) 2.insert into 表名 values() ''' unsigned #无符号 语法: create table 表名 ( 元素名 数据类型 unsigned ); eg: create table v1(id int unsigned);
zerofilll # 0填充
语法: create table 表名 ( 元素名 数据类型 zerofill );
eg: create table v2(id int(5) zerofill); insert into v2 values(2);
# default 默认值 语法: create table 表名( id int, 元素名 字符类型(16) default '字符内容' ); eg:
create table v3( id int, name varchar(16) default 'kk' );
insert into v3(id) values(2);
not null # 不能为空(使用频率高) 语法: create table 表名( id int, 字符名 字符类型 not null ); eg: create table v4( id int, char varchar(16) not null ); insert into v4 values(1,null); # 报错 insert into v4 values(1,''); # 不报错
# unique 唯一 '''单列唯一''' 语法:
create table 表名( id int, 字符名 字符类型 unique ); eg: create table v5( id int, char varchar(16) unique ); insert into v5 values(1,'kk'); insert into v5 values(2,'kk'); # 报错
'''多列唯一''' create table 表名( id int, 元素1 int, 元素2 int, unique(元素1,元素2) ); eg: create table v6( id int, host int, port int, unique(host,port) ); insert into v6 values(1,2,3); insert into v6 values(2,2,3); # 报错