MySQL_hm
MySQL的安装和卸载
MySQL的卸载
1、打开控制面板,删除软件
2、删除mysql安装目录的所有文件C:\Program Files\MySQL
3、删除mysql数据存放文件:C:\ProgramData\MySQL 注意:其中ProgramData是隐藏文件夹
重置MySQL密码
方法一: 在my.ini的[mysqld]字段加入: skip-grant-tables 重启mysql服务,这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 update user set password=password('新密码') WHERE User='root'; mysql>flush privileges; 运行之后最后去掉my.ini中的skip-grant-tables,重启mysqld即可。 方法二: 不使用修改my.ini重启服务的方法,通过非服务方式加skip-grant-tables运行mysql来修改mysql密码 停止mysql服务 打开命令行窗口,在bin目录下使用mysqld-nt.exe启动,即在命令行窗口执行: mysqld-nt --skip-grant-tables 然后另外打开一个命令行窗口,登录mysql,此时无需输入mysql密码即可进入。 按以上方法修改好密码后,关闭命令行运行mysql的那个窗口,此时即关闭了mysql,如果发现mysql仍在运行 的话可以结束掉对应进程来关闭。 启动mysql服务
MySQL命令入门
MySQL的SQL语句
SQL:Structure Query Language 结构化查询语言
DDL:数据定义语言:定义数据库、数据表的结构:create(创建)、drop(删除)、alter(修改)
DML:数据操纵语言:主要是用来操作数据:insert(插入)、update(修改)、delete(删除)、
DCL:数据控制语言:定义访问权限、取消访问权限、安全设置 grant
DQL:数据查询语言:select(查询)、from子句、where子句
基本命令
登录MySQL数据库
mysql -u用户名 -p密码
创建数据库
create database if not exists 数据库名称;
使用默认的就可以了
校验规则默认不区分大小写

查看数据库
show databases;查看所有数据库 show create database 数据库名;查看数据库的创建信息
修改数据库的字符集
mysql创建数据库时默认按照安装时的字符编码创建数据库(utf8) alter database 数据库名 character set 字符编码
删除数据库
drop database 数据库名;
进入数据库
use 数据库名; 注意:进入到某个数据库后没办法再退回之前状态,但可以通过use进行切换
查看当前使用的数据库
select database();
数据表
创建数据表
create table 表名( 列名 列的类型(长度) 约束, 列名2 列的类型(长度) 约束 );
列的类型
java sql int int char/string char/varchar char:固定长度 varchar:可变长度 注意:长度代表的是字符的个数 double double float float boolean boolean data data: YYYY-MM-DD time: hh:mm:ss datetime: YYYY-MM-DD hh:mm:ss 默认值为null timestamp: YYYY-MM-DD hh:mm:ss 默认值使用当前时间 text:主要是用来存放文本 blob:存放的是二进制
列的约束
主键约束:primary key 唯一约束:unique 非空约束:not null
查看表信息
查看所有的数据表 show tables; 查看表的创建信息 show create table 数据表名; 查看表的结构 desc 数据表名
修改表结构
添加列(add) alter table 表名 add 列名 列的类型 [列的约束] 修改列(modify) alter table 表名 modify 列名 列的类型 [列的约束] 修改列名(change) alter table 表名 change 旧列名 新列名 列的类型 [列的约束] 删除列(drop) alter table 表名 drop 列名 修改表名(rename):少用 rename table 表名 to 新表名 修改表的字符集:少用 alter table 表名 character set 字符集
删除表
drop table 表名
CRUD
插入数据
方式一: insert into 表名(列名1,列名2) values(值1,值2); 方式二: insert into 表名 values(值1,值2); 注意:若插入部分列,表名后面的列名不能省略 方式三:批量插入 insert into 表名 values(值1,值2),(值1,值2),(值1,值2);
删除数据
delete from 表名 [where 条件] delete删除数据和truncate删除数据有什么区别? delete:DML 一条一条啥暗处表中的数据 truncate:DDL 先删除表在重建表

更新表记录
update 表名 set 列名=列的值,列名2=列的值2 [where 条件]
查询数据
select [distinct] 列名1,列名2 from 表名 where 条件
as:别名查询
表别名 select p.pname,p.price from product as p; 可以省略as select p.pname,p.price from product p; 列别名 select p.pname as 商品名称,p.price as 商品价格 from product as p; 可以省略as select p.pname 商品名称,p.price 商品价格 from product p;
条件中的逻辑运算符
<>:不等于:标准SQL语法 !=:不等于:非标准SQL语法 where price>10 and price<100 可以写成 where price between 10 and 100
判断是否为null:is null is not null
模糊查询
--like:模糊查询 _:代表的是一个字符 %:代表的是多个字符
示例:where pname like "_h%"
查询范围:in
示例 where id in (2,5,8)
排序查询:order by 关键字
asc:ascend 升序(默认排序方式) desc:descend 降序 示例 select * from product order by price ;
聚合函数
注意:where 条件后面不能接聚合函数
sum():求和
sum():求和 示例: select sum(price) from product;
avg():求平均值
示例: select avg(price) from product;
count():统计数量
示例: select count(*) from product ;
分组查询:group by
select 分组字段(列1),列2 from 表名 group by 分组字段(列1); having 关键字:可以接聚合函数,出现在分组之后 where 关键字:不可以接聚合函数,出现在分组之前 示例 select cno,avg(price) from product group by cno having avg(prive)>60;
SQL顺序
编写顺序
S..F..W..G..H..O
执行顺序
F..W..G..H..S..O

多表
外键约束:foreign key
1 示例:为商品表和商品分类表建立关系 2 给product中的cno添加一个外键约束 3 4 alter table product add foreign key(cno) references category(cid) ; 5 6 注意:若product表中的cno的数据,不属于category中的cid数据,则外键建立失败
如果想删除商品分类表中的数据,则要先删除商品表中相应分类的商品数据记录
创建数据表时添加外键约束
create table product( pid int primary key auto_increment, pname varchar(10), price double, cno int, foreign key(cno) references category(cid) );

多表之间的建表原则
一对多
在多的一方添加一个外键,指向一的一方的主键
多对多
建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少要有两个外键,分别指向原来的那两张表
一对一
实际用途:用得不是很多

多表查询
笛卡尔积
设表1记录数为n,表2的记录数为m,则笛卡尔积为n*m
select * from 表1,表2
隐式内连接查询
示例:
过滤笛卡尔积的结果得出有意义的数据
select * from product,category where cno=cid ; select * from product as p,category as c where p.cno=c.cid ; select * from product p,category c where p.cno=c.cid ;
显示内连接查询
示例:
SELECT * FROM product p INNER JOIN category c ON p.cno=c.cid ;
左外连接:在内连接的基础上增加左边有右边没有的结果
SELECT * FROM employee LEFT JOIN department ON employee.dept_id=department.dept_id; +--------+----------+------+---------+---------+-----------+ | emp_id | emp_name | age | dept_id | dept_id | dept_name | +--------+----------+------+---------+---------+-----------+ | 1 | A | 19 | 200 | 200 | 人事部 | | 5 | E | 20 | 200 | 200 | 人事部 | | 2 | B | 26 | 201 | 201 | 技术部 | | 3 | C | 30 | 201 | 201 | 技术部 | | 4 | D | 24 | 202 | 202 | 销售部 | | 6 | F | 38 | 204 | NULL | NULL | +--------+----------+------+---------+---------+-----------+ 6 rows in set (0.01 sec)
右外连接:在内连接的基础上增加右边有左边没有的结果
select * from employee RIGHT JOIN department on employee.dept_id = department.dept_id;
分页查询:limit关键字
起始索引从0
每页显示3条数据
startIndex = (index-1)*3
1 第一个参数是索引 2 3 第二个参数显示的个数 4 5 select * from product limit 0,3; 6 7 select * from product limit 3,3;
子查询
示例:
--示例:查询分类名称为手机数码的所有商品 1、查询分类名为手机数码的ID SELECT cid FROM category WHERE cname='手机数码' ; 2、得出ID为1的结果 SELECT * FROM product WHERE cn=(SELECT cid FROM category WHERE cname='手机数码') ; --示例2:查询(商品名称,商品分类)信息 --左连接 SELECT p.pname,c.cname FROME product LEFT OUTER JOIN category WHERE cname='手机数码') --子查询 SELECT pname,(SELECT cname FROM category c WHERE p.cno=c.cid) AS 商品名称 FROM product p ;
zwy

浙公网安备 33010602011771号