启动数据库:
  net start mysql;
登陆数据库:
  mysql -uroot -p0511


DDL:数据定义语言
操作对象:数据库和表
关键词:create alter drop

操作数据库:
创建:create database 数据库名称;
删除:drop database 数据库名称;
常用的命令:
查看所有的数据库:show databases;

操作表:
创建表:create table 表名(字段描述,字段描述);
字段描述:字段名称 字段类型 [约束]
例如:
create table user(
  id int primary key auto_increment,
  username varchar(20)
);
修改表:alter table 表名...
修改表名:alter table 旧表名 rename to 新表名;
添加字段:alter table 表名 add [column] 字段描述;
修改字段名:alter table 表名 change 字段名称 新字段描述;
修改字段描述:alter table 表名 modify 字段名称 字段类型 [约束];
删除字段:alter table 表名 drop 字段名称
删除表:drop table 表名;

其他常用命令:
切换或者进入数据库:use 数据库名称;
查看当前数据库下的所有表:show tables;
查看表结构:desc 表名;
查看建表语句:show create table 表名;


DML:数据操作语言
操作对象:记录(行)
关键词:insert update delete
插入:
insert into 表名 values(字段值1,字段值2...);
默认插入全部字段,字段值的类型和顺序必须和表结构中一致
若字段类型为数字可以省略单引号
插入指定的字段:insert into 表名(字段名1,字段名2...) values(字段值1,字段值2...);
必须保证字段值的类型和顺序必须和指定字段列表一致
修改:
update 表名 set 字段名1=字段值1,字段名2=字段值2...[where 条件];
删除:
delete from 表名 [where 条件];


DQL:数据查询语言
操作对象:记录
关键词:select
查询:
select ... from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段 asc|desc;
排序:
asc:升序 desc:降序
聚合函数:
对一列进行计算,返回值是一个值,忽略null值
sum(),avg(),max(),min(),count();
保留小数位:round(值,保留小数位) 例如:round(avg(price),2)
表的记录条数:select count(*) from 表名;
分组:
group by
一般和聚合函数联用,例如:select count(*) from 表名 group by 字段名;
注意:
where 和 having 区别:
where 是对分组前的数据进行过滤
having 是对分组后的数据进行过滤
where 后面不能使用聚合函数 having可以


数据类型:
java        mysql      备注

byte        tinyint
short        smallint
int          int
long        bigint
char/String       varchar|char      varchar可变长度,mysql的方言;char固定长度
boolean         tinyint/int                  没有此类型,使用int类型代替
float/double      float/double              注意:double(5,2)代表长度为5,小数位占2位,999.99

java.sql.Date      date        日期
java.sql.Time           time         时间
java.sql.Timestamp    timestamp    时间戳 若给定值为null,会把当前系统时间存入数据库
           datetime       日期+时间
java.sql.Clob    text       长文本
java.sql.Blob    blob       二进制


约束:
作用:为了保证数据的有效性和完整性
常用的约束:
主键约束primary key
注意:唯一非空,一张表只能有一个主键,这个主键可以包含多个字段(联合主键)
方式1:建表的同时添加约束 格式:字段名称 字段类型 primary key
方式2:建表的同时在约束区域(所有字段之后)添加约束 格式:primary key(字段1,字段2)
方式3:建表之后,通过修改表结构添加约束 格式:alter table 表名 add primary key(字段1,字段2...)
唯一约束unique
注意:对null值不起作用,可以有多个null值
非空约束not null
外键约束foreign key
alter table 多表名称 add foreign key(外键名称) references 一表名称(主键);
注意:
添加外键约束后,主表中不能删除从表中已引用的数据
从表中不能引用主表中不存在的数据
外键类型一般与主键类型保持一致


truncate 清空表
格式:truncate 表名;
清空表,重新创建一张空表
truncate和delete from区别:
delete属于DML语句,truncate属于DDL语句
delete逐条删除,truncate直接清空表
auto_increment 自增
要求:
1.被修饰的字段类型支持自增,一般是int
2.被修饰的字段必须是一个key,一般是primary key


多表操作

创建多表,可以描述出表与表之间的关系

常见关系:
一对一:一夫一妻 一国一君
一对多:用户和订单 分类和商品
多对多:订单和商品 老师和学生
E-R图可以描述实体与实体之间的关
矩形表示实体
椭圆表示属性
菱形表示关系

一对多:
在开发中,我们将一方称之为主表或一表,多方称之为从表或多表,
为了表示一对多个关系,一般会在从表添加一个字段,字段名称自定义(建议:主表名称_id)
为保证数据的有效性和一致性,在多表添加外键约束
多对多:
在开发中,我们一般引入一张中间表,在中间表中存放两张表的主键,
一般还会把这两个主键设置成中间表的联合主键,将多对多转换成两个一对多
为保证数据的有效性和一致性,在中间表添加两个外键约束


多表查询

笛卡尔积:多张表无条件的联合查询,没有任何意义
例如:select a.*,b.* from a,b;查询a表和b表中的所有数据
内连接:
格式1:显示的内连接
select a.*,b.* from a [inner] join b on ab的连接条件
格式2:隐式的内连接
select a.*,b.* from a,b where ab的连接条件
外连接
左外连接:
select a.*,b.* from a left [outer] join b on 连接条件
意义:先展示左边a表的所有数据,根据条件关联查询右边b表,符合条件则展示信息,不符合的以null展示
右外连接:
select a.*,b.* from a right [outer] join b on 连接条件
意义:先展示右边b表的所有数据,根据条件关联查询左边a表

子查询:
一个查询依赖于另一个查询;
嵌套查询,外层查询的条件依赖内层查询结果;
例如:
查询张三的订单详情
select * from orders where user_id = (select id from user where username='张三');
查询订单大于300元的所有用户信息
select * from user where id in(select user_id from orders where price>300);
查询订单价格大于300的订单信息及相关用户信息
内连接写法:
select orders.*,user.* from orders,user where user.id=orders.user_id and orders.price>300;
子查询写法:将一个查询的结果作为临时表
select user.*,tmp.* from user,(select * from orders where orders.price>300) as tmp where user.id=tmp.user_id;
子查询结果只有一个用=号连接
子查询结果有多个用in连接
as 给表起别名,格式:表 [as] 别名

10-11 16:26