
create table t4(x int(8)); insert into t4 values(4294967296123); # 显示时,不够8位用0填充,如果超出8位则正常显示 create table t5(x int(8) unsigned zerofill); insert into t5 values(4294967296123); # create table t6(id int(10) unsigned); # create table t7(id int(11));
mysql在存储char类型字段的时候 硬盘上确确实实存的是固定长度的数据但是再取出来的那一瞬间 mysql会自动将填充的空格去除

""" char与varchar的使用区别 """ name char(5) # 缺点:浪费空间 # 优点:存取速度都快 egon alex lxx jxx txx name varchar(5) # 缺点:存取速度慢 # 优点:节省空间 1bytes+egon 1bytes+alex 1bytes+lxx 1bytes+jxx 1bytes+txx

show variables like "%mode%"; # 查看数据库配置中变量名包含mode的配置参数 # 修改安全模式 set session # 只在当前操作界面有效 set global # 全局有效 set global sql_mode ='STRICT_TRANS_TABLES' # 修改完之后退出当前客户端重新登陆即可
-
-
time:11:11:11 时 分 秒
-
Datetime: 2019-01-02 11:11:11
-
Year:2019 年
-
枚举enum 多选一
-
集合set 多选多

create table user(
id int,
name char(16),
gender enum('male','female','others')
);
insert into user values(1,'jason','xxx') # 报错
insert into user values(2,'egon','female') # 正确!
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','sleep','sanna','dbj')
);
insert into teacher values(1,'egon','male','read,sleep,dbj') # 集合也可以只存一个

create table student(
id int,
name char(16) not null,
gender enum('male','female','others') default 'male'
)
insert into student(id,name) values(1,'jason') # 成功

# 单列唯一
create table user1(
id int unique,
name char(16)
);
insert into user1 values(1,'jason'),(1,'egon') # 报错
insert into user1 values(1,'jason'),(2,'egon') # 成功
# 联合唯一
create table server(
id int,
ip char(16),
port int,
unique(ip,port)
)
insert into server values(1,'127.0.0.1',8080);
insert into server values(2,'127.0.0.1',8080); # 报错
insert into server values(1,'127.0.0.1',8081);
单列唯一 限制某一个字段是唯一的联合唯一(在语句的最后 用括号的形式 表示哪几个字段组合的结果是唯一的,单个是可以重复的)

# 单从约束角度来说primary key就等价于not null unique
create table t11(id int primary key);
desc t11;
insert into t11 values(1),(1); # 报错
insert into t11 values(1),(2);
# 除了约束之外,它还是innodb引擎组织数据的依据,提升查询效率
"""
强调:
1.一张表中必须有且只有一个主键,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键
"""
create table t12(
id int,
name char(16),
age int not null unique,
addr char(16) not null unique
)engine=innodb;
desc t12;
"""
2.如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询了
索引:类似于书的目录,没有主键就相当于一页一页翻着查
3.一张表中通常都应该有一个id字段,并且通常将改id字段作成主键
"""
# 联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键
create table t18(
ip char(16),
port int,
primary key(ip,port)
);
desc t18;
# 主键id作为数据的编号,每次最好能自动递增
create table t13(
id int primary key auto_increment,
name char(16)
);
insert into t13('jason'),('jason'),('jason'); # id字段自动从1开始递增
# 注意:auto_increment通常都是加在主键上,并且只能给设置为key的字段加

delete from tb1; 强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0, 所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录 delete from tb1 where id > 10; 如果要清空表,使用truncate tb1; 作用:将整张表重置,id重新从0开始记录


