`mysql
mysql 5.7.17 压缩版安装
1、复制 my-default.ini 重命名为my.ini
2、在my.ini中添加以下内容:
[client]
default-character-set=utf8
[mysqld]
basedir = E:\codeProgram\mysql_5.7
datadir = E:\codeProgram\mysql_5.7\data
port = 3306
character-set-server = utf8
3、以管理员权限打开cmd,进入mysql的bin下,mysqld --install MySQL
安装服务。
4、mysqld --initialize-insecure
初始化data文件。
5、启动服务net start mysql
。
6、
mysql -u root -p; //root密码初始为空。
use mysql; //进入数据库mysql
//设置root密码,注意新的mysql中以把字段password改为authentication_string
update user set authentication_string=PASSWORD('wu25471396')where user = 'root';
MYSQL 简单操作
一、 对数据库的操作
1、创建一个库
create database 库名;
create database 库名 character set 编码;
2、查看数据库
//查看有哪些数据库
show databases;
//查看指定数据库的编码
show create database 库名;
3、删除一个库
drop database 库名;
4、使用库
use 库名;
5、查看当前正在操作的库
select database();
二、对数据库表的操作
1、创建一张表
create table product(
pid int primary key auto_increment,
pname varchar(20)not null unique,
price double
);
2、删除表
drop table product;
3、查看表
show tables; --查看数据库中的所有表
show create table product; --查看表的字符编码
desc 表名; --查看表结构
4、修改表
alter table product add info varchar(100); --添加列
alter table product modify pname varchar(18); --修改表列的类型长度及约束
alter table product change info pro_info varchar(50); --修改表修改列名
alter table product drop pro_info; --删除列
rename table product to newproduct; --修改表名
alter table product character set gbk; --修改表的字符集
5、插入记录
insert into newproduct(pid,pname,price) values(null,'笑笑',0.5);
insert into newproduct values(null,'王笑',9999);
6、更新记录
update newproduct set pname='李笑',price=789 where pid = 2;
7、删除记录
delete from newproduct where pid=2;
注意:删除表中用delete from 表名; 还是用 truncate table 表名:
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
事务方面:delete删除的数据,如果在一个事务中则可以找回。
truncate删除的数据找不回来。
例:
start transaction; --开启事件
delete table newproduct;
rollback; --回滚
8、cmd中文乱码
方式一:修改my.ini文件,然后重新启动mysql服务器
[mysql]
default-character-set=gbk
方式二:在cmd命令行中,当前cmd命令窗口有效
cmd> set names gbk;
三、单表的查询
1、简单查询
select * from newproduct;
select pname,price from newproduct;
--别名
select * from newproduct as 商品; --as可以省略
select pname as 商品名称 from newproduct --as可以省略
2、条件查询
select * from newproduct where pname = '笑笑';
select * from newproduct where price > 60;
where后条件的写法:
比较运算符 | 例子 |
---|---|
< <= >= = <> | |
BETWEEB 12 AND 20 | 显示在区间12到20的值(包含12和20) |
IN(100,200) | 显示在in列表中的值,即100或200 |
LIKE ‘_张%’ | _代表一个一个字符,%代表任意多个 |
IS NULL | 是否为空 |
逻辑运算符 | 例子或解释 |
---|---|
and | |
or | |
where not(salary>100) | 不成立 |
3、排序
-- asc 升序 (默认),desc 降序
select * from newproduct order by price asc;
4、聚合函数
-- sum(), avg(), max(), min(), count()计数
select sum(price) from newproduct;
select count(*) from newproduct;
5、分组
准备测试阶段:
--添加id(cid)
alter table product add cid varchar(32);
--初始化数据
update newproduct set cid='1';
update newproduct set cid='2' where pid in(5,6,7);
分组
--根据cid字段分组,分组后统计商品的个数
select cid,count(*) from newproduct group by cid;
--根据cid分组,分组统计每组商品的平均价格,并且平均价格>60;
select cid,avg(price) from newproduct group by cid having avg(price)>60;
6、去掉重复数据
select distinct(price) from newproduct;
查询注意事项:
select 字段
from 表名
where 条件
group by 分组
having 分组后带有的条件只能使用having
order by 必须放在最后
四、多表相关
表与表的关系:
- 一对多建表原则:
在多的一方(从表)创建一个字段,字段作为外键指向一的一方(主表)的主键。 - 多对多建表原则:
需要创建第三张表,中间表至少有两个字段,这两个字段风别作为外键指向各自一方的主键。 - 一对一(其实可以创建成一张表):
两种建表原则:外键唯一unique。 外键是从表的主键。
增删外键约束
--其中constraint product_fk可以省略,product_fk为外键名称product 为从表。
alter table product add constraint product_fk foreign key(category_id) references category(cid);
--根据外键名称product_fk 删除外键。
alter table product drop foreign key product_fk;
例:多对多(订单和商品)
-- 订单表
create table orders(
oid varchar(32) primary key,
totalprice double
);
-- 订单项表
create table orderitem(
oid varchar(50),
pid varchar(50)
);
-- 联合主键(可以省略)
alter table orderitem add primary key(oid,pid);
-- 订单表和订单项表的主外键关系
alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);
-- 商品表和订单项表的主外键关系
alter table orderitem add constraint orderitem_product_fk foreign key(pid) references product(pid);
注:
- 从表外键不能添加:主表中不存在的记录。
- 主表不能删除:从表中已经引用的记录
2、多表查询
- 交叉查询
select * from category,product;
基本不会使用-得到两个表的笛卡儿积。 - 内连接(inner join –inner可以省略),
-- 隐式内连接:
select * from category,product where cid=category_id;
或select * from category c,product p where c.cid=p.category_id;
-- 显示内连接:
select * from category inner join product on cid=category_id;
- 外连接查询:(outer join –outer可以省略)
-- 左外连接:
select * from category left outer join product on cid=category_id;
-- 右外连接:
select p.* from category right join product p on cid=p.category_id;
- 子查询:
select * from product where category_id=(
select cid from category where cname='化妆品');
注:
++内连接:查询两个表的交集。++
++左外连接:查询左表全部及两个表的交集。++
++右外连接:查询右表全部及两个表的交集。++