频道栏目
首页 > 数据库 > MySQL > 正文
MYSQL常用的数据库操作指令学习讲解
2018-06-06 15:09:18      个评论    来源:天时地利的博客  
收藏   我要投稿

数据库的概念

1.什么是数据库

数据库就是一个文件系统,通过标准的SQL语句获取数据

2.什么是MySQL数据库

\

3.什么是关系型数据库

关系型数据库存放的是实体之间的关系
常见的关系型数据库:
    MySQL
    Oracle
    SQLServer
    DB2
    SyBase

4.什么是服务器

服务器要从硬件和软件两个方面来说:
    硬件:指的就是一台计算机。
    软件:需要在这台电脑上安装数据库服务器。

SQL的概念

5.什么是SQL

\

7.SQL的分类

DDL:数据定义语言
    create,drop,alter..
DCL:数据控制语言
    grant,if…
DML:数据操纵语言
    insert,update,delete…
DQL:数据查询语言
    select

—————-对数据库进行操作—————-

创建数据库


CREATE DATABASE 数据库名称 CHARACTER SET 字符编码格式;

删除数据库

DROP DATABASE 数据库名称;

查询所有数据库

SHOW DATABASES;

查看当前数据库

SELECT DATABASE();

查看指定数据库

SHOW CREATE DATABASE 数据库名称;

查询当前库中所有的表

SHOW TABLES;

查看表结构

DESC 表名称;

使用数据库

USE 数据库名称;

创建数据表

CREATE TABLE 表名(
    列名1 数据类型 约束,
    列名2 数据类型 约束,
    列名3 数据类型 约束
);

eg:

CREATE TABLE t_address(
    id INT PRIMARY KEY AUTO_INCREMENT,
    address VARCHAR(200) NOT NULL
);

删除表

DROP TABLE 表名称;

修改表结构

1)添加列
ALTER TABLE 表名称 ADD 列名 类型(长度) 约束;
eg:
    ALTER TABLE t_address ADD phone VARCHAR(20);

2)修改列的类型、长度、约束
ALTER TABLE 表名称 MODIFY 列名 类型(长度) 约束;
eg:
    ALTER TABLE t_address MODIFY phone VARCHAR(30) NOT NULL;

3)修改列名
ALTER TABLE 表名称 CHANGE 旧列名 新列名 类型(长度) 约束;
eg:
    ALTER TABLE t_address CHANGE phone tel VARCHAR(30) NOT NULL;

4)删除列
ALTER TABLE 表名称 DROP 列名;
eg:
    ALTER TABLE t_address DROP tel;

5)修改表的字符集
ALTER TABLE 表名称 CHARACTER SET 字符集;
eg:
    ALTER TABLE t_address CHARACTER SET gbk;

修改表名

RENAME TABLE 表名 TO 新表名;

—————-对数据进行操作—————-

插入数据

1)INSERT INTO 表名(列名1,列名2,...,列名N) VALUES(值1,值2,...,值N);
2)INSERT INTO 表名(列名1,列名2,...,列名N) VALUES(值1,值2,...,值N),(值1,值2,...,值N),...,(值1,值2,...,值N);
3)INSERT INTO 表名 VALUES(值1,值2,...,值N);

更新数据

UPDATE 表名 SET 列名1=值1,列名2=值2,...,列名n=值n WHERE 条件;

删除数据

1)删除部分数据
    DELETE FROM 表名 WHERE 条件;

2)删除表内所有数据

    --DELETE是一条条删除,不会清空AUTO_INCREMENT
    DELETE FROM 表名;

    --直接将表删除,重建,AUTO_INCREMENT重置为0
    TRUNCATE TABLE 表名; 

查询数据

1)基本查询
    SELECT * FROM 表名;
    SELECT 列名1,列名2,...,列名N FROM 表名;
    eg:
    SELECT username,password FROM t_user;

2)去重查询
    SELECT DISTINCT 列名1,列名2,...,列名N FROM 表名;
    eg:
    SELECT DISTINCT username FROM t_user;

3)别名查询
    a)表别名
        SELECT * FROM 表名 AS 别名; 
    b)列别名
        SELECT 列名 AS 别名 FROM 表名 ;
        eg:
        SELECT pname,price+10000 AS '价格' FROM product;

\

4)条件查询

    SELECT 列名1,列名2,...,列名N FROM 表名 WHERE 条件;

eg:
    --筛选价格在1000到1800的耳机
    SELECT * FROM headset WHERE money >=1000 AND money <=1800;
    SELECT * FROM headset WHERE money BETWEEN 1000 AND 1800;

    --筛选价格为1000或1800的耳机
    SELECT * FROM headset WHERE money=1000 OR money=1800;
    SELECT * FROM headset WHERE money IN(1000,1800);

    --筛选品牌为X海赛X的耳机
    SELECT * FROM headset WHERE name LIKE '%海赛%';

    --查询耳机品牌为4个字的所有相关信息
    --一个'_'代表一个字符   
    SELECT * FROM headset WHERE name LIKE '____';

    --查询耳机品牌不为null的所有相关信息
    SELECT * FROM headset WHERE name IS NOT NULL;
    SELECT * FROM headset WHERE NOT (name IS NULL);


5)排序查询

    SELECT 列名1,列名2,...,列名N FROM 表名 WHERE 条件 ORDER BY 列名 [DESC/ASC];

    a)升序排序(默认)
        --按照耳机的价格升序排列
        SELECT * FROM headset ORDER BY money;
        SELECT * FROM headset ORDER BY money ASC;
    b)降序排序
        --按照耳机的价格降序排列
        SELECT * FROM headset ORDER BY money DESC;

6)分组查询(配合聚合函数),注意分组每次只会显示该组得第一条数据

    SELECT 列名1,列名2,...,列名N FROM 表名 GROUP BY 列名;
    eg:
    SELECT name,SUM(money) AS 'price' FROM headset WHERE name LIKE '%海赛%' GROUP BY name ORDER BY price DESC;

    --对筛选结果进行再次过滤时要使用HAVING
    SELECT 列名1,列名2,...,列名N FROM 表名 GROUP BY 列名 HAVING 条件;
    eg:
    SELECT name,SUM(money) AS 'price' FROM headset WHERE name LIKE '%海赛%' GROUP BY name HAVING price>2000 ORDER BY price DESC;

注意:
    分组查询中WHERE和HAVING两个关键字的区别

    "WHERE" 是一个约束声明,使用WHERE来约束来之数据库的数据,WHERE是在结果返回之前起作用的,且WHERE中不能使用聚合函数。
    "HAVING"是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在HAVING中可以使用聚合函数。
第一步:关闭mysql服务   
    管理员权限cmd   net stop mysql

第二步:忽略权限检查
    管理员权限cmd   mysqld --skip-grant-tables

第三步:在新命令行窗口中登录mysql(不需要输入密码)
    管理员权限cmd        mysql

第四步:在mysql命令行中修改root密码
    UPDATE mysql.user SET password=PASSWORD('新密码') WHERE user='root';

第五步:在mysql命令行中刷新权限
    FLUSH privileges;

第六步:重新启动mysql
    管理员权限cmd        net start mysql;

MYSQL备份数据库

mysqldump备份数据库(包括数据库中的数据)
    mysqldump -u root -p 数据库名称 > D:/数据库备份文件.sql

mysqldump备份数据库结构(不含数据)
    mysqldump -u root -p -d 数据库名称 > D:/数据库备份文件.sql

MYSQL还原数据库(提前将数据库创建出来)

source D:/数据库备份文件.sql

sql多表

约束

单表约束
    主键约束    PRIMARY KEY
    唯一约束    UNIQUE
    非空约束    NOT NULL
多表约束
    外键约束    FOREIGN KEY
        外键约束用来保证数据完整性(多表之间)
添加外键sql
ALTER TABLE 表1 ADD FOREIGN KEY(表1外键列) REFERENCES 表2(表2主键列)
多表之间的关系
1对1 
1对多
多对多

多表之间关系设计

1对1:
表的设计原则
    a)其中一方创建一个外键列指向另一方的主键,外建列唯一
    b)主键对应主键
1对多:
表的设计原则
    多的一方创建外建列指向一的一方主键   

\

多对多
表的设计原则
    创建一个中间表,中间表中的2列分别作为外键指向2个表单的主键

\

多表查询

内连接

显式内连接(inner可以省略)

语法: select * from 表1 inner join 表2 on 关联条件;

隐式内连接

语法: select * from 表1,表2 where 关联条件;

外连接

左外连接

语法: select * from 表1 left outer join 表2 on 关联条件;

右外连接

语法: select * from 表1 right outer join 表2 on 关联条件;

内连接和外链接的区别

\

子查询

查询中嵌套查询

in 等于

any 最小值

all 最大值

exists 如果存在则执行前面语句,如果不存在在不执行

<h2 "="">MYSQL事务

概述

事务:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败。
开启事务:
start transaction;
提交事务
commit;
回滚事务
rollback;

4个特性

原子性: 事务的不可分割,组成事务的各个逻辑单元不可分割
一致性: 事务执行的前后,数据完整性保持一致
隔离性: 事务执行不应该受到其他事务的干扰
持久性: 事务一旦结束,数据就持久化到数据库中

基于隔离性出现问题

脏读: 一个事务读到了另一个事务未提交的数据,导致查询结果不一致
不可重复读: 一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致
虚读/幻读: 一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致

设置mysql的隔离级别

read_uncomiited: 脏读,不可重复读,虚读都有可能发生
read_commited: 避免脏读。但是不可重复读和虚读是有可能发生    oracle          
repeatable_read: 避免脏读和不可重复读,但是虚读有可能发生   mysql
serializable: 避免脏读,不可重复读,虚读
点击复制链接 与好友分享!回本站首页
上一篇:MySQL db方式操作数据库的实例详解
下一篇:讲解一下mysql与sqlserver总结部分不同点
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站