关系数据库
基于关系模型的数据库系统
关系模型数据结构使用简单易懂的二维数据表
关系模型可用简单的“实体-关系”表示
实体 关系 属性 三要素
实体:也称实例,对应现实世界中可区别于其他对象的“事件”或“事物”
属性:实体所具有的某一特性,一个实体可以有多个属性
联系:实体集之间的对应关系称为联系,也成为关系
非关系数据库
也成为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; 导入原表数据