一,创建表的完整语法:
#语法: create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #注意: 1. 在同一张表中,字段名不能相同 2. 宽度和约束条件可选,字段名和类型是必须的 3. 最后一个字段后不能加逗号! # 补充: # 1.宽度指的是对存储数据的限制 create table userinfo(name char); insert into userinfo values('jason'); """ 1.没有安全模式的数据库版本,能够存放数据但是只会存进去一个j 2.最新数据库版本直接报错提示无法存储:Data too long for column 'name' at row 1 """ # 2.约束条件初识>>> null 与 nut null create table t1(id int,name char not null); insert into t1 values(1,'j'); # 正常存储 insert into t1 values(2,null); # 报错 # 总结 类型与约束条件区别 # 类型:限制字段必须以什么样的数据类型存储 # 约束条件:约束条件是在类型之外添加一种额外的限制
二,基本数据类型
1,整型
create table t1(x tinyint); insert into t1 values(128),(-129); #在严格模式下会报错。因为超过范围 create table t2(x tinyint unsigned); #unsigned 取消符号 insert into t2 values(-1),(256); #在严格模式下会报错,超过范围 create table t3(x int unsigned); #在严格模式下会报错,超过范围 insert into t3 values(4294967296);
严格模式介绍以及设置:
show variables like "%mode%"; # 查看数据库配置中变量名包含mode的配置参数 # 修改安全模式 set session # 只在当前操作界面有效 set global # 全局有效 set global sql_mode ='STRICT_TRANS_TABLES' # 修改完之后退出当前客户端重新登陆即可
2,浮点型
# 存储限制 float(255,30) # 精确度最小 double(255,30) #精确度中 decimal(255,30) #精确度最大 # 精确度验证 create table t9(x float(255,30)); create table t10(x double(255,30)); create table t11(x decimal(65,30)); insert into t9 values(1.111111111111111111111111111111); insert into t10 values(1.111111111111111111111111111111); insert into t11 values(1.111111111111111111111111111111);
3,字符类型
char , varchar
create table t10(name char(4)) # 超出四个字符报错,不够四个字符空格补全 create table t11(name varchar(4)) # 超出四个字符报错,不够四个有几个就存几个 # 验证存储限制 insert into t12 values('hello'); insert into t13 values('hello'); # 验证存储长度 insert into t12 values('a'); #'a ' insert into t13 values('a'); #'a' select * from t12 select * from t13 # 无法查看真正的结果 select char_length(name) from t12 select char_length(name) from t13 # 仍然无法查看到真正的结果 """首先应该肯定的是在硬盘上存的绝对是真正的数据,但显示的时候mysql会自动将末尾的空格取掉""" # 如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式 set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH"; # 退出客户端重新登陆 select char_length(x) from t12; #4 select char_length(y) from t13; #1 # 针对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
4,时间类型
date , time ,datetime ,year
create table student( id int, name char(16), born_year year, birth date, study_time time, reg_time datetime ); insert into student values(1,'egon','2019','2019-05-09','11:11:00','2019-11-11 11:11:11');
5,枚举与集合类型
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') # 集合也可以只存一个
三,约束条件
""" PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT 为该字段设置默认值 UNSIGNED 无符号 ZEROFILL 使用0填充 """
补充:
delete from tb1; 强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0, 所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录 delete from tb1 where id > 10; 如果要清空表,使用truncate tb1; 作用:将整张表重置,id重新从0开始记录