数据类型和完整性约束
字符串类型
字符串类型
char:列的长度固定为创建表时声明到长度:0-255
varchar:列中的值为可变字符串,长度:0-65535
在检索时,char列删除了尾部空格,而varchar则保留这些空格
binary和varbinary类似于char和varchar,
不同的是他们包含二进制字符,而不包含非二进制字符串
枚举型字符类型:enum:单选,只能在给定的范围选一个值
集合型字符类型:set:多选,在给定的范围选一个或多个以上的值
数值类型
数值类型
整数类型:int
tinyint(有符号型最大值127)
int整型的宽度仅显示为宽度,不是限制,因此建议整形无需指定宽度
整型的宽度仅为显示宽度,不是限制。因此建议整型无须指定宽度。
浮点数类型:float
浮点数和定点数都可以用类型名称后面加(M.D)的方式来表示(M.D)表示一共显示M位数字(总数位+小数位)
其中D位于小数点后面,M和D又称为精度和标度
float经常会出现小数部分数据丢失情况,原因是小数部分十进制转换二进制不能完全匹配,只能就近匹配,所以会造成数据丢失情况,小数位数多的建议使用double和decaimal
float:浮点型,含字节数4,32bit
double:双精度实型,含字节数8,64bit
decimal:数字型,128bit
时间和日期类型
data:年月日
time:时分秒
datatime:年月日 时分秒
year:年份
注意:
插入年份时,尽量使用4位值
插入两位年份时,以69为分界线,<=69,是20开头
> 69,是19开头
完整性约束
约束又称索引。用于保证数据的完整性和一致性
primary key(pk):标识该字段为该表的主键,可以唯一的标识记录,不可以为空
foreign key(fk):表示该字段为该表的外键,实现表与表(父表主键/子表1外键/子表2外键)之间的关联
unique key(uk):标识该字段的值是唯一的,可以为空,一个表中可以有多个uk
auto_increment:标识该字段值自动增长,(整数类型,而且为主键)
default:为该字段设置默认值
not null:标识该字段不能为空值
unsigned:无符号型
zerofill:使用0填充
主键处理可以写在某一列的后面,也可以在独立一行声明
多列做主键称为复合主键
sql语句
增加
创建数据库
create database 数据库名;
create database 数据库名 default charset 'UTF8';
mysql创建用户
grant all on *.* to '用户名'@'%' identified by "密码";
建表
create table 表名(表头 字段类型(字符长度),表头 字段类型);
create table 表名 (表头,表头) values("内容","内容")engine =innodb;
例:create table 表名(name varchar(50),age int);
插入数据
insert into 表名 values ("内容","内容");
insert into 表名 (表头,表头) values("内容","内容");
例:insert into 表名 (name,age) values("xiaonan","21");
给表新增字段
alter table 表名 add 新增字段名 新增字段类型 新增字段约束 插入哪里;
after 某个字段 //在某个字段后插入
first //加入到最开始
不写 //默认加入到最后
修改
修改表名
rename table 原表名 to 新表名;
alter table 原表名 rename to 新表名;
修改字段名称以及约束、字段类型
alter table 表名 change 原字段名 修改后的字段名 字段类型 约束;
修改字段类型以及约束条件
alter table 表名 modify 字段名 字段类型 约束;
修改字段
alter table 表名 change 旧字段 新字段 修饰符;
alter table 表名 modify 字段 属性 修饰符;
查询
查询当前数据库时间
select now();
查询当前登录数据库的用户
select user();
查询当前用户权限
show grants; //查询用户创建语句
查询数据库
show databases;
查询当前所在库
select database();
查询表
show tables;
查询建造过程
show create table 表名; //查询建表过程
show create database 库名; //查询建库过程
查询表内容
select * from 表名;
查询表结构
desc 表名;
删除
删除字段
alter table 表名 drop 字段;
删除数据
delete from 表名 where 主键字段=' ';
delete from 表名; //删除表中所有数据
删除表
drop table 表名;
删除库
drop database 库名;