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  数据表名

 

 

修改表结构

 

添加列(addalter  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

起始索引: index 代表显示第几页 页数从1开始

每页显示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

 

posted @ 2019-02-23 12:54  zwyk  阅读(99)  评论(0)    收藏  举报