2018-06-12
对数据库中库的操作和表结构的操作
一、对数据库的操作
1、创建数据库
create database 数据库名;
create database 数据库名 character set 编码;
2、查看数据库
查看数据库服务器中的所有数据库:show databases;
查看某个数据库的定义的信息:show create database 数据库名;
3、删除数据库
drop database 数据库名;
4、其他的数据库操作命令
切换数据库:use 数据库名;
查看正在使用的数据库:select database();
-------------------------------------------
二、表操作:table
1、创建表
create table 表名(
字段名 类型 (长度) [约束],
字段名 类型 (长度) [约束]
);
字符类型:varchar(n)
单表约束:
主键约束:primary key,要求被修饰的字段:唯一 和 非空
唯一约束:unique,要求被修饰的字段:唯一
非空约束: not null,要求被修饰的字段:非空
2、查看表
查看数据库中所有的表:show tables;
查看表结构:desc 表名;
3、删除表
drop table 表名;
4、修改表
alter table 表名 add 列名 类型(长度) [约束]; --修改表添加列
alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束
alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表名修改列
alter table 表名 drop 列名; --修改表删除列
rename table 表名 to 新表名; --修改表名
alter table 表名 character set 字符集; --修改表的字符集
5、查看当前编码
show create table 表名;
-------------------------------------------------------------------------------------------------------
三、对数据库表记录进行操作(修改)
1、插入记录:insert
insert into 表(列名1,列名2,列名3...) values(值1,值2,值3...); --向表中插入某些列
insert into 表 values(值1,值2,值3...); --向表中插入所有列
注意:
-
- 列名数与values后面的值的个数相等
- 列的顺序与插入 值的顺序一致
- 列名的类型与插入的值要一致
- 插入值的时候不能超过最大长度
- 值如果是字符串或者是日期需要加‘ ’(一般是单引号)
例如:
insert into t_cate(cid,canme) values('c001','电器');
插入数据中文乱码问题的解决办法:
方式一:【不建议!】
直接修改数据库安装目录里面的my.ini文件的第57行,重启mysql服务器
default-characer-set = utf8
方式二:在cmd命令行中,当前cmd命令窗口有效
set names gbk;
2、修改表的记录:update
update 表名 set 字段名=值,字段名=值 ...; --更改该列的所有记录
update 表名 set 字段名=值,字段名=值 ... where 条件;
注意:
- 列名的类型与修改的值要一致。
- 修改值的时候不能超过最大长度。
- 值如果是字符串或者日期需要加‘’。
3.删除表记录:delect
delect from 表名 [where 条件];
面试题:说说delete与truncate的区别?
delete删除的时候是一条一条的删除记录,它配合事务,可以将删除的数据找回。
truncate删除,它是将整个表摧毁,然后再创建一张一模一样的表。它删除的数据无法找回。
注意:
delect删除,uid不会重置。而使用truncate操作,uid会重置。
4.查询表记录:select
准备工作:
1 #创建商品表
2 create table product(
3 pid int primary key auto_increment,
4 pname varchar(20),
5 price double,
6 pdate timestamp
7 );
8 #自动增长列:auto_increment, 要求:1.必须整形(int) 2.必须主键
9
10
11 insert into product values(NULL, '谭尼平', 0.01, NULL);
12 insert into product values(null, '李士雪', 38, null);
13 insert into product values(null, '左慈', -998, null);
14 insert into product values(null, '黄迎', 9999, null);
15 insert into product values(null, '南国强', 999998, null);
16 insert into product values(null, '士兵', 1, null);
4.1 简单查询:
select [distinct] * from 表名 [where 条件]
select [distinct] 列名1,列名2 from 表名 [where 条件]
1 #一、简单查询:
2
3 #1.查询所有商品
4 select * from product;
5
6 #2.查询商品名和商品价格
7 select pname,price from product;
8
9 #3.别名查询,使用关键字as.as 可以省略的
10 #3.1表别名
11 select * from product as p;
12 #3.2列别名
13 select pname as pn from product;
14
15 #4.去掉重复值(按照价格)
16 select distinct price from product;
17
18 #5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示
19 select pname, price+10 from product;
4.2条件查询
where后的条件写法:>, <, =, >=, <=, <>
like使用占位符_ 和 %。_代表一个字符,%代表任意字符。
select * from product where pname like '%新%';
in在某个范围中获得值
select * from product where pid in(2,5,6);
select * from product where pid=1 or pid=3 or pid=5;
1 #1.查询商品名称为“左慈”的商品所有信息
2 select * from product where pname = '左慈';
3
4 #2.查询价格>60元的所有商品信息
5 select * from product where price > 60;
6
7 #3.查询商品名称含有"士"字的商品信息
8 select * from product where pname like '%士%';
9
10 #4.查询商品id在(3,6,9)范围内的所有商品信息
11 select * from product where pid in(3,6,9);
12
13 #5.查询商品名称含有"士"字并且id为6的商品信息
14 select * from product where pname like '%士%' and pid=6;
15
16 #6.6.查询id为2或者6的商品信息
17 select * from product where pid=2 or pid=6;
4.3 排序操作
select ... order by 字段1 asc | desc, 字段2 asc | desc ...
asc:升序, desc:降序
1 #1.查询所有的商品,按价格进行排序(asc:升序, desc:降序)
2 select * from product order by price;
3
4 #2.查询名称有"士"的商品信息并且按照价格降序排序
5 select * from product where pname like '%士%' order by price desc;
4.4 聚合函数
常用的聚合函数:sum()求和, avg()平均, max()最大值, min()最小值, count()计数
注意:聚合函数不统计null值
1 #1.获得所有商品的价格的总和
2 select sum(price) from product;
3
4 #2.获得所有商品的平均价格
5 select avg(price) from product;
6
7 #3.获得所有商品的个数
8 select count(*) from product;
4.5 分组操作
1 #1.添加分类id
2 alter table product add cid varchar(32);
3 #2.初始化数据
4 update product set cid='1';
5 update product set cid='2' where pid in (5,6,7);
6
7 #1.根据cid字段分组,分组后统计商品的个数。
8 select cid,count(*) from product group by cid;
9
10 #2.根据cid分组,分组统计每组商品的平均价格,并且平均价格大于20000元。
11 select cid, avg(price) from product group by cid having avg(price)>20000;
四、SQL语句查询总结
select 一般在的后面的内容都是要查询的字段
from 要查询到表
where 查询条件
group by 分组字段
having 分组条件:分组后带有条件只能使用having
order by 排序字段:asc | desc 它必须放到最后面