MySQL数据库 day02
Tip:在Windows命令行中中文输入报错问题:
MySQL数据库需要知道客户端使用什么编码,来进行正确的编码转换。
set names gbk; 告诉服务器,自己是gbk编码。(window客户端是gbk编码,Linux客户端是utf8编码)一、数据类型
unsigned 标记,添加 unsigned 表示无符号。zerofill 标记,例如:int(4) zerofill; 显示数据不足4位会补0,超出4个正常使用。1、数字
a.tinyint 1个字节b.smalint 2个字节c.int 4个字节 int(3) 小括号内的数字,只会影响查询显示格式,而不会影响数字范围d.bigint 8个字节
e.float 4个字节f.double 8个字节 double(6,2) 不会影响范围,只会影响显示g.decimal/numeric 定点浮点数,可以做精确运算,一般表示“钱”
decimal(6,2) 表示整数4位,小数2位,总共6位。 整数超出范围,可能会报错;小数超出范围,会四舍五入 2、字符串a.char(20) 定长字符串 超出长度可能会出错,也可能会截断(要根据数据库设置决定) 如果长度不足,会补空格 最长255 定长的字符串效率更高b.varchar(20) 变长字符串
最大长度是255内,前面需要一个字节来表示长度 最大长度超过255,前面需要两个字节来表示长度 最长65535个字节 一般用 varchar 保存255内的字符串c.text
65535字节; 只占用表总字节量的10个字节d.blob
超大对象数据 要使用流来读写blob字段数据 通常不用blob保存文本3、日期时间a.datetime 年月日时分秒b.date 年月日c.time 时分秒d.timestamp 时间戳,一般不用 年月日时分秒 最大只到2038年 修改一行数据时,第一个timestamp字段会自动更新为系统当前时间 不能取null值,填入null值,会自动填入系统当前时间二、约束:
对一个字段的取值进行限制
1、主键约束 唯一标识一行数据 唯一、不重复 非空,不能取null值 自动生成索引 一般不使用业务数据作为主键,而是使用无意的是数据(1)添加主键 a.在新建表时添加 方法一: create table tb1( id int primary key, ... ); 方法二: create table tb1( id int, ... primary key(id) ); 方法三:双主键(组合主键),必须使用这种格式添加 create table tb1( name... ip... ... primary key(name,ip) ); b.修改表时添加: alter table tb1 add primary key(id);(2)查看主键 a. desc tb1; b. show create table tb1\G;(3)删除主键
a. alter table tb1 drop primary key; 删除后查看: desc tb1; show create table tb1;(4)自增主键:auto_increment a.建表时添加自增主键 id int primary key auto_increment; b.修改时将主键设置为自增(id已经是主键) alter table tb1 modify id int auto_increment; c.取消自增(不会删除主键约束) alter table tb1 modify id int; d.自增主键填入null值,自动填入自增值 f.查看自增值的下一个值: show create table tb2\G; .... auto_increment:xx g.可以手动插入一个指定的值,如果这个值是表中的最大值的,下一个自增值会自动从这个最大值增长。使用自增主键,不用管这个值是否连续。自增主键不能退回。2、外键约束:限制一个字段的取值,只能取另一个主键的值(1)创建外键 a.建表时创建外键 create table tb2( ... x_id ... ... foreign key(x_id) references tb1(id) ); b.修改表时创建外键 alter table tb3 add foreign key(x_id) references tb1(id);(2)查看外键
show create table tb3;(3)删除外键: 首先需要查看外键约束的名字 alter table tb2 drop foreign key 约束名;(4)外键也会自动创建索引,删除外键,不会自动删除外键的索引,如果想删除外键的索引: alter table tb2 drop index 索引名;3、非空约束(1)添加非空约束 a.创建表时添加 creat table tb2( ... name varchar(20) not null, ); b.修改表时添加: alter table tb2 modify name varchar(20) not null;(2)取消非空约束
alter table tb2 modify name varchar(20);alter table tb2
modify name varchar(20) null;4、唯一约束(unique):字段取值不能重复,允许重复的null值 (1)添加唯一约束 a.建表时添加 create table tb2( username varchar(32) unique not null, email varchar(128) unique addr varchar(255), tel varchar(20), unique(addr,tel) ); b.修改表时添加 alter table tb2 modify email varchar(128) unique; alter table tb2 add unique(addr,tel);(2)查看唯一约束 a.方法一: desc tb2 show create table tb2 b.查看系统库中的约束 use information_schema --系统库,库信息 select * from table_constraints where table_name = 'xxx';(3)取消唯一约束 alter table tb2 drop index 索引名;(4)检查约束 通过设置字段取值条件,来限制它的取值比如,性别、年龄范围等 MySQL支持检查约束的语法,但没有实现约束,MySQL不会检查约束条件 create table xuesheng ( gender... age... check(gender='男' or gender='女'), check(age>8 and age<60) );5、默认值(default) age int default 0 在表结构中保存字段的注释信息三、在表结构中保存字段的注释信息(comment) create table tb2( id int comment '主键id', name varchar(20) comment '姓名' ); show create table tb2\G 可以看到注释四、表和表之间的关系1、一对一关系 具有唯一约束的外键 既是主键也是外键的字段2、一对多关系 在多方表中添加外键3、多对多关系
需要一张中间表,添加两个外键字段,分别引用两张表的主键