Mysql 笔记

目标 :

  • 能理解数据库的概念
  • 安装Mysql
  • 启动,关闭及登陆MySQL
  • 能够使用SQL语句操作数据库
  • 能够使用SQL语句操作表
  • 能够使用SQL语句操作表结构
  • 使用SQL对数据完成CRUD的操作
  • 可以使用SQL语句完成复杂的查询语句

数据库的介绍:

  • 数据存储方式

      java中创建对象 :  Student s = new Student(); 存在内存中
    
存储位置优点缺点
内存速度快不能永久保存,数据是临时状态的
文件数据可以永久存储操作数据不方便,查询某一个数据
数据库1. 数据可以永久保存2. 查询速度快3. 对数据管理方便占用资源,需要购买

什么是数据库?

  • 1. 存储数据的仓库

  • 2. 本质是一个文件系统,还是以文件的方式存在服务器的电脑上

  • 3. 所有关系型数据库都可以使用通用的SQL语句进行管理

  • 4. DBMS(数据库管理系统) DataBase Management System

    MySQL : 开源免费的数据库,小型的数据库,已经被Oracle收购了,MySQL6.x版本开始收费!
    Oracle : 收费的大型数据库.
    DB2 :IBM公司的数据库产品,收费,常用于银行项目系统中.
    SQL Server : 中型数据库,C#,.net等于语言常用.
    SQLife : 微型数据库,一般在手机中应用.

    为什么选择mysql ?

    1. 免费
    2. 功能强大.

    数据库组成 :

  • 1. 客户端(用户连接数据库实例,发送指令,请求实例执行什么样的操作)

    1. 数据库软件安装后生成的
  • 2. 数据库实例

  • 3. (管理数据文件的)DBMS

    1. 安装数据库后创建配置的
  • 4. 数据文件(数据存储的文件)

    1. 数据安装完成后会自动创建系统必须的数据文件
    2. 用户可以自己创建数据文件

    MySQL 目录:

  • my.ini : MySQL的核心配置文件

  • bin : MySQL的可执行文件(开启MySQL实例,运行客户端,导入,导出…)

  • data : 数据库的数据文件存储位置

    开启MySQL服务就等价于开启MySQL实例.只有开启实例才可以操作数据库

    • cmd命令

        net start 服务名称
        net stop 服务名称
      
    • 控制台连接数据库

        mysql服务没有开启
        ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
      
        mysql -u用户名 -p密码
        mysql默认端口号是3306客户端会默认使用3306连接服务器数据库,如果不是默认端口需要指定-P端口号
      

      mysql -u用户名 -p密码 -P端口号
      mysql -u用户名 -p密码 -hIP地址 -P端口

      退出控制台

      exit或quit

    • mysql->数据库管理软件

        数据库  : 就使用一个文件夹
        表		: 就是一个文件
        数据		:  存储在文件中的内容
      
        mysql 下面可以包含多个数据库->一个数据库下面可以包含多张表->一张表下面可以包含多条数据
      

数据库管理系统(DBMS)

主要是操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制以保证数据库的安全性和完整性.用户可以通过数据库管理系统访问数据库中表内的数据.

SQL语言 : 数据库管理系统进行交互的语言
ANSI(美国国家标准局)
ISO(欧盟国际认证)

SQL

  • SQL 是 Structure Query Language(结构化查询语言)

  • SQL主要是对关系数据库的操作应用语言(实现了关系型数据库中的信息检索)

  • SQL-86 是SQL语言的通用标准(所有关系型数据都需要准许SQL-86的语法)

    SQL语句主要分3类:

      1. DDL : 数据定义语言,这些语句定义了不同的数据段,数据库,表,列,索引等数据库对象
      	1. create
      	2. drop
      	3. alter
      2. DML : 数据操作语言,用于添加,删除,更新和查询数据库记录.
      	1. insert
      	2. delete
      	3. update
      	4. select
      3. DCL : 数据控制语言,用于控制不同数据段的访问权限.
      	1. grant
      	2. revoke
      	3. Commands end with ; or \g. : 命令的结束符,用;或者\g结束.
    

DDL语句

DDL语句主要是对数据库和表进行创建,删除,修改的操作语言.
1. 展示当前mysql下面的所有数据库.
	1. show databases;
	mysql> show databases;
	+--------------------+
	| Database           |
	+--------------------+
	| information_schema |
	| hnkj               |
	| mysql              |
	| test               |
	+--------------------+
	4 rows in set (0.00 sec)

	1. information_schema : 主要存储系统中的一些数据库对象信息,比如,用户名,列信息,字符集信息,分区信息...
	2. mysql : 存储了系统的用户权限信息
	3. test : 系统自动创建的测试数据库,任何用户都可以使用


;和\g都是代表结束命令符;

\c 清除编写的命令行.

2. 创建数据库
	1. create database dbname;
	mysql> create database hnkj;
	Query OK, 1 row affected (0.00 sec)
	
	mysql> show databases;
	+--------------------+
	| Database           |
	+--------------------+
	| information_schema |
	| hnkj               |
	| mysql              |
	| test               |
	+--------------------+
	4 rows in set (0.00 sec)
	
	Query OK : 代表上一行命令执行成功
	1 row affected : 表示操作只影响数据库中一行记录
    (0.00 sec) : 记录了操作执行的时间
	
	mysql> create database hnkj;
	ERROR 1007 (HY000): Can't create database 'hnkj'; database exists
	
	ERROR 1007 (HY000) : 异常类型
	Can't create database 'hnkj'; database exists : 异常消息

3. 删除数据库
	1. drop database dbname;
	mysql> drop database hnkj;
	Query OK, 2 rows affected (0.18 sec)

4. 特殊操作
	1. 判断是否存在,如果不存在则创建hnkj数据库. 
	2. create database if not exists hnkj;
	3. 创建数据库并制定字符集
	4. create database hnkj3 default character set utf-8
	5. 查看某个数据库的定义信息
	mysql> show create database hnkj3;
	+----------+----------------------------------------------------------------+
	| Database | Create Database                                                |
	+----------+----------------------------------------------------------------+
	| hnkj3    | CREATE DATABASE `hnkj3` /*!40100 DEFAULT CHARACTER SET utf8 */ |
	+----------+----------------------------------------------------------------+
	1 row in set (0.00 sec)
	6. 修改数据库的默认字符集
	7. alter database hnkj2 character set utf8;
5. 使用数据库
	1. 选择/切换数据库
	2. use 数据库名;
	3. 显示正在使用的数据库
	4. select database(); 使用的是一个mysql全局函数

	select database hnkj; 语法错误

#day2 0427

表(DDL)

## 前提使用某个数据库

1. 创建表
	create table tableName(
	column_name1 column_type1 constraints,
	column_name2 column_type2 constraints,
	column_name3 column_type3 constraints,
	....
	column_nameN column_typeN constraints
	);

	create : 创建
	table	: 表的关键字
	column_name : 列的名称
	column_type : 列的数据类型
	constraints : 列的约束条件

	create table sutndet2(
		no int,	--整数
		name varchar(30),--字符串
		score double,--小数
		birthday date--生日,最后没有逗号
	)

2. 查看表
	1. show tables;(mysql独有的)
	mysql> show tables;
	+----------------+
	| Tables_in_hnkj |
	+----------------+
	| student        |
	| sutndet2       |
	+----------------+
	2 rows in set (0.00 sec)
3. 查看表结构
	1. desc 表名;
	mysql> desc student;
	+----------+-------------+------+-----+---------+-------+
	| Field    | Type        | Null | Key | Default | Extra |
	+----------+-------------+------+-----+---------+-------+
	| no       | int(11)     | YES  |     | NULL    |       |
	| name     | varchar(30) | YES  |     | NULL    |       |
	| score    | double      | YES  |     | NULL    |       |
	| birthday | date        | YES  |     | NULL    |       |
	+----------+-------------+------+-----+---------+-------+
	4 rows in set (0.00 sec)

4. 查看创建表的SQL语句
	1. show create table 表名\G;
	\G : 安装字段竖着排列	
5. 删除表
	1. drop table tableName;

6. 修改表
	1. alter table tableName modify [column] column_definition [first | after col_name];
	 mysql> alter table emp modify ename varchar(20); -- 修改列的类型
	Query OK, 0 rows affected (0.11 sec)
	mysql> alter table emp add column age int(3); -- 添加新列
	Query OK, 0 rows affected (0.09 sec)
	mysql> alter table emp drop column age; --删除表中指定的列
	Query OK, 0 rows affected (0.08 sec)
	mysql> alter table emp change deptno dno int(2); -- 修改列的名称
	Query OK, 0 rows affected (0.08 sec)

	change和modify修改表的定义,不同的是change后面需要些两次列名,不方便.
	但是change可以改变列的名称,modify不可以改变列的名称

	mysql> alter table emp add age int(2) after ename; -- 将age添加到ename的后面
	Query OK, 0 rows affected (0.09 sec)

	mysql> alter table emp modify age int(3) first; -- 将age修改到第一列
	Query OK, 0 rows affected (0.07 sec)
	
	mysql> alter table emp rename emp1; -- 修改表名
	Query OK, 0 rows affected (0.01 sec)


7. 快速创建一个表结构相同的表
	mysql> create table new_emp like emp;
	Query OK, 0 rows affected (0.03 sec)
8. drop table if exists 表名;
9. alter table emp character set gb2312;

2. Mysql的数据类型
	1. 整形 : int
	2. 浮点型 : double
	3. 字符串 : varchar
	4. 时间 : date,格式:yyyy-MM-dd,只有年月日,没有时分秒


数据类型 : https://www.cnblogs.com/-xlp/p/8617760.html

	
	
创建员工表:
	emp表名
	列名(ename,hiredate,sal,deptno);

DML操作表中的数据

	DML操作是指对数据库中表记录(数据)的操作,主要包括插入(insert),修改(update),删除(delete),查询(select)


DBA(DDL)
码农(DML)

1. 插入记录
insert into tableName(field1,field2....fieldN)values(value1,value2,....valueN);
	
insert into emp(ename,hiredate,sal,dno)values('张三','2005-08-08',188.6,10);
insert into emp values('张三','2005-08-08',188.6,10);--值必须和列的顺序对应,值必须和;列的数量一致
insert into emp(ename,hiredate)values('李四','2018-08-08');



 create table aa4(id int(2) ZEROFILL); -- ZEROFILL 设置的显示宽度,如果不够宽度默认以0填充

insert into tableName(field1,field2....fieldN)values
(value1,value2,....valueN),
(value1,value2,....valueN),
(value1,value2,....valueN),
(value1,value2,....valueN),
(value1,value2,....valueN),
.....
(value1,value2,....valueN);



select 列名(*代表当前表中的所有列) from 表名


2. 修改
	1. update tableName set field1=value1,field2=value2,....fieldN=valueN [where condition]
	
	condition : 条件表达式结果返回为true的时候,当前行才会被修改

	update emp set dno = 20 where ename='admin'
	mysql> select * from emp;
	+-------+------------+---------+------+
	| ename | hiredate   | sal     | dno  |
	+-------+------------+---------+------+
	| 张三  | 2005-08-08 | 3000.00 |   10 |
	| admin | NULL       | 3000.00 |   20 |
	| wuyu  | NULL       | 3000.00 |   10 |
	+-------+------------+---------+------+
	3 rows in set (0.00 sec)

	mysql> update emp set sal=sal*1.2 where sal<3000;
	Query OK, 1 row affected (0.02 sec)
	Rows matched: 1  Changed: 1  Warnings: 0
	
	mysql> select * from emp;
	+-------+------------+---------+------+
	| ename | hiredate   | sal     | dno  |
	+-------+------------+---------+------+
	| 张三  | 2005-08-08 | 3000.00 |   10 |
	| admin | NULL       | 1800.00 |   20 |
	| wuyu  | NULL       | 3000.00 |   10 |
	+-------+------------+---------+------+
	3 rows in set (0.00 sec)

3. 删除	
	1. delete from tableName [where condition]

	mysql> select * from emp;
	+-------+----------+------+------+
	| ename | hiredate | sal  | dno  |
	+-------+----------+------+------+
	| admin | NULL     | NULL |   20 |
	| wuyu  | NULL     | NULL |   10 |
	+-------+----------+------+------+
	2 rows in set (0.00 sec)
	
	mysql> delete from emp where dno=10;
	Query OK, 1 row affected (0.01 sec)
	
	mysql> select * from emp;
	+-------+----------+------+------+
	| ename | hiredate | sal  | dno  |
	+-------+----------+------+------+
	| admin | NULL     | NULL |   20 |
	+-------+----------+------+------+
	1 row in set (0.00 sec)

	截断删除:
	truncate table 表名; 删除表中的所有数据
	delete from 表名;删除表中的所有数据
	
	delete是逐条删除
	truncate 删除数据段(效率高),把当前表之间删除,然后在创建一个新表
	
	create table emp like emp;
	删除表;		
	存储物理磁盘

	字符集 : 

	mysql> show variables like 'character%';
	+--------------------------+----------------------------------------------------
	-----------+
	| Variable_name            | Value
	           |
	+--------------------------+----------------------------------------------------
	-----------+
	| character_set_client     | gbk
	           |
	| character_set_connection | gbk
	           |
	| character_set_database   | gbk
	           |
	| character_set_filesystem | binary
	           |
	| character_set_results    | gbk
	           |
	| character_set_server     | gbk
	           |
	| character_set_system     | utf8
	           |
	| character_sets_dir       | C:\Program Files (x86)\MySQL\MySQL Server 5.0\share
	\charsets\ |
	+--------------------------+----------------------------------------------------
	-----------+
	8 rows in set (0.00 sec)


character_set_client  : 修改客户端的字符集
character_set_connection : 连接字符集
character_set_results : 查询的结果字符集


set character_set_client=utf8

Insert的特殊用法

表复制(包含结构和数据)
insert into 表名1 select * from 表名2;
insert into 表名1 select 列名1,列名2 from 表名2;
insert into 表名1 select * from 表名2 where id<10;



4. 查询记录
	select * from tableName [where condition]
	mysql> select * from emp;
	+-------+----------+------+------+
	| ename | hiredate | sal  | dno  |
	+-------+----------+------+------+
	| admin | NULL     | NULL |   20 |
	| admin | NULL     | NULL |   20 |
	| wuyu  | NULL     | NULL |   10 |
	| admin | NULL     | NULL |   20 |
	| wuyu  | NULL     | NULL |   10 |
	| admin | NULL     | NULL |   20 |
	| wuyu  | NULL     | NULL |   10 |
	| admin | NULL     | NULL |   20 |
	| wuyu  | NULL     | NULL |   10 |
	+-------+----------+------+------+
	9 rows in set (0.00 sec)
	
	mysql> select ename,dno from emp;
	+-------+------+
	| ename | dno  |
	+-------+------+
	| admin |   20 |
	| admin |   20 |
	| wuyu  |   10 |
	| admin |   20 |
	| wuyu  |   10 |
	| admin |   20 |
	| wuyu  |   10 |
	| admin |   20 |
	| wuyu  |   10 |
	+-------+------+
	9 rows in set (0.00 sec)

	
	查询不重复的记录?
	mysql> select distinct ename,dno from emp;
	+-------+------+
	| ename | dno  |
	+-------+------+
	| admin |   20 |
	| wuyu  |   10 |
	+-------+------+
	2 rows in set (0.00 sec)

	distinct : 将表中重复的记录去掉,然后显示出来
	
	条件查询,如果只需要显示一部分数据,可以使用where关键字处理
	mysql> select * from emp where dno = 10;
	+-------+----------+------+------+
	| ename | hiredate | sal  | dno  |
	+-------+----------+------+------+
	| wuyu  | NULL     | NULL |   10 |
	| wuyu  | NULL     | NULL |   10 |
	| wuyu  | NULL     | NULL |   10 |
	| wuyu  | NULL     | NULL |   10 |
	+-------+----------+------+------+
	4 rows in set (0.00 sec)
	
	where后面条件判断除了=,is,>,<,<=,>=,!=
	逻辑运算符 : and(&&),or(||)

	排序和限制

	insert into emp values('A','2017-08-09',158.5,10),
	('A','2017-08-09',158.5,10),
	('B','2018-08-09',1580.5,10),
	('C','2017-12-09',358.5,20),
	('D','2017-05-09',458.5,20),
	('E','2011-08-09',2258.5,10),
	('FA','2017-02-09',12158.5,10),
	('D','2017-09-09',22158.5,10);


	select * from tableName [where condition] [order by field1[desc|asc],field2[desc|asc]....]

	设置列的别名		 
	mysql> select ename 姓名,sal as 工资,dno '部门编号' from emp;
	+------+----------+----------+
	| 姓名 | 工资     | 部门编号 |
	+------+----------+----------+
	| A    |   158.50 |       10 |
	| A    |   158.50 |       10 |
	| B    |  1580.50 |       10 |
	| C    |   358.50 |       20 |
	| D    |   458.50 |       20 |
	| E    |   458.50 |       10 |
	| FA   | 12158.50 |       10 |
	| D    | 22158.50 |       10 |
	+------+----------+----------+
	8 rows in set (0.00 sec)
	表的别名(解决多表操作,列名重复的问题)
	mysql> select e.ename,e.sal from emp e;
	+-------+----------+
	| ename | sal      |
	+-------+----------+
	| A     |   158.50 |
	| A     |   158.50 |
	| B     |  1580.50 |
	| C     |   358.50 |
	| D     |   458.50 |
	| E     |   458.50 |
	| FA    | 12158.50 |
	| D     | 22158.50 |
	+-------+----------+
	8 rows in set (0.00 sec)

	查询结果可以和运算符组合使用

	select 列名1+固定值 from 表名;
	select 列名1+列名2 from表名;
	运算只能是数值类型.
	
	计算员工每年的总工资(显示姓名,每月工资,总工资)

	

	select ..... [limit offset_start,row_count]
	offset_start : 行起始的位置
	row_count : 显示的行数

	mysql> select * from emp order by sal limit 0,3;
	+-------+------------+--------+------+
	| ename | hiredate   | sal    | dno  |
	+-------+------------+--------+------+
	| A     | 2017-08-09 | 158.50 |   10 |
	| A     | 2017-08-09 | 158.50 |   10 |
	| C     | 2017-12-09 | 358.50 |   20 |
	+-------+------------+--------+------+
	3 rows in set (0.00 sec)

	in关键字 当前列在in的集合中存在的展示

	select .... where 列名1 in(集合)
	集合中的值以,号隔开.

	between...and : 在一个范围之内,包含头和尾的区间范围


	insert into emp values('A','2017-08-09',158.5,10),
	('张三','2017-08-09',158.5,10),
	('李四','2018-08-09',1580.5,10),
	('王五','2017-12-09',358.5,20),
	('王六','2017-05-09',458.5,20),
	('赵七','2011-08-09',2258.5,10),
	('赵五','2017-02-09',12158.5,10),
	('阿七七','2017-09-09',22158.5,10);

	like 模糊查询

	select ... 列名 like '%_'

	% : 任意长度的字符
	_ : 任意一个字符
	
	<>和!=都是不等


	where 
		为什么要条件查询?
			如果没有条件查询将会对整个表中的数据进行处理,实际应用中一般对某些数据进行处理,条件查询就是进行数据过滤.

		select 字段名 from 表名 wher 条件;
		delete... where 条件
		update ... where 条件
		比较运算符
		>,<.<=.>=,=,<>,!=
		>
		between...and	: 区间范围 查询
		in(集合)		包含查询
		like '_A%'	模糊查询
		is null : 判断当前列的值是否等于null

		逻辑运算符
		and
		or
		not
		!

复杂查询

	分组:
	  group by 分类聚合


	函数:
		sum(*):求和
		count(*) : 个数
		max(*) : 最大值
		min(*) : 最小值


		mysql> select count(1) from emp;
		+----------+
		| count(1) |
		+----------+
		|       16 |
		+----------+
		1 row in set (0.00 sec)



	编号		部门编号		group by 部门编号	10			20	
	1			10						1	10		3	20
	2			10						2	10		5	20
	3			20						4	10			
	4			10						6	10			
	5			20						7	10			
	6			10						
	7			10						


	显示部门平均工资大于3000的,展示部门编号,部门人数,平均工资


	写的顺序 : select.... from .. where ..group by ... having ..orderby
	执行顺序 : from...where..groupby..having..orderby

	##表连接
		当需要同时显示多个表中的字段时,就可以使用表连接来实现.
		内连接
			只会显示两张表中同时存在的数据.
		外连接
			右外连接 : 包含右边表中的所有记录,甚至左边表中不存在的记录.
			左外连接 : 包含左边表中的所有记录,甚至右边表中不存在的记录.
	部门表
	 dept ,deptno,dname
		
	
	mysql> select * from dept,emp where dno = deptno;
	+--------+--------+--------+------------+----------+------+
	| deptno | dname  | ename  | hiredate   | sal      | dno  |
	+--------+--------+--------+------------+----------+------+
	|     30 | 开发部 | A      | 2017-08-09 |   158.50 |   30 |
	|     30 | 开发部 | A      | 2017-08-09 |   158.50 |   30 |
	|     10 | 吃饭部 | B      | 2018-08-09 |  1580.50 |   10 |
	|     20 | 嘚瑟部 | C      | 2017-12-09 |   358.50 |   20 |
	|     10 | 吃饭部 | E      | 2011-08-09 |   458.50 |   10 |
	|     10 | 吃饭部 | FA     | 2017-02-09 | 12158.50 |   10 |
	|     30 | 开发部 | A      | 2017-08-09 |   158.50 |   30 |
	|     10 | 吃饭部 | 张三   | 2017-08-09 |   158.50 |   10 |
	|     10 | 吃饭部 | 李四   | 2018-08-09 |  1580.50 |   10 |
	|     20 | 嘚瑟部 | 王五   | 2017-12-09 |   358.50 |   20 |
	|     20 | 嘚瑟部 | 王六   | 2017-05-09 |   458.50 |   20 |
	|     10 | 吃饭部 | 赵七   | 2011-08-09 |  2258.50 |   10 |
	|     10 | 吃饭部 | 赵五   | 2017-02-09 | 12158.50 |   10 |
	|     10 | 吃饭部 | 阿七七 | 2017-09-09 | 22158.50 |   10 |
	+--------+--------+--------+------------+----------+------+
	
	mysql> select * from emp left join dept on deptno = dno;
	+--------+------------+----------+------+--------+--------+
	| ename  | hiredate   | sal      | dno  | deptno | dname  |
	+--------+------------+----------+------+--------+--------+
	| A      | 2017-08-09 |   158.50 |   30 |     30 | 开发部 |
	| A      | 2017-08-09 |   158.50 |   30 |     30 | 开发部 |
	| B      | 2018-08-09 |  1580.50 |   10 |     10 | 吃饭部 |
	| C      | 2017-12-09 |   358.50 |   20 |     20 | 嘚瑟部 |
	| D      | 2017-05-09 |   458.50 | NULL |   NULL | NULL   |
	| E      | 2011-08-09 |   458.50 |   10 |     10 | 吃饭部 |
	| FA     | 2017-02-09 | 12158.50 |   10 |     10 | 吃饭部 |
	| D      | 2017-09-09 | 22158.50 | NULL |   NULL | NULL   |
	| A      | 2017-08-09 |   158.50 |   30 |     30 | 开发部 |
	| 张三   | 2017-08-09 |   158.50 |   10 |     10 | 吃饭部 |
	| 李四   | 2018-08-09 |  1580.50 |   10 |     10 | 吃饭部 |
	| 王五   | 2017-12-09 |   358.50 |   20 |     20 | 嘚瑟部 |
	| 王六   | 2017-05-09 |   458.50 |   20 |     20 | 嘚瑟部 |
	| 赵七   | 2011-08-09 |  2258.50 |   10 |     10 | 吃饭部 |
	| 赵五   | 2017-02-09 | 12158.50 |   10 |     10 | 吃饭部 |
	| 阿七七 | 2017-09-09 | 22158.50 |   10 |     10 | 吃饭部 |
	+--------+------------+----------+------+--------+--------+
	16 rows in set (0.00 sec)
				

		
	mysql> select * from emp right join dept on deptno = dno;
	+--------+------------+----------+------+--------+--------+
	| ename  | hiredate   | sal      | dno  | deptno | dname  |
	+--------+------------+----------+------+--------+--------+
	| B      | 2018-08-09 |  1580.50 |   10 |     10 | 吃饭部 |
	| E      | 2011-08-09 |   458.50 |   10 |     10 | 吃饭部 |
	| FA     | 2017-02-09 | 12158.50 |   10 |     10 | 吃饭部 |
	| 张三   | 2017-08-09 |   158.50 |   10 |     10 | 吃饭部 |
	| 李四   | 2018-08-09 |  1580.50 |   10 |     10 | 吃饭部 |
	| 赵七   | 2011-08-09 |  2258.50 |   10 |     10 | 吃饭部 |
	| 赵五   | 2017-02-09 | 12158.50 |   10 |     10 | 吃饭部 |
	| 阿七七 | 2017-09-09 | 22158.50 |   10 |     10 | 吃饭部 |
	| C      | 2017-12-09 |   358.50 |   20 |     20 | 嘚瑟部 |
	| 王五   | 2017-12-09 |   358.50 |   20 |     20 | 嘚瑟部 |
	| 王六   | 2017-05-09 |   458.50 |   20 |     20 | 嘚瑟部 |
	| A      | 2017-08-09 |   158.50 |   30 |     30 | 开发部 |
	| A      | 2017-08-09 |   158.50 |   30 |     30 | 开发部 |
	| A      | 2017-08-09 |   158.50 |   30 |     30 | 开发部 |
	| NULL   | NULL       |     NULL | NULL |     40 | 无聊部 |
	+--------+------------+----------+------+--------+--------+
	15 rows in set (0.00 sec)

	子查询
		当查询的时候,需要的条件是另外一个select语句的结果,这个时候就需要使用子查询,
		用于子查询的关键字:
			in,not in,=,!=,exists,not exists

	显示部门平均工资大于1000的部门信息(部门编号和部门名称)
		
	mysql> select * from dept where deptno in(select dno from emp where dno is not n
	ull group by dno having avg(sal)>1000);
	+--------+--------+
	| deptno | dname  |
	+--------+--------+
	|     10 | 吃饭部 |
	+--------+--------+
	1 row in set (0.00 sec)

DCL

DCL语句主要是DBA用来管理系统对象的权限.


1. 创建用户
	1. create user 'username'@'host' identified by 'password';
		1. username : 你将 创建的用户名
		2. host : 指当前用户在那个主机上面可以登录,如果本地用户可用localhost/127.0.0.1,如果想让任意主机访问,可以使用通配符 '%'
		3. password : 用户的登陆密码,可以为空

create user 'wuyu'@'%' identified by '123456'
create user 'pig'@'127.0.0.1' identified by '123456'
create user 'pig'@'localhost' identified by '123456'
create user 'pig'@'10.1.6.54' identified by '123456'

2. 授权
	1. grant privileges on databaseName.tableName to 'username'@'host'
		privileges : 用户操作权限, select,insert,update等,如果需要授权所有权限 all
		databaseName : 数据库名称
		tableName : 表名,如果授予该用户对某个数据库和表的响应操作,如果所有库和所有表 *.*

	grant select,insert on hnkj.* to 'wuyu'@'localhost'
	grant all on hnkj.dept to 'wuyu'@'%'
	grant all on *.* to 'wuyu'@'%'

	grant all on *.* to 'wuyu'@'%' with grant option;

3. 设置修改密码
	1. 为当前用户设置密码
	2. set password=password('root');
	3. 为其他用户设置密码
	4.  set password for 'wuyu'@'localhost'=password('123546');

4. 删除用户
	1. drop user 'wuyu'@'localhost'
5. 撤销权限
	1. revoke select on *.* from 'wuyu'@'localhost'



##MYSQL 导入导出SQL文件

	1. 导出数据库
		1. mysqldump -u用户名 -p密码 数据库名 表名 > 导出文件的名称
		
	2. 导入数据库(先创建数据库)
		1. mysql -uroot -proot 数据库 < sql文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值