(一)MySQL基本操作

@(数据库)
##MySQL基本操作

  • 登录 mysql -uroot -p
  • net start mysql,在bin目录下(管理员权限运行的cmd)
创建数据库
--create database 数据库的名字
create database day06;
--创建数据库,指定字符集
create database 数据库名字 character set 字符集
create database day06_1 character set utf8;
查看数据库
--查看数据库定义的语句(有3个是自带的)
show create database 数据库名字
show create database day06;
--查看所有数据库
show databases;
修改数据
--修改数据库字符集
alter database 数据库名字 character set 字符集 
alter database day06_1 character set gbk; 

表的CRUD

create table 表名字(
	列名 列的类型 约束,
	列名2 列的类型 约束
);
//不能插入中文,建表设置字符集
create table student (
	sid int primary key,
	sname varchar(31),
	sex int,
	age int
) default chartset=utf8;
  • 列的约束

主键约束: primary key
唯一约束:unique
非空约束:not null

查看表
--查看所有表
show tablas
--查看表的创建
show create table student
--查看表结构
desc student
修改表

添加列(add),修改列(modify),删除列(drop),修改表明(rename),修改表的字符集

添加列(add)
alter table 表名 add 列名 列类型 列约束
alter table student add chengji int not null;
//修改列
alter table student modify sex varchar(2);
//修改列名(列的类型要带上)
alter table student change sex gender varchar(2);
//删除列
alter table student drop chengji;

//修改表名和字符集一般不要动
alter table student to stu ;
alter table student character set gbk ;
删除表
drop table student;

sql完成对表中数据的CRUD操作

#####插入数据

inset into 表名 (列表1,列名2,列名3values(值1,值2,值3);
insert into student(sid,sname,gender,age)values(1,''songbl'',1,25);
//简单写法,插入全列,表名后面的列名可以省略
insert into student values(1,''songbl'',1,25);
//插入部分列,列名不可以省略
insert into student(id,sname) values(3,'xiaolong');

--批量插入(中间以逗号隔开)
insert into student values(4,''songbl'',1,25),(5,''songbl'',1,25),(6,''songbl'',1,25);
删除数据
//如果不写限制条件,所有的数据都会一条一条删除
delete from 表名 where 条件
delete from student where id= 6;
---面试问题,delete和truncate删除数据
delete:DML,一条一条删除数据(数据少,搞笑)
truncate:DDL,先删除表在重建表(数据多,高效)
更新表数据
//如果不写限制条件,会修改所有数据
update 表名 set 列名=列值,列名2=列值2  where条件
//如果参数是字符串或者日期要加上单引号
update student set sname = 'longlong' where id =4;
update student set sname = 'longlong',age=24 where id =5;
查询数据
select [distinct] [*] [列名1,列名2] from 表名 [where条件]
distinct :去除重复数据
select 用于控制显示那些列

---商品分类:手机数码,鞋靴箱包
1. 分类的id
2. 分类的名称
3. 分类描述
create table category (
	cid int primary key auto_increment,
	cname varchar(10),
	cdesc varchar(30)
)
//主键自增长,就不需要传了
insert into category values(null,'手机数码','电子产品 ');
insert into category values(null,'鞋靴箱包','江南皮革厂 ');
insert into category values(null,'香烟酒水','茅台飞天 ');
insert into category values(null,'酸奶饼干','娃哈哈,纯甄 ');
insert into category values(null,'你妹的','瓜子,测试 ');

--再新建商品表,有名称,价格,时间(null取当前时间),类别(对应category)

如下查询操作:

//查询所有商品
select *from product ;
//查询商品名称和商品价格
select pname,price form product;
//别名查询,as关键字,as关键字可以省略
	--表别名 select p.pname,p.price form product p;(主要用于多表查询)
			select p.pname,p.price form product as p;
//列别名 select pname as 商品名称,price as 商品价格 from product;
查询结果列名pname就变成了商品名称..
--去掉重复数据
//有商品价格一样的,就显示一条了  
select distinct price from product;
---运算符;仅仅在查询结果上做了+-*/运算,数据库内容不变
//查询所有的列,外加price价格乘以1.5的列
select *,price*1.5 as 打折价 from pruduct;			
where
---条件查询[where]
--where后的写法
-关系运算符> >= < <= != <>
	<>不等于,标准的SQL语句
//查询所有价格不等于88的商品
select *from product where price <> 88;
//查询价格在10到100之间
select *from product where price > and price <100;	
-between...and ....(从小到大写)
select *from product where price between 10 and 100;	
---逻辑运算符 and 、or、not
//查询商品价格小于100或者大于1000
select *from product where price < 100 or price >1000;	
复杂查询
---like :模糊查询
-- %:代表多个字符     _:代表一个字符
//查询出名字中带有饼的所有商品  ‘%饼%’
select *from product where pname like%%;
(结果小熊饼干、旺旺大饼)
//查询第二个字是熊的所有商品‘_熊%’
select *from product where pname like  ‘_熊%;
(结果小熊饼干)
---in 在某个范围内获得值
--查询出商品分类ID在1,4,5里面的所有商品
select *from product where cid in(1,4,5);
---排序查询:order by 关键字
asc:ascend,升序(默认的排序方式)
desc:descend,降序
--0.查询所有商品,按照价格进行降序排序
select *from product order by price desc;
--1.查询名称有 小 的商品(小米手机,小熊饼干),按照价格升序
	第一步:查询出所有带小的商品
	select *from product where pname like '%小%';
	第二步:进行排序
	select *from product where pname like '%小%' order by price desc;
聚合函数
  • sum()求和
  • avg()平局
  • count()统计数量
  • max()最大值
  • min()最小值
//获得所有商品价格的总和
select sum(price) from product;
//获取所有商品的平均价格
select avg(price) from product;
//获取所有商品的个数
select count(*) from product;(这个count其实就是查询有多少行)
---where后面不可以跟聚合函数
分组

group by
根据某个字段,做一个分组操作。
//根据cno(类别)分组,分组后统计商品的个数
select cno,count(*) from product group by cno ;
在这里插入图片描述
—根据cno分组,分组后统计每组商品的平均价格,并且商品平均价格大于60
select cno,avg(price)
from product group by cno
having avg(price) >60;
在这里插入图片描述
having关键字可以接聚合函数,在分组之后执行
where关键字不可以接聚合函数,在分组之前执行

顺序

编写顺序
select … from … where … group by … having … order by
执行顺序
from(从那张表) … where(得到表的数据,再条件判断,还是一张表)…group by(可能需要对这张表进行分组)…having(分组之后,可能需要做一些过滤筛选)…select(最后控制显示)…order by(显示的结果可能再做一下排序)

杂记

首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。

尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值