数据库
1. 使用管理员用户:
启动数据库服务器的命令:net start mysql
关闭数据库服务器的命令:net stop mysql
登录mysql数据库的命令:mysql -u用户名 -p密码 mysql -uroot -proot
创建数据库:使用关键字 create(新建,创建) database(数据库)
格式:
create database 数据库名称; 建议使用 使用的编码默认为utf8
create database 数据库名称 character set 字符集; 创建指定字符编码的数据库 不建议
2. 删除指定的数据库:使用关键字drop(删除)
格式:
drop database 数据名称;
3. 查看正在使用的数据库
格式:
select database();
4. 使用(切换)数据某个数据库
格式:
use 数据库名称;
5. 创建数据表:使用关键字 create(创建) table(表格)
格式:
create table 表名(
字段1 数据类型[长度] [约束],
字段2 数据类型[长度] [约束],
..
字段n 数据类型[长度] [约束](注意,此处不能写逗号)
);
字段:数据表中的列
[]:[]中的内容是可以省略
约束:
主键约束:primary key 约束主键列不能为空,不能重复
非空约束:not null 约束列中的数据不能为空
唯一约束:unique 约束列中的数据不能重复
6. 查看数据库中的所有表
格式:
show tables;
7. 查看表结构
格式:
desc 表名;
8. 删除表:
格式:
drop table 表名;
9. 修改表结构:使用关键字alter(改变)
增加列:使用关键字add
格式:
alter table 表名 add 列名(字段名) 数据类型[长度] 约束;
修改表结构:
修改列的数据类型,和列的长度,列的约束:使用关键字modify(修改)
格式:
alter table 表名 modify 列名(字段名) 数据类型[长度] 约束;
注意:
类型varchar-->int,double,可能会报错 "abc"-->int
修改表结构:
修改列名,列的数据类型,和列的长度,列的约束:使用关键字change(改变)
格式:
alter table 表名 change 旧列名 新列名 数据类型[长度] 约束;
修改表结构:
删除列:使用关键字drop
格式:
alter table 表名 drop 列名;
注意:
被删除的列中如果有数据,也会被一起删除(有风险)
修改表名:
rename table 旧表名 to 新表名;
修改表的字符集:了解,不建议,表中如果有数据,可能会产生乱码
格式:
alter table 表名 character set 字符集;
10. 表中添加数据:使用关键字 insert(插入) into values(值)
格式一:往表中添加一行数据
insert into 表名(字段1,字段2,...字段n) values(值1,值2,...值n);
注意:
字段和值一定要一一对应(个数,数据类型)
值的书写:除了数值类型(整数,小数),其它的值在使用的使用必须使用引号包裹取来
可以使用单引号,也可以使用双引号;建议使用单引号
字段可以选择性书写(写几个都可以,但是主键和非空字段必须写出来)
格式二:往表中添加一行数据,主键如果是自增,可以省略主键字段
insert into 表名(非主键字段) values(对应的值);
格式三:可以省略所有的字段,但是值必须全部给出(主键不能省略)
insert into 表名 values(全部字段的值,包含主键);
格式四:批量插入数据
选择对应的字段书写:
insert into 表名(任意的字段) values(对应的值),(对应的值),...(对应的值);
省略全部的字段书写:
insert into 表名 values(全部字段的值),(全部字段的值),..(全部字段的值);
11. 修改表中的数据:使用关键字update
格式一:修改某几列的所有数据
update 表名 set 字段1=字段值,字段2=字段值...;
格式二:修改某几列中符合条件的数据
update 表名 set 字段1=字段值,字段2=字段值... where 条件限定;
12. 删除表中的数据:使用关键字delete(删除) from(来自于那张表)
格式一:删除符合条件的数据
delete from 表名 where 条件限定;
格式二:删除表中的所有数据,逐一删除表中的多行数据,不会重写设置主键自增,
如果要在添加数据,那么会继续之前的主键
delete from 表名;
格式三:删除表中的所有数据,会清空表中的所有数据,也会设置设置主键自增,
如果要在添加数据,那么主键默认从1开始
truncate table 表名;
13. 约束:限制某一列的数据(不能为null,不能重复)
和java中的集合的泛型一样
ArrayList<String>:集合中只能存储字符串
1> 主键约束:
设置某一列的数据为主键:限制该列的数据不能为null,不能重复
使用关键字:primary key
注意:
每一个表中都应该有一个主键,且只能有一个主键
主键字段不建议使用业务相关字段
<1> 添加主键格式一:创建表的同时,给某个字段,添加主键修饰
<2> 添加主键约束方式二:创建表时,在constraint约束区域,声明指定字段为主键
格式:字段的最后添加一个constraint约束区域
[constraint 主键名] primary key(主键字段)
<3> 添加主键约束格式三:在创建表之后使用,使用修改表结构,添加主键约束
格式:
alter table 表名 add [constraint 主键名] primary key(主键字段);
删除主键约束:使用修改表结构
格式:
alter table 表名 drop primary key;
2> 非空约束:限制某一列的数据不能为null
使用关键字:not null
格式一:在创建表的同时,给指定的字段添加非空约束
格式二:在创建表之后,使用修改表结构,给某个字段添加非空约束
alter table 表名 modify 字段 数据类型 not null;
删除非空约束:使用修改表结构,删除某个字段的非空约束
alter table 表名 modify 字段 数据类型;
3> 唯一约束:约束某一列的数据不能重复
使用关键字:unique
注意:
如果数据的值是null,那么唯一约束是不起作用的
格式一:在创建表的同时,给指定的字段添加唯一约束
格式二:在创建表所有字段之后,使用constraint区域添加唯一约束
[constraint 唯一约束名字] unique(添加唯一约束的字段)
格式三:在创建表之后,使用修改表结构,添加唯一约束
alter table 表名 add [constraint 唯一约束名字] unique(添加唯一约束的字段);
alter table 表名 modify 字段 数据类型 unique;
删除唯一约束:
ALTER TABLE 表名 DROP INDEX 字段/唯一约束名字;
4> 默认约束:给某列的数据添加一个默认值
使用关键字:default(默认)
添加数据的时候,如果不给默认字段添加值,那么该字段的值就是默认值
添加数据的时候,如果给默认字段添加值,就那么就使用新添加的值
格式一:在创建表的同时,给指定的字段,添加一个默认值
格式二:在创建表之后,使用修改表结构,添加默认约束
alter table 表名 modify 字段 数据类型 default '默认值';
删除默认约束:使用修改表结构,删除默认约束
alter table 表名 modify 字段 数据类型;
14. 简单查询语句:使用关键字 select(查询) from(来自于)
格式一:查询指定的字段
select 字段名1,字段名2... from 表名;
格式二:查询所有的字段
select * from 表名;
select 列出所有字段 from 表名;
格式三:过滤重复的数据
select distinct 字段 from 表名;
注意:
distinct后边只能过滤一个字段
格式四:可以使用as关键字给表或者字段起别名
给表起别名:多表查询时使用
select 字段|* from 表名 [as] 别名;
给查询之后的字段起别名
select 字段 [as] 别名,.... from 表名;
注意:
1> 起别名只是对查询的结果临时给字段或者表起名字,不会把表原有的名字改变
2> 起的别名,如果中间包含了空格或者特殊符号,必须使用引号包裹起来
15. 条件查询语句:使用关键字where(在哪)
格式:
select 字段|* from 表名 where 条件限定
常用的运算符:
比较运算符:>,<,>=,<=,=,<>(!=)
逻辑运算符:
与: and &&
或: or ||
非: not !
表示区间的:
between...and 相当于 >= && <=
表示查询多个数据:
in(数据1,数据2,数据3...); 相当于 or
查询空值: is null
模糊查询:使用关键字like
%:多个任意字符
_:一个任意字符
使用between...and改造
好处:
between...and:可以对时间的区间进行查询
数据值小的一定要写在前边
16. 排序查询语句:使用关键字 order by [asc] [desc],要放在select语句的最后
格式:
select 字段|* from 表名 [where 条件] order by 被排序的字段 [asc] [desc];
asc:升序(不写默认是升序)
desc:降序
17. 聚合函数查询:对某一列数据进行查询,结果返回一个单一的值,会忽略null值
包含:
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
使用格式:聚合函数要写在select后边from的前边
select count(字段|*),sum(字段),max(字段),min(字段),avg(字段) from 表名;
18. 分组查询语句:使用关键字 group by[having 条件过滤]
格式:
select 被分组的字段,... from 表名 group by 被分组的字段 [having 条件过滤];
注意:
被分组的字段,一般都写在select后边,方便查看结果
执行流程:
先条件过滤 where
先分组 group by
在查询 select 字段
having 再次对查询的结果进行条件过滤
where:分组之前对条件进行过滤
having:分组之后,再次对条件进行过滤
可以使用聚合函数
19. 分页查询:使用关键字 limit
格式:
limit m n
m:可以变化的,每页数据的开始行数
n:固定不变的,每页显示行的个数
数据库中:
行的开始索引是0,第0行,第1行....
列的开始索引的1,第1列....
20. 1对多的关系:从表使用主表的主键作为外键字段
添加主表分类表和从表商品表之间的主外键关系:
使用修改表结构(创建从表的时候直接添加)
alter table 从表名 add [constraint 外键名称] foreign key(从表中的外键字段) references 主表(主键);
foreign key:外键
references:引用
外键的作用:保证数据的准确性和完整性
1> 主表中有的数据,从表可以有,可以没有
2> 主表中没有的数据,从表也不能出现
3> 删除主表的数据,必须保证从表没有使用
--语句删除外键
alter table 从表 drop foreign key 外键名称;
21. 多表查询:一次查询2张以上的表
1> 交叉连接查询:很少使用有错误数据
格式:
select 字段|* from 表A,表B;
2> 内连接查询:使用外键约束作为查询条件
a.隐式内连接查询:不使用关键字[inner] join on
格式:
select 字段|* from 表A,表B where 表A.主键=表B.外键;
b.显示内连接查询:使用关键字[inner] join on
格式:
select 字段|* from 表A [inner] join 表B on 表A.主键=表B.外键;
3> 外连接查询:使用外键约束作为查询条件
a.左外连接查询:使用关键字 left [outer] join on;以左边的表为主,左边有的数据,右边没有使用null代替
格式:
select 字段|* from 表A left [outer] join 表B on 表A.主键=表B.外键;
b.右外连接查询:使用关键字 right [outer] join on;以右边的表为主,右边没有的数据,左边也不能出现
格式:
select 字段|* from 表A right [outer] join 表B on 表A.主键=表B.外键;
4> 子查询:sql语句的嵌套
a.一条sql语句使用另外一条sql语句的查询结果作为查询的条件
格式:
select * from 表B where 字段 = (select 字段 from 表A [where 条件]);
b.一条sql语句使用另外一条sql语句的查询结果,作为一张表使用(多表查询,内连接查询)
select * from 表B,(select * from 表A [where 条件])表A where 表A.主键=表B.外键;
22. 省份和城市的1对多关系
主表:省份provice
从表:城市city
主外键关系:city中的外键字段,使用provice的主键作为外键约束
好处:保证数据的准确性和完整性
主表有的数据,从表可以有,可以没有
主表没有的数据,从表也不能有
删除主表的数据,必须保证从表没有使用
23. 自关联1对多的关系:本表外键使用本表的主键作为外键
24. 用户和角色的多对多关系
建表元素:创建一张中间表,使用两个主表的主键作为外键
主表:用户表user,角色表role
中间表:user_role
角色和权限的多对多关系
主表:角色表role,权限表:privilege
中间表:role_privilege
25. 多表查询:一次查询2张以上的表
1> 交叉连接查询:很少使用有错误数据
格式:
select 字段|* from 表A,表B;
2> 内连接查询:使用外键约束作为查询条件
a.隐式内连接查询:不使用关键字[inner] join on
格式:
select 字段|* from 表A,表B where 表A.主键=表B.外键;
b.显示内连接查询:使用关键字[inner] join on
格式:
select 字段|* from 表A [inner] join 表B on 表A.主键=表B.外键;
3> 外连接查询:使用外键约束作为查询条件
a.左外连接查询:使用关键字 left [outer] join on;以左边的表为主,左边有的数据,右边没有使用null代替
格式:
select 字段|* from 表A left [outer] join 表B on 表A.主键=表B.外键;
b.右外连接查询:使用关键字 right [outer] join on;以右边的表为主,右边没有的数据,左边也不能出现
格式:
select 字段|* from 表A right [outer] join 表B on 表A.主键=表B.外键;
4> 子查询:sql语句的嵌套
a.一条sql语句使用另外一条sql语句的查询结果作为查询的条件
格式:
select * from 表B where 字段 = (select 字段 from 表A [where 条件]);
b.一条sql语句使用另外一条sql语句的查询结果,作为一张表使用(多表查询,内连接查询)
select * from 表B,(select * from 表A [where 条件])表A where 表A.主键=表B.外键;