关系数据库
基于关系模型的数据库系统
关系模型数据结构使用简单易懂的二维数据表
关系模型可用简单的“实体-关系”表示
实体 关系 属性 三要素

实体:也称实例,对应现实世界中可区别于其他对象的“事件”或“事物”
属性:实体所具有的某一特性,一个实体可以有多个属性
联系:实体集之间的对应关系称为联系,也成为关系

非关系数据库
也成为nosql
存储数据不以关系模型为依据,不需要固定格式
非关系模型数据库优点:
  数据库可以高并发读写
  对海量数据高效存储访问
  对数据库具有高扩展性与高可用性

——————————————————————————————
mysql介绍
一款深受欢迎的开源关系数据库
Oracle旗下的产品
遵守GPL协议,可以免费使用与修改
特点:
  性能卓越、服务稳定
  开源、无版权限制、成本低
  多线程、多用户
  基于CS(客户端 服务器)架构
 安全可靠

——————————————————
mysql远程连接
创建了一个bbs数据库
CREATE DATABASE bbs;
远程授权(all读写都可以,select只读)

GRANT all ON bbs.* TO 'bbsadm'@'%' IDENTIFIED BY 'admin123';


本地授权

GRANT all ON bbs.* TO 'bbsadm'@'localhost' IDENTIFIED BY 'admin123';
 flush privileges;


然后使用软件登录就行
——————————————————
mysql数据库管理
SQL语言
Structured Query Language缩写,即结构化查询语言
关系型数据库标准语言
用于维护管理数据库
  包括数据查询、数据更新、访问控制、对象管理功能
SQL分类
DDL:数据定义语言
DML:数据操纵语言
DQL:数据查询语言
DCL:数据控制语言

创建数据库
create database 数据库名

mysql> create database auth1;
 Query OK, 1 row affected (0.00 sec)


创建数据表
create table 表明 (字段定义......)
进入数据库auth1
use auth1
创建users1表第一个字段(属性)username16字符不能为空,第二字段(属性)user_passwd48字符不能为空,指定user_name开头删除username开头就是删掉一整行

mysql> create table users1 (user_name char(16) not null,user_passwd char(48) default'',primary key (user_name));

查看数据库信息
使用root账户进入mysql数据库
mysql -uroot -p
大部分sql需要以;结尾

mysql> show databases;
 mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | aimin              |
 | auth               |
 | mysql              |
 | performance_schema |
 | sys                |
 | xiaoqi             |
 +--------------------+
 7 rows in set (0.00 sec)

查看数据库表信息
数据库
use mysql;
查看表

show tables;
 +---------------------------+
 | Tables_in_mysql           |
 +---------------------------+
 | columns_priv              |
 | db                              |
 | engine_cost               |
 | event                         |
 | func                            |
 | general_log               |
 | gtid_executed             |
 | help_category             |
 | help_keyword              |
 --------------------------

显示数据表节构
describe 【数据库名.】表名(可以使用desc代替)

mysql> describe user;
 +------------------------+-----------------------------------+------+-----+-----------------------+-------+
 | Field                  | Type                              | Null | Key | Default               | Extra |
 +------------------------+-----------------------------------+------+-----+-----------------------+-------+
 | Host                   | char(60)                          | NO   | PRI |                       |       |
 | User                   | char(32)                          | NO   | PRI |                       |       |————————————————————


DML语句用于对表中数据进行管理
包括的操作
 INSERT:插入新数据
 UPDATE:更新原有数据
 DELETE:删除不需要的数据
向数据表中插入新的数据记录
INSERT INTO 表明(字段1,字段2,....)
  VALUES(字段1的值,字段2的值,....)
进入auth库
use auth
插入到users表中后面的属性对应
mysql> insert into users(user_name,user_passwd)
         插入属性的具体描述;
   

-> values('zhangsan',password('123456'));
 Query OK, 1 row affected, 1 warning (0.01 sec)

修改、更新数据表中数据记录
UPDATE 表名 SET 字段名1(属性)=值1【字段名2=值2】 WHERE 条件表达式
修改lisi账户里面字段user_password为空值
mysql> update auth.users set user_passwd=password('') where user_name='lisi';
通过直接修改数据库方式实现修改数据库管理员密码
mysql> update mysql.user set authentication_string=password('1234567') where user='root'

表中删除指定数据记录
DELETE FROM 表名 WHERE 条件表达式
mysql> delete from auth.users where user_name='lisi';
*不带where条件语句删除所有记录(高危命令)
delete from auth.users;

————————————————————————
管理表中数据
DQL是数据查询语句,只有SELECT
用于从数据表中查询符合条件的记录
查询时可不指定条件
SELECT 字段名1(属性1),字段名2.....FROM 表名
查看auth库中users表中所有内容

mysql> select * from auth.users;
 +-----------+-------------------------------------------+
 | user_name | user_passwd                               |
 +-----------+-------------------------------------------+
 | zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

查询时指定条件
SELECT 字段名1(属性1),字段名2... FROM 表名 WHERE 条件表达式(where)
查找auth库中users表中zhangsan两个属性的信息

mysql> select user_name,user_passwd from auth.users where user_name='zhangsan';
 +-----------+-------------------------------------------+
 | user_name | user_passwd                               |
 +-----------+-------------------------------------------+
 | zhangsan  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
 +-----------+-------------------------------------------————————————————————————


用户授权
DCL语句色湖之用户权限(用户不存在时,则新建用户)
GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址
      【 IDENTIFIED BY '密码' 】
设置权限列表给来自localhost的用户xiaoqi权限

mysql> grant select on auth.* to 'xiaoqi'@'localhost' identified


设置密码
 

-> by '123456';
 mysql> show grants for xiaoqi@localhost;
 +--------------------------------------------------+
 | Grants for xiaoqi@localhost                      |
 +--------------------------------------------------+
 | GRANT USAGE ON *.* TO 'xiaoqi'@'localhost'       |
 | GRANT SELECT ON "auth".* TO 'xiaoqi'@'localhost' |
 +--------------------------------------------------+

撤销用户权限

mysql> revoke all on auth.* from 'xiaoqi'@'localhost';
————————————————————————


数据表高级操作

清空表
清空一个数据表就是删除这个表内的所有数据。前面的小节已经学习过DELETE
FROM语句,可以删除表内的数据,除此之外还可以使用TRUNCATE TABLE语句实现清
空表内记录。DELETE FROM语句可以使用WHERE子句对删除的结果集进行过滤选择,
这样更方便、更灵活。TRUNCATE TABLE语句是删除表中所有记录数据,没法定制,灵活
性上稍差。清空表的具体操作如下所示。
use auth;    ###进入auth数据库中

create table ky (user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT '',level CHAR(16) NOT NULL,PRIMARY KEY (user_name)); 
 ###创建ky表
 insert into ky values('list',password('123456'),10);     
 insert into ky values('list2',password('123456'),45);
 insert into ky values('list3',password('123456'),56);
 insert into ky values('list4',password('123456'),55);
 insert into ky values('list5',password('123456'),88);
 #####上面几个是往ky表中写入数据
 show tables;   查看当前用户
 create table tm like ky;                     通过like方式,复制ky表生成tm表
 insert into tm select * from ky;         通过ky表生成tmp表内数据记录
 delete from tm;                                  清空tm表中的信息insert into tm select * from ky;       通过ky表生成tmp表内数据记录
 truncate table tm;                            清空tm表中的信息  
 select * from tm;                              查看tm表中所有的信息,这边显示没有
 select count(*) from tm;

     

2.临时表
MySQL的临时表,顾名思义,就是临时建立的表,并不会长期存在,主要用于保存一些临时数据。临时表有个特性,
就是只在当前连接可见,当前连接下可执行增删改查等操作,当连接被关闭后,临时表就会被MysQL删除,相关的资源也会被释放。
下面创建临时表mytmp,然后插入数据,之后断开当前连接,最后重新连到MySQL查看临时是否还存在,具体操作如下

use auth;    ###进入auth数据库中
 CREATE TEMPORARY TABLE `mytm23` (`id` int(10) NOT NULL AUTO_INCREMENT,`NAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `level` int(10) NOT NULL,PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 insert into mytm(NAME,level) values('aa',10);
 #####创建mytm23临时表  
 nsert into mytm23(NAME,level) values('aa',10); ##往mytm23临时表写入信息
 select * from mytm23;   ##查看mytm23临时表的信息


退出数据库,再次进入,这个临时表的信息就没有了

3.克隆表
在MySQL的开发和维护过程中,会有原样拷贝某个数据表的需求。怎么样才能够快速、
完整的拷贝数据表呢?先来看一下CREATE TABLE new_tablename AS SELECT这个语
句,具体实现的 SQL语句如下所示。
第一种方式   like方式复制表结构,不复制数据

create table tm like ky;                    ## 通过like方式,复制ky表生成tm表
 show create table tm\G                   ##查看tm表的结构
 insert into tm select * from ky;         ##通过ky表生成tmp表内数据记录

方法二:通过创建表的方式克隆表
首先,使用SHOW CREATE TABLE命令来获取源表的表结构、索引等信息。
其次,复制源表结构并修改表名为目标名字,然后执行创建新表的语句。通过这步操作,
就可以获得一个和源表结构一样的克隆表了。
最后,执行INSERTINTO...SELECT语句,从源表复制数据到新表内。

create table `test` (
 `id` int(10) not null auto_increment,
 `name` varchar(32) character set utf8 collate utf8_bin not null,
 `level` int(10) not null,
 primary key (id)
 ) engine=Innodb default charset=utf8;
 ###改名后创建新表
 insert into test select * from mytmp;   导入原表数据