一、创建数据库
create database (数据库库名);
二、选中数据库
use (数据库库名);
三、创建数据表
方法一:
create table (数据表名称)(
(关键字段名称) datatype()+(not)null+(primary key),
......
);
案例:
方法二:
建议复合主键使用
create table (数据表名称)(
(关键字段名称) datatype()+(not)null,
......
primary key ((值1),(值2))
);
四、表中插入数据
insert into (表名) values(值)('','','');
五、表中修改数据
注意:段落后不可以加标点
mysql> update 表名
-> set 字段名=字段值
-> where 主键=值;
六、常用指令
打开数据库(选中当前数据库) use xxxxxx;
查看当前所有的数据库 show databases;
在数据表中查看当前库中的所有表 show tables;
查看数据库中表的创建信息 show create table xxxxx;
查看数据库的创建信息 show create database xxxxx;
查看指定表的结构 desc xxxxxx;
以表的形式查看xxx表中的所有数据 select * from xxxx;
退出客户端 quit;或exit;
附:数据类型使用说明
注意:插入数据时整型与浮点型不需要加引号
char 必须是x位
varchar 最多是x为
int
tinyint 微小整型一位
decimal(m,n) 可以指定精度的浮点型,m为总长度,n为小数位数,小数点要占一位
float
double
text 文本型
datetime 日期时间型
auto_increment 字段值自动增长
primay key() 主键,常用于复合主键的设置
primay key(,) 复合
七、修改表结构
添加列
alter table 表名
add 新列定义;
对列重命名
alter table 表名
change 旧列名 新列名列定义;
注意:只能修改列名
修改列类型(数据类型、空性)
alter table 表名
modify 列定义[first][default 默认值];
注:只能修改列类型
删除列
alter table 表名
drop 列名;
注:只能删除列
重命名该表
alter table 表名
rename 新表名;
添加主键
alter table 表名
add primary key (列名); //括号必须加
添加外键
alter table biaoming
add foreign key (字段)
references 表名(字段);
父表(主表、被参照表)删除或更新行时,子表(从表或参照表)自动删除或更新匹配的行。-------------同步
关键字 cascade: 级联,与on delete或 on update 配合使用。
删除表
drop table 表名;
删除表的内容:
delete from 表名
[where;]
修改表的字段内容在原数据后添加内容
create table student2 as select studentid,name,sex,birth,concat(area,'省或
市') area,nation,classnumber
-> from student;
select studentid,name,sex,birth,concat(area,'省或市'),nation,classnumber
-> from student;
select studentid,name,sex,birth,concat(area,'省或市') area,nation,classnum
ber
-> from student;
修改数据库的编码
ALTER DATABASE 数据库名称 DEFAULT CHARACTER SET 编码方式 COLLATE 编码方式_bin;
例:
ALTER DATABASE itcast DEFAULT CHARACTER SET gbk COLLATE gbk_bin;
国际编码utf8
中文编码gbk
添加索引:
create table 表名(
字段名 数据类型,
index(字段名)
);
唯一索引:
create table 表名(
字段 数据类型
unique index unique_字段(字段)
);
全文索引:
explain说明:
使用EXPLAIN语句进行查看select执行计划:
EXPLAIN SELECT * FROM t1 WHERE id=1;
八、备份与导入
数据库备份
mysqldump -u root -p 数据库名>d:\数据库名.sql
表结构的备份
create table 备份表名 like 表名;
表结构与内容的备份:
create table 备份名 as select * from 表名;
不能复制自增长约束
数据库导入
1.创建数据库
2.选中数据库
3.导入数据库语句
注意:路径为绝对路径,且不能有封号与引号
九、指定自增长字段值的初始值
方法一:
create table 表名(
列定义 auto_increment,
)auto_increment = 100;
方法二:
create table 表名(
列定义 auto_increment,
);
alter table 表名 auto_increment = 100;
delete和truncate在删除后自增列的变化
delete
数据之后自动增长从断点开始truncate
数据之后自动增长从默认起始值开始
十、唯一约束
概念:唯一约束是指该字段的数据不能重复出现,但是可以都为NULL
。
比如不能存在两个相同的身份证号
create table 表名(
列定义 unique #指定唯一约束 //行业规范列名(unique_列名)
);
创建后添加
alter table 表名 add constraint unique_phone unique(字段名);
//行业规范列名(unique_列名)
例如:
删除唯一约束:
alter table 表名·
drop index 列名; //行业规范列名(unique_列名)
补充:
1.在一个表中创建主键,同时也创建了一个primary key索引,实现字段值的唯一性。
2.表中创建唯一约束,会创建一个unique索引
主键约束和唯一约束的区别:
(1) 一个表只能有一个主键,但可以有多个唯一约束
(2)主键的值不能为NULL,唯一约束的字段的值可以为NULL
(3)产生的索引不同
十一、默认约束
MySQL默认约束用来指定某列的默认值,但是当赋值为NULL
时,值依然为NULL
。
建表时添加
create table 表名(
列定义 default 值 -- 指定默认约束 '字符串'
);
建表后增加
alter table 表名 modify 字段名 default 值; '字符串'
为带有默认约束的表插入数据时,不改变默认值时,要跳过默认值。
即:insert into……values……语句中一定要在表名后面加上中添加数据的字段名
例:
- 删除默认约束:
alter table <表名> change column <字段名> <类型> default null; alter table <表名> modify <字段名> <字段名> <类型> default null;
没有添加默认约束时,default约束的值为NULL ;删除默认约束意味着把默认值变为NULL
十二、数据查询
一、select语句
1.指定列
select [distinct] 列名1,列名2......
2.列别名
select 列名 as 别名
3.替换查询结果中的数据
case
when 条件1 then 替换值
when 条件2 then 替换值
......
else 替换值
end as 列标题
4.计算列值
round(列名1*列名2,2)
2 表示保留小数点后两位
5.消除结构集中的重复行
distinct
select distinct 列名1,列名2
二、where子句
where <判定运算>
格式:
select 字段1,字段2.....
from 表名
where
1.比较运算
= < <= > >= <=> <> !=
<=> 相等或都等于空
<>不等于
!=不等于
2.逻辑运算符
AND或&& 逻辑与
OR或|| 逻辑或
NOT或! 逻辑非
XOR 逻辑异或
3.模式匹配
like运算符能够指出一个字符串是否与指定的字符串相匹配
常用符号
“_” 单个字符
"%" 0个或多个字符
格式
select 字段1,字段2.....
from 表名
where 字段 like '%6_'
ESCAPE转义字符用法
使用“escape '#' "来定义"#"为转义字符
select 字段1,字段2
from 表名
where 字段 like '%#_%'escape '#';
这样"_"后面的"_"就失去了它原有的特殊含义
4.空值比较
判断一个表达式的值是否为空值的时候可以使用is null关键字
格式:
select * from 表名
where 字段 is null;
5.in语句
select *
from biaoming
where 字段 in('','','');
三、from语句
一、多表连接
格式一:
from 表1 join 表2
on 表1.字段 = 表2.字段
join 表3
on 表1.字段 = 表3.字段
格式二:
from 表1,表2,表3,
where 表1.字段 = 表2.字段
and 表1.字段 = 表3.字段;
1.全连接
每行都与其他表中的每行交叉
2.内连接
等值连接,显示最少的字段值
3.外连接
左外连接和右外连接
左外连接:left outer join
结果表中除了匹配行外,还包括左表有但右表中不匹配的行,对于这样的行,从右表中选择的列被设置为null。
右外连接:right outer join
结果表中除了匹配行外,还包括右表有但左表中不匹配的行,对于这样的行,从左表中选择的列被设置为null。
4.指定某一字段进行连接
使用and
join score sc
on sc.s_id=st.s_id and sc.c_id='01'
5.自连接
select a.字段,b.字段
from 表名 a
join 表名 b
on a.字段 = b.字段;
二、in子查询
格式:
select * from 表名
where in (select 字段 from 表名 where 字段 = '值');
三、自查询
select * from 表名 A
where 字段 = (select * from 表名 B where A.字段=B.字段);
四、分类汇总
聚合函数:
count 求组中的项数,返回int类型的整数
max 求最大值
min 求最小值
sum 返回表达式中所有值的和
avg 求组中值的平均值
count格式:
select count(字段) as '别名'
from 表名;
max、min、sum、avg格式
select max(字段)
from 表名
where 字段 = '值';
group by语句:
通过字段对行进行分组
group by分组的字段一定要在select字段中
想要显示其他字段和分组字段需要搭配聚合函数使用
可以与聚合函数搭配使用
格式:
select 分组字段 from 表名
group by 分组字段;
分类小计:
对group by已经分类汇总的数据在进行小计
格式:
select 字段,字段,sum(字段) as '别名'
from 表名
group by 字段,字段
with rollup;
having语句
目的与where语句一致,但having只能用在group by语句后面
格式:
select 字段,字段,sum(字段)
from 表名
group by 字段,字段
having sum(字段)>=值;
五、排序
order by 语句
排序desc asc
可以出现聚合函数
格式:
select * from 表名
order by 字段 desc|asc;
多种字段条件可以按逗号隔开
limit语句
限制返回的行数与偏移量
格式:
select * from 表名
where 字段 > 值
limit 5;
从第4行开始的六条数据
[3,6]
十三、常用函数
1.yarn函数返回包含有年份的部分
select year(2008-11-17);
2.now获取当前的时间
select now();
3.curtime和curdate获取的是当前的时间和日期