对数据库的操作:
数据库的创建:
create database [in not exists] db_name [character set utf8] [collate collation_name]
in not exists:使用这句话之后,创建的数据库存在就不再创建,如果没有这句话,创建的数据库存在就报错。
character set utf8:库采用什么码表,最好每次使用
create database testbase character set utf8 collate utf8_general_c1;
查看库的创建信息:show database db_name;
删除创建的数据库:drop database db_name;
修改数据库的字符集编码:
alter database db_name character set utf8;
备份数据库:
mysqldump -u root -p db_name>path_name (此命令属于计算机的命令,不能在sql命令行下执行,必须在系统命令行下执行,并且不能有分号)
恢复数据库:
1、恢复只能恢复数据中的数据,要恢复库,必须先创建数据库。
1)进入数据库:use db_name;
2)执行恢复source back_path_naem (source:执行sql脚本)
2、恢复只能恢复数据中的数据,要恢复库,必须先创建数据库。
1)进入数据库:use db_name;
2)mysql -u root -p db_name<path_name(此命令属于计算机系统命令)
数据类型:
1、数值类型:
bit(5) 保存5个二进制位,不指定位数,默认是1。
tinyint[unsigned][zerofill]:一个字节大小-127--128,跟上后面两个参数的任何一个标识无符号数0--255
bool,boolean:数据库中没有turu,false,数据库中保存的是0或1,和使用bit(1)效果相同
smallint[unsigned][zerofill],表示2的16次方,对应java中的short
int [unsigned][zerofill]:2的32次方
bigint[unsigned][zerofill]:2的64次方
float[m,d] [unsigned][zerofill]:m,数据长度,d,保留的小数位数。
double[m,d] [unsigned][zerofill]:m,数据长度,d,保留的小数位数。
decimal[m,d]:精度最高,可用于货币使用。
2、文本类型:
1)char(size) 定长:最大大小为size,存一个字符,大小也是size。size设置最大为255
2)varchar(size) 变长:最大大小为size,存一个字符,大小为1。size设置最大为65535
3)blob,longblob:存储二进制数据(图片,图像等)2的10次方为1k,2的20次方为1M.实际开发中将大数据以文件形式存储而不直接存储在数据库中。
4)text(oracal中为clob),longtext(longclob)
3、时间日期
date, datetime,timestamp
对表的基本操作:
查看表创建细节:show create table table_name
查看表的结构:desc table_name
修改表:
增加一个字段:alter table table_name add 字段 类型;
修改字段的类型:alter table table_name modify 字段 类型;
修改表中的字段名:altert table table_name change column 原字段名 新字段名 字段类型;
删除字段:alter table table_name drop 字段名;
修改表的字符编码:alter table 表名 character set utf8;
修改表名:rename table old_name to new_name;
删除表:drop table table_name;
创建表
cteate table Student(
id int,
name varchar(20)
);
数据插入:insert into
字符,字符串和如期类数据使用单引号。
插入空值,不指定或使用null
细节:
1、可以将任何数据都使用单引号。
2、插入数据的时候跟上字段名称,便于后期维护。
3、输入中文字符乱码问题:
原因:例如,数据表使用的编码为utf-8,客户端输入的字符为gb2312编码,此时将数据存入到数据表中,查询的是utf-8码表,就会出现乱码问题。
解决办法:
1)显示所有字符集编码变量:show variables 'character%'
2)存储乱码:设置客户端编码为gb2312:set character_set_client=gb2312
3)显示结果乱码:set character_set_results='gb2312'
修改数据:
update table_name set 字段名 = 值,字段名 = 值 where 条件
注意:书写update先书写where条件,以免忘记。
删除数据:
delete from table_name where 条件:删除数据时一条条的进行删除。
truncate table_name:摧毁整个表,重建表结构。
简单查询数据:
一般查询: select 字段名,字段名 from table_name
过滤重复数据:select distinct 字段名,字段名 from table_name
查询中使用别名:select name as 姓名, enScore + chScore + 10 as 总成绩 from tabe_name(不跟as也可以)
结果排序:select * from table_name order by 字段名 asc(升)|desc(降序),默认是升序
比较运算符:
between ...and...:包含前后的值
显示在列表中的值:in(value1, value2),值为value或者value2
模糊查询:like '张pattern' pattern:_代表一个字符,%代表0个或多个字符
is null判断是否为null
合计函数:
count(字段名):计算条目数量,只统计有值的行,NULL不统计
select count(*) from table_name where 条件
sum(字段名 + 字段名 + ...):求和,只适用于数值,非数值报错。
avg(字段名 + 字段名 + ...):求平均数
max(字段名 + 字段名 + ...)/min(字段名 + 字段名 + ...):求一列中的最大值,最小值
分组:group by
select name, sum(price) from goods group by name:相同name的分为一组,对同一组的价格进行求和
having:过滤(where也可以用于过滤,区别在于having可以跟合计函数)
时间日期相关函数
addtime(date1, date2):将data2加到data1
current_date():获取当前日期
current_time():获取当前时间
current_timestamp():获取当前时间戳
date(datetime):获取datatime的日期部分
date_add(date1,date2):data1中加上data2
date_sub(date1, date2):data1中减去data2
datediff(date1,date2):两个时间差
now():获取当前时间
year|month|date(datetime):年月日
字符串相关函数
charset(str):返回字符串字符集
concat(str,str):链接字符串
instr(str1, str2):返回str2在str1中出现的位置,,没有返回0
ucase(str):转换成大写
lcase(str):转换成大写
left(str,len):从str左边起去len个字符
length(str):str长度
replace(str, search, replace):将str中的search替换成replace
strcmp(str1,str2):逐个字符比较两个字符串大小
substring(str, position, len):从str的position开始去len个字符
ltrim(str), rtrim(),trim():去掉两边空格
数学相关函数
abs(num):去绝对值
bin(num):十进制转二进制
ceiling(num):向上取整
conv(num, from_base, to_base):进制转换
floor(num):向下去整
forrmat(num, decimal_places):保留小数位数
hex(num):转十六进制
least(num1, num2, ....):求最小值
mod(num, denominator):求余
rand([seed])
定义表的约束
主键约束:
primary key:不允许重复,不能为空,且唯一
删除主键约束:alter table table_name drop primary key;
联合主键:primary key(tea_id, stu_id)
定义主键自动增长:
auto_increment;
id int primary key auto_increment
如果将其中一条数据删除,此id将不会填充
定义唯一约束:
unique
id int primary key auto_increment;
name varchar(40) unique;
定义唯一约束:
not null
name varchar(40) unique not null;
定义外建约束:
student_id int,(此id来自学生表中的id),
constraint 外建名称 foreign key(student_id) references student(id)
数据表的设计
一对多(多对一):在"多"的一方中创建外建保存"一"的一方的Id。
多对多:创建中间表表示两张表的关系。
一对一:具有主从关系,人-主,身份证-从。主可以没有从,从不能没有主。
在从表中,将从表的主键也设置为外建,并且外建来自于主表的主键。
自关联数据的数据库设计:(家族关系)
在同一张表中创建字段描述关系(创建一个字段保存父类编号即可)。