上住房和城乡建设部网站,wordpress滑块教程,淮阳城乡建设局网站,重庆沙坪坝做网站表操作 1.数据类型 建表的时候#xff0c;字段都有对应的数据类型 # 整型
# 浮点型
# 字符类型(char与varchar)
# 日期类型
# 枚举与集合 2.约束条件 # primary key
# unique key
# not null 创建表的完整语法#xff1a; create table 表名(
字段名1 类型[(宽度) 约束条件],… 表操作 1.数据类型 建表的时候字段都有对应的数据类型 # 整型
# 浮点型
# 字符类型(char与varchar)
# 日期类型
# 枚举与集合 2.约束条件 # primary key
# unique key
# not null 创建表的完整语法 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 12.约束条件初识 null 与 nut null create table t1(id int,name char not null);
insert into t1 values(1,j); # 正常存储
insert into t1 values(2,null); # 报错# 总结 类型与约束条件区别
# 类型限制字段必须以什么样的数据类型存储
# 约束条件约束条件是在类型之外添加一种额外的限制 二 基本数据类型 2.1 整型 # 分类TINYINT SMALLINT MEDIUMINT INT BIGINT# 作用存储年龄等级id各种号码等类型存储范围参考图片http://www.cnblogs.com/linhaifeng/articles/7233411.html验证整型字段有无符号及范围 用法 create table t1(x tinyint);
insert into t1 values(128),(-129);create table t2(x tinyint unsigned);
insert into t2 values(-1),(256);create table t3(x int unsigned);
insert into t3 values(4294967296); 疑问:**类型后面的宽度能否改变字段存储的大小限制 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)); 强调**对于整型来说数据类型后的宽度并不是存储限制而是显示限制所以在创建表时如果字段采用的是整型类型完全无需指定显示宽度 默认的显示宽度足够显示完整当初存放的数据 严格模式补充 我们刚刚在上面设置了char,tinyint,存储数据时超过它们的最大存储长度发现数据也能正常存储进去只是mysql帮我们自动截取了最大长度。但在实际情况下我们应该尽量减少数据库的操作缓解数据库的压力让它仅仅只管理数据即可这样的情况下就需要设置安全模式show variables like %mode%; # 查看数据库配置中变量名包含mode的配置参数
# 修改安全模式
set session # 只在当前操作界面有效
set global # 全局有效set global sql_mode STRICT_TRANS_TABLES
# 修改完之后退出当前客户端重新登陆即可 2.2 浮点型 * 分类:FLOAT DOUBLE decimal
* 应用场景:身高体重薪资字段限制特点(5,3)前一位表示所有的位数后一位表示小数个数三者最大整数位和小数位对比:# 存储限制
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); 2.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_modestrict_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 txxname varchar(5)
# 缺点存取速度慢
# 优点节省空间
1bytesegon 1bytesalex 1byteslxx 1bytesjxx 1bytestxx 2.4 时间类型 分类* date2019-05-01
* time11:11:11
* Datetime: 2019-01-02 11:11:11
* Year:2019测试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); 2.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填充 3.1 not nulldefault create table user(
id int,
name char(16)
);
insert into user values(1,null) # 可以修改alter table user modify name char(16) not null;
insert into user(name,id) values(null,2); # 报错 插入数据可以在表名后面指定插入数据对应的字段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) # 成功 3.2 unique # 单列唯一
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); 3.3 primary keyauto_increment # 单从约束角度来说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
)engineinnodb;
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开始记录 转载于:https://www.cnblogs.com/Ryan-Yuan/p/11377127.html