mysql命令

 mysql -u用户名 -p密码
 update user set password=password(‘密码’) where user=’用户名’; 以此来给用户设置密码

sql的分类:
	DDL:数据库定义语言,操作对象:数据库和表,关键词:create alter drop
	DML:数据操作语言,操作对象:记录
	DQL:数据库查询语言
	DCL:数据控制语言;操作对象:用户,事务,权限

DDL:
创建表:
create table products (
	id int primary key auto_increment,
	name varchar(20),
	price double
);
创建数据库: create database 数据库名称;
删除数据库: drop database 数据库名称;
显示所有数据库: show databases;
使用那个数据库: usr 数据库名;
查看当前使用的数据库: select database();
显示当前数据库下的所有表: show tables;
查看表的结构: desc 表名;
查看建表语句: show create table 表名;
删除表: drop table 表名;


修改表结构
格式: alter table 表名;

修改表名: alter table 旧表名 rename to 新表名;

添加字段: alter table 表名 add 要添加的字段名 字段描述;
	例如:alter table user add password varchar(20);

修改字段名: alter table 表名 change 字段名称 新字段描述; 
	例如:alter table user change password psw varchar(20);

修改字段类型: alter table 表名 modify 字段名称 新的字段类型 约束;
	例如:alter table user modify password int ;

删除字段: alter table 表名 drop 字段名;
	例如: alter table user drop password;

删除表: drop table 表名;


DML:数据操作语言
插入记录: insert into 表名 values (字段1,字段2,...)
	  insert into 表名(字段2,字段3) values (字段2值,字段3值);
修改: update 表名 set 字段名1 = 字段值1 ,字段名 = 字段值1 [where条件]
	例如:update user set username = 'wenlong',age = 23 where id = 1;
删除: delete from 表名 [where条件]
	例如: delete from user where id = 1;

DQL:数据库查询语言	
格式: select * from where 条件 group by 分组字段 having 条件 order by 排序字段 ase|desc
查询所有商品: select * from products;
查询指定的列: select price,name from products;
	去重(distinct):在查询出来的结果中,相同记录的只显示一条
	: select distinct 字段1,字段2 from 表名; 只有字段1,2都相同才认为是重复
可以在查询的结果之上进行运算
	将所有商品的价格+10元进行显示
	:select price+10 from product; 加别名: select price+10 新价格 from product;
模糊匹配:
	格式:字段名 like + "匹配规则";
	匹配内容  %:代表任意个字符  _:代表一个字符 
	"龙"	值为龙
	"%龙"	值以龙结尾的
	"龙%"	值以龙开头的
	"%龙%"	值包含龙的
	匹配个数 "_龙%" 第二个字符是龙
	select * from product where name = '_龙%';
	
where后的条件写法
	>,<,=,>=,<=,<>,!=
	like 使用占位符 _ 和 % 
	·select * from product where name = '_龙%';
	in在某个范围中获取值
	·select * from product where id in (1,2,3);
	between 较小值 and 较大值
	·select * from product where price between 10 and 100;

排序查询 order by :
	asc:升序 desc:降序
	·select * from product order by price desc;
	按照条件查询,并按价格降序排序
	·select * from product where name like '%龙%' order by  price desc;

	
聚合函数: 对一列进行计算,返回的值是一个数,忽略null值
	·sum(),avg(),mim(),count()
	获取所有商品的价格总和
	select sum(price) from product;
	获取商品表中价格的平均数
	select avg(price) from product;
	round(值,保留小数位)
	select round(avg(price,2)) from product;
	获取商品表中有多少条记录
	select count(*) from product;

分组: group by 
	根据name字段 进行分组,分组后统计商品的个数
	select name,count(*) from product group by name;
	根据name字段 进行分组,分组后统计商品的个数,并统计在同一分组内商品总价
	select name,count(*),sum(price) from product group by name;
	根据name字段 进行分组,分组后统计商品的个数,并统计在同一分组内商品总价,并商品总价大于300的
	注意: 分组后进行筛选是使用having
	select name,count(*),sum(price) totalprice from product group by name having totalprice > 300;
	
	注意; where与having区别
	·where 是对分组前的数据进行过滤
	·having 是对分组后的数据进行过滤
	·where后面不能使用聚合函数,having后面可以使用聚合函数


java对应mysql的数据类型

java			mysql
byte			tinyint
short			smallint
int			int
long			long	
char/String		varchar(20)/char
			varchar:可变长度,例如使用varchar(20)存放abc,那么就只会占abc大小的空间
boolean			tinyint/int 代替
float/double		float/double 注意:double(5,2):该小数长度为5个,小数占2个,最大值为999.99
java.sql.Date		date 日期
java.sql.Time		time 时间
java.sql.Timestamp	timesttamp 时间戳,如果给定值null,数据库会将当前时间放到数据库中

java.sql.Clob(长文本)	text
java.sql.Blob(二进制)	blob


mysql的约束:作用:为了保证数据的有效性和完整性
mysql中常用的约束:
主键约束(primary key) 唯一约束(unique) 非空约束(not null) 外键约束(foreign key)
auto_increment(自增长) zerofillb(零填充)
主键约束:唯一,非空
	方式一:在建表的时候增加约束,格式:字段名称 字段类型 primary key
	方式二:建表的同时在约束区域添加约束
		所有的字段声明完成之后,就是约束区域了
		格式:primary key (字段1,字段2),使用两个字段作为主键就是联合主键
		create table xxx(
			id int,
			username varchar(20),
			primary key (id)
		);
	方式三: 建表之后,通过修改表结构添加约束
		alter table xxx add primary key (字段..)

唯一约束:
	unique(字段1,字段2),联合唯一
	添加唯一约束:
	alter table 表名 add unique (字段..)


truncate  清空表
格式: truncate 表名;干掉表,重新创建一张空表
和delete区别:
	delete属于DML语句,truncate属于DDL语句
	delete逐条删除,truncate干掉表,重新创建一张空表

auto_increment 自增
要求: 1.被修饰的字段类型支持自增,一般是int 
      2.被修饰的字段必须是一个key,一般是primary key
	alter table 表名 modify id int unsigned auto_increment
	(unsigned是无符号位,就是只能是整数,建立外键的时候两个键的数据类型必须是一致的
	包括是不是符号位也要是一致的)

外键约束: -->为了保证数据的有效性的完整性,添加约束(外键约束)
	在多表的一方添加外键约束
	格式: alter table 表名 add foreign key (外键名称) references 表名称(依赖那个键);
	例如:alter table orders add foreign key (user_id) references user(id);


多表创建

(一对多)
在开发中,我们将一对多的关系,一 的一方称为主表或者是一表,多的一方称为多表或者是从表
为了表示一对多的关系,一般会在多表的一方添加一个字段,字段名称自定义(建议:主表的名称_id)
字段类型一般和主表的主键类型保持一致,我们称这个字段为外键


添加了外键约束之后有如下特点
1.主表中不能删除从表中已存在的数据
2.从表中不能添加主表中不能存在的


(多对多)
在开发中处理多对多:
引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,
这样就可以将多对多的关系拆分成两个一对多
为了保证数据的有效性和完整性,需要在中间表上添加两个外键约束即可


多表查询
笛卡儿积: select a.*,b.* from a,b;
	  将一张表中拿出第一条记录,与另一张表的所有记录进行并接
	  将一张表中拿出第二条记录,与另一张表的所有记录进行并接
	  ...
	  总条数为第一张表的记录 * 第二张表的记录

内连接:
	格式1:显示的内连接(使用join on连接)
		select a.*, b.* from a [inner] join b on ab的连接条件

	格式2:隐式的内连接(使用where连接)
		select a.* b.* form a ,b where a.id = b.a_id;

外连接:
	左外连接:
		select a.*, b.* from a left join b on a.id = b.a_id;
		意思是:先展示join左边的(a)表的所有数据,根据条件关联查询join右边的(b)表
		符合条件则展示出来,不符合以null值展示

	右外连接:
		select a.*, b.* from b right join a on a.id = b.a_id;
		意思是:先展示join右边的(a)表的所有数据,根据条件关联查询join左边的(b)表
		符合条件则显示出来,不符合以null显示
		(左右外连接时可以相互转化的,这条记录与上面的左外连接是等价的)

						
练习:
	查询用户的订单,没有订单的用户不显示
		显式内连接: select user.*, orders.* from user join orders on user.id = orders.id;
		隐式内连接: select user.*, orders.* from user,orders where user.id = orders.id;

	查询所有用户的订单详情:
		左外连接: select user.* , orders.* from user left join orders on user.id = orders.user_id;
		右外连接: select user.*, orders.* from orders rigth join user on user.id = orders.user_id;
	
	查询所有订单的用户详情:
		左外连接: select orders.*, user.* from orders left join user on user.id = orders.uer_id;
		右外连接: select orders.*, user.* from user right orders on user.id = orders.user_id;



子查询:
	一个查询依赖另一个查询

练习:	
	查询用户为张三的订单详情
	select * from orders where orders.user_id = (select id from user where name = '张三');
	查询出订单的价格大于300的所有用户信息
	select * from user where id = (select user_id from orders where price > 300);
	查询订单价格大于300的订单信息及相关用户信息
		使用隐式内连接: select orders.*,user.* from orders,user where orders.user_id = user.id and orders.price > 300;
		使用显式内连接: select orders.*, user.* from user join orders on user.id = orders.user_id and orders.price > 300;
		使用子查询:是将一个查询的结果作为一张临时表
		select * from orders where price > 300;//将该表作为一个临时表
		select temp,user.* from user,(select * from orders where price > 300) where user.id = orders.user_id;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值