什么是MySQL数据库?看这一篇干货文章就够了!
前言
为啥学习MySQL
呢?因为MySQL
是最流行的关系型数据库管理系统之一,在web
应用方面,MySQL
是最好的软件。MySQL
所使用的sql
语言是用于访问数据库的最常用标准化语言。
放心,读这期内容的朋友们都适合:网站开发,软件开发或者爱好者。
1.MySQL的入门
什么是数据库呢?
- 数据库,它是按照数据结构来组织,存储和管理数据的仓库。
- 数据库管理系统, 指数据库系统中对数据进行管理的软件系统。
让我来整理一张思维导图:
细节掌握:
- 安装配置,常用命令,操作数据库;
- 整型与浮点型,日期时间型与字符型;
- 创建与查看数据库表,修改数据库表,删除数据库表;
- 非空约束,主键约束,唯一约束,默认约束,外键约束;
- 管理工具:
MySQL Workbench,SQLyog
; - 单表数据记录的插入与自动编号,单表数据记录的更新,单表数据记录的删除,单表数据记录的查询,对查询结果进行分组,对查询结果进行排序,通过limit语句限制查询记录的数量;
- mysql的运算符,数值函数,字符函数,日期时间函数,聚合函数,信息函数与加密函数;
- 使用比较运算符引发的子查询,插入记录时使用的子查询
- 多表连接,内连接,外连接,自连接,多表更新,多表删除
- 创建,使用自定义函数
- 创建存储过程,使用存储过程
mysql官网:
安装包下载:(安装操作)
点击安装:
产品配置的操作:
打开服务框用win+r
,输入services.msc
2. mysql目录结构
bin
目录:用于存储一些可执行文件include
目录:用于存储包含的一些头文件lib
目录:用于存储一些库文件share
目录:用于存储错误信息,字符集文件等data
目录:用于放置一些日志文件以及数据库my.ini
文件:数据库的配置文件
启动与停止:
mysql
参数:
参数 | 描述 |
---|---|
-u |
用户名 |
-p |
密码 |
-V |
输出版本信息并且退出 |
-h |
主机地址 |
3.常用命令
修改用户密码的命令:
1 | mysqladmin 命令用于修改用户密码 |
显示数据库的命令
1 | show databases; |
使用数据库的命令
1 | use 数据库的名称 |
显示当前连接的信息
- 显示当前连接的数据库:
select database();
- 显示当前服务器版本:
select version();
- 显示当前日期时间:
select now();
- 显示当前用户:
select user();
4.操作数据库(创建,修改,删除)
创建数据库SQL
:
1 | create database [if not exists] db_name |
1 | create database database_name; |
修改数据库的语法格式:
1 | alter database db_name |
删除数据库语法格式:
1 | drop database [if exitsts] db_name; |
5.数据库-数据类型
了解数据类型:(借助图书管理系统)
图书类别表:
1 | 类别编号(category_id) 类别名称(category) 父类别(parent_id) |
图书信息表:
1 | 图书编号(book_id) 类别编号(book_category_id) 书名(book_name) 作者(author) 价格(price) 出版社(press) 出版时间(pubdate) 库存(store) |
借阅信息表:
1 | 图书编号(book_id) 身份证号(card_id) 借出日期(borrow_date) 归还日期(return_date) 是否归还(status) |
读者信息表
1 | 身份证号(card_id) 姓名(name) 性别(sex) 年龄(age) 联系电话(tel) 余额(balance) |
数据类型:
整型:TINYINT
-1字节 SMALLINT
-2字节 MEDIUMINT
-3字节 INT
-4字节 BIGINT
-8字节
浮点数类型和定点数类型:
1 | float-4个字节 |
日期时间类型:
字符型:
6.数据库表结构的操作
- 创建和查看数据表
1 | 创建数据表:create table |
- 查看数据库表:
1 | show tables [from db_name]; |
- 查看数据表基本结构:
1 | show columns from tbl_name; |
1 | show create table tbl_name; |
- 修改数据库表
添加列:
1 | alter table <表名> |
修改列名:
1 | alter table <表名> |
修改列的数据类型:
1 | alter table <表名> MODIFY <列名> <数据类型> |
修改列的排列位置
1 | alter table<表名> |
删除列:
1 | alter table <表名> drop <列名>; |
修改表名:
1 | alter table <旧表名> RENAME [TO] <新表名>; |
- 删除数据库表
1 | drop table [if exists] 表1,表2,...表n; |
查看表分区
创建表分区:使用partition by
类型(字段)
使用values less than
操作符定义分区
1 | create table bookinfo( |
7.子查询
1 | select price from bookinfo where book_id = 20101010; |
什么是子查询呢?
它是指嵌套在其他sql
语句内的查询语句。
1 | select * from table1 where col1 = (select col2 from table2); |
1 | insert into bookcategory(category,parent_id)values('x',2),('y',2); |
查询借阅信息表, 显示借 xx这本书的借阅记录
1 | select * from borrowinfo where book_id = (select book_id from bookinfo where book_name = 'xx'); |
查询图书信息表, 显示图书价格小于图书平均价格的所有图书信息
1 | select * from bookinfo where price < (select round(avg(price),2) from bookinfo); |
查询图书信息表,显示图书类别不是’数据库’的所有图书信息
1 | select * from bookinfo where book_category_id<>(select category_id from bookcategory where category = '数据库'); |
查询图书信息表,显示图书类别为’计算机’的所有图书信息
1 | select * from bookcategory; |
查询图书信息表,显示图书类别为’2’的所有图书信息
1 | in 后面的子查询返回一个数据列,等于数据列里的任意一个值都是满足条件的 |
查看图书类别表中是否有’y’的类别,如果有,则查看图书信息表
1 | select * from bookinfo where exists (select category_id from bookcategory where category='y'); |
insert into select
语句从一个表复制数据,然后把数据插入到一个已存在的表中。
1 | insert into table2 select * from table1; |
需要创建一张罚款记录信息表,包含如下信息:图书编号、身份证号、应还日期、实际还书日期,罚款金额
记录来源于借阅信息表超出还书时间还未还书的读者
1 | create table readerfee( |
身份证号为5461xxxxxxx的读者将超限的图书20201101归还,根据描述实现如下需求:
- 更新借阅信息表,将借阅状态(status)更新为‘是’。
- 更新罚款记录信息表,更新实际还书日期和罚款金额,罚款金额为每超出一天扣0.2元。
1 | update borrowinfo set status = '是' where book_id = 20201101 and card_id = '5461xxxxxxx'; |
8.mysql的约束
它事一种限制,通过对表的行或列的数据做出限制,来确保表的数据的完整性,唯一性。
表结构:
图书(图书编号book_id
,类别编号book_category_id
,书名book_name
,作者author
)
在mysql
中常用的几种约束类型:
约束类型 | 非空约束 | 主键约束 | 唯一约束 | 默认约束 | 外键约束 |
---|---|---|---|---|---|
关键字 | not null |
primary key |
unique |
default |
foreign key |
图书信息表:
(图书编号book_id
,类别编号book_category_id
,书名book_name
,作者author
,价格price
,出版社press
,出版时间pubdate
,库存store
)
图书类别表:
(类别编号category_id
- 主键,类别名称category
- 唯一,父类别parent_id
-非空)
读者信息表:
(身份证号card_id
,姓名name
,性别sex
,年龄age
,联系电话tel
,余额balance
)
借阅信息表:
(图书编号book_id
,身份证号card_id
,借出日期borrow_date
,归还日期return_date
,是否归还status
)
非空约束
null
字段值可以为空
not null
字段值禁止为空
非空约束
非空约束指字段的值不能为空。对于使用了非空约束的字段如果用户在添加数据时,没有指定值,数据库系统会报错。
1 | 列名 数据类型 not null |
创建表时添加非空约束
1 | create table bookinfo( |
删除非空约束
1 | alter table bookinfo modify book_name varchar(20); |
通过修改表添加非空约束
1 | alter table bookinfo modify book_name varchar(20) not null; |
主键约束
主键约束:要求主键列的数据唯一,并且不允许为空,主键能够唯一地标识表中的一条记录。
主键的类型:
主键分为单字段主键和多字段联合主键
单字段主键:是由一个字段组成
1 | 在定义列的同时指定主键 |
创建表时添加主键约束
1 | create table bookinfo( |
1 | create table bookinfo( |
删除主键约束
1 | ALTER TABLE bookinfo DROP PRIMARY KEY; |
通过修改表的方式添加主键约束
1 | ALTER TABLE bookinfo ADD PRIMARY KEY(book_id); |
多字段联合主键,复合主键
主键有多个字段联合组成。primary key(字段1,字段2,...字段n);
1 | create table borrowinfo( |
通过修改表为列添加主键
1 | create table bookinfo( |
唯一约束
唯一约束要求该列唯一,允许为空,唯一约束可以确保一列或者几列不出现重复值。
语法规则:
1 | 列名 数据类型 unique |
创建表时添加唯一约束
1 | CREATE TABLE bookinfo( |
通过修改表的方式添加唯一约束
1 | alter table bookinfo modify book_name varchar(20) unique; |
删除唯一约束
1 | ALTER TABLE book_info DROP KEY uk_bname; |
唯一约束和主键约束的区别
- 一个表中可以有多个
unique
声明,但只能有一个primary key
声明 - 声明为
primary key
的列不允许有空值 - 声明为
unique
的列允许空值
默认约束
默认约束是指某列的默认值
1 | 列名 数据类型 default 默认值 |
创建表时添加默认约束
1 | CREATE TABLE bookinfo( |
通过修改表的方式添加默认约束
1 | ALTER TABLE bookinfo |
删除默认约束
1 | alter table bookinfo modify press varchar(20); |
外键约束
外键是用来在两个表的数据之间建立链接,可以是一列或者多列,一个表可以有一个或者多个外键。
外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键必须等于另一个表中主键的某个值。
作用:保持数据的一致性,完整性。
创建表时添加外键约束
1 | 图书类别表(父表) |
通过修改表的方式添加外键约束
1 | ALTER TABLE bookinfo |
删除外键约束
1 | ALTER TABLE bookinfo DROP FOREIGN KEY fk_cid; |
外键约束的参照操作
cascade
,从父表删除或更新且自动删除或更新子表中匹配的行
1 | create table bookinfo( |
创建图书管理系统表
图书类别表
1 | create table bookcategory( |
图书信息表
1 | create table bookinfo( |
读者信息表
1 | create table readerinfo( |
借阅信息表
1 | create table borrowinfo( |
9.数据库表记录的操作
单表数据记录的插入
语法格式:
1 | insert into table_name(column_list) values(value_list); |
为表的所有列插入数据
1 | insert into bookcategory |
为表的指定列插入数据
1 | insert into readerinfo |
同时插入多条记录
1 | insert into bookcategory(category_id,category,parent_id)values(3,'x',1),(4,'y',1),(5,'z',2); |
将查询结果插入的表中
1 | insert into bookcategory select * from test where id>5; |
自动增加
设置表的属性值自动增加:
1 | 列名 数据类型 auto_increment |
创建表时添加自增列
1 | create table bookcategory_tmp( |
测试自增列
1 | insert into bookcategory_tmp(category,parent_id)values('dadaqianduan',0); |
去掉自增列
1 | alter table bookcategory_tmp modify category_id int; |
添加自增列
1 | alter table bookcategory_tmp modify category_id int auto_increment; |
修改自增列的起始值
1 | alter table bookcategory_tmp auto_increment = 15; |
删除图书信息表的外键
1 | alter table bookinfo drop foreign key fk_bcid; |
为图书类别表添加自动编号的功能
1 | alter table bookcategory modify category_id int auto_increment; |
恢复关联
1 | alter table bookinfo add constraint fk_bcid foreign key(book_category_id)references bookcategory(category_id); |
单表数据记录的更新
向借阅信息表插入一条借阅信息
1 | insert into borrowinfo(book_id,card_id,borrow_date,return_date,status)values(20202010,46516874,'2020-11-29','2020-12-29','否'); |
更新读者信息表中的余额
1 | 查看书的价格 79.80 |
更新余额
1 | update readerinfo set balance = balance - 79.80*0.05 where card_id = '46516874'; |
更新图书信息表的库存
1 | update bookinfo set store = store -1 where book_id = 20150201; |
单表数据记录的删除
删除指定条件的记录
1 | delete from readerinfo where card_id = '46461265464565'; |
删除表中所有记录
1 | delete from readerinfo; |
想要删除表中的所有记录,可以使用truncate table
语句,truncate
将直接删除原来的表,并重新创建一个表,其语法结构:
1 | truncate table table_name |
查询儿科学的类别编号
1 | select category_id from bookcategory where category='儿科学'; |
删除图书编号为5的图书信息
1 | delete from bookinfo where book_category_id = 5; |
删除图书类别表中儿科学这个类别
1 | delete from bookcategory where category = '儿科学'; |
单表数据记录的查询
查询所有列
1 | select * from bookcategory; |
查询指定列
1 | select category from bookcategory; |
查询指定条件的记录
1 | select book_id,book_name,price from bookinfo where press='出版社'; |
查询结果不重复的记录
1 | select distinct press from bookinfo; |
查看空值
1 | select * from readerinfo where age is null; |
分组
统计读者信息表中男读者的人数
1 | select count(*) from readerinfo where sex='男'; |
将读者信息表中的记录按性别进行分组
1 | select sex from readerinfo group by sex; |
将读者信息表中的记录按性别进行分组,并统计每种性别的人数
1 | select sex,count(*) from readerinfo group by sex; |
将读者信息表中的记录按性别进行分组,分组后人数大于的性别
1 | select sex from readerinfo group by sex having count(sex)>2; |
排序
通过order by子句对查询的结果进行排序
1 | order by 列名 [asc|desc] |
排序方向:
- 排序分为升序和降序,默认为升序
- 升序
asc
- 降序
desc
单列排序
1 | select * from bookinfo order by price; |
多列排序
1 | select * from bookinfo order by price,store; |
指定排序方向
1 | select * from bookinfo order by price,store desc; |
limit语句限制查询记录的数量
前3行记录
1 | select * from bookinfo limit 3; |
从第3条记录开始的后2条记录
1 | select * from bookinfo limit 2,2; |
1 | insert into bookinfo(book_id,book_category_id,book_name,author,price,press,pubdate,store) |
将图书信息按照库存进行分组,统计每组库存下的个数,然后按库存进行降序排序,并查看结果中的前四条记录
1 | select store,count(*)from bookinfo |
10.运算符与函数
MySQL 主要有以下几种运算符:
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
算术运算符
比较运算符
逻辑运算符
位运算符
运算符优先级
读者的身份证号,姓名,电话,余额。
1 | select card_id, name, tel, balance from readerinfo where balance-200<=0; |
查看读者信息表中,余额大于200的读者信息。
1 | select * from readerinfo where balance>200; |
查看读者信息表中,余额不等于200的读者信息。
1 | select * from readerinfo where balance <> 200; |
查看读者信息表中,年龄不为空的读者信息。
1 | select * from readerinfo where age is not null; |
查看读者信息表中,余额在350到450之间的读者信息。
1 | select * from readerinfo where balance between 350 and 450; |
1 | select * from readerinfo where name in('dada','dada1','dada2'); |
数值函数
ceil返回大于x的最小整数值
1 | select ceil(28.55); // 29 |
floor返回小于x的最大整数值
1 | select floor(28.55); // 28 |
四舍五入
round返回最接近于参数x的整数,对参数x进行四舍五入
1 | select round(28.55); // 29 |
截断函数
1 | select truncate(28.55,1),truncate(28.55,0),truncate(28.55,-1); |
取模,返回x被y除后的余数
1 | select mod(11,2); // 1 |
1 | select book_id,book_name,price, round(price) from bookinfo; |
字符函数
字符串连接
1 | select concat('hello','world'); |
字母转换大小写
1 | select lower('Hello World'); |
求长度
1 | select length(' hello '); |
删除空格
1 | select ltrim(' hello '),length(ltrim(' hello ')); |
截取字符串
1 | select substring('hello world',1,5); |
获取指定长度的字符串
1 | select left('hello world', 5); // hello |
替换函数
1 | select replace('hello world','world','mysql'); // hello mysql |
格式化函数
1 | select format(1234.5678,2),format(1234.5,2),format(1234.5678,0); |
日期和时间函数
查看当前的系统日期
1 | select curdate(); |
1 | select curdate()+0; |
查看当前的系统日期和时间
1 | select now(); // 2020-10-10 12:12:12 |
date_add(date,interval expr type):
year,month,day,week,hour
1 | 日期的加运算 |
聚合函数(分组函数)
| 名称 | 描述 |
| avg()
| 返回某列的平均值 |
| count()
| 返回某列的行数 |
| max()
| 返回某列的最大值 |
| min()
| 返回某列的最小值 |
| sum()
| 返回某列值的和 |
求图书信息表中,所有图书的平均价格。
1 | select avg(price) from bookinfo; |
求图书信息表中,所有图书的总价格。
1 | select sum(price) from bookinfo; |
求图书信息表中的最大库存。
1 | select max(store) from bookinfo; |
求图书信息表中的最小库存。
1 | select min(store) from bookinfo; |
求图书信息表中有多少种图书。
1 | select count(*) from bookinfo; |
按类别进行分组, 查询每种类别下有多少种图书以及每种类别图书的库存总和。
1 | select book_category_id as '图书类别',count(book_id) as '图书种类', sum(store) as '库存总和' from bookinfo group by book_category_id; |
信息函数与加密函数
系统信息函数
1 | 查看当前MySQL服务器版本的版本号 |
加密函数
1 | select md5('test'); |
11.多表连接查询
多表连接查询是从多个表中获取数据。
由图书信息表:(图书编号book_id
,类别编号book_category_id
,书名book_name
)
由图书类别表:(类别编号category_id
,类别名称category
,父类别parent_id
)
获取表:(图书编号book_id
,书名book_name
,类别名称category
)
多表连接的语法结构:
1 | table_reference |
多表连接
通过查看图书信息表和图书类别表
来获取图书编号、图书名称、图书类别
1 | select book_id,book_name,category from bookinfo inner join bookcategory on bookinfo.book_category_id = bookcategory.category_id; |
内连接
根据连接条件从多个表中查询选择数据,显示这些表中与连接条件相匹配的数据行,组合成新记录。(内连接就是两者共同都有的)
内连接的语法结构:
1 | select column_list |
由于图书借阅统计的需要,想查询未归还图书的图书编号,图书名称,身份证号,姓名,电话,归还日期, 是否归还。
1 | select borrowinfo.book_id,book_name,borrowinfo.card_id, name, tel, return_date, status from borrowinfo |
外连接
外连接将查询多个表中相关联的行。
外连接分为:左外连接 left outer join
;右外连接right outer join
根据业务需要,我们需要查看图书类别表中的所有类别下都有哪些图书。
1 | select book_id, book_name, category from bookcategory |
左外连接:显示左表全部记录,右表满足连接条件的记录。
右外连接:显示右表全部记录,左表满足连接条件的记录。
语法结构:
1 | select column_list |
自连接
如果在一个连接查询中,涉及的两个表都是同一个表,这种查询称为自连接
查询所有图书类别的图书类别编号,类别名称,上级分类名称。
1 | select * from bookcategory; |
多表更新
1 | update |
身份证号为432xxxxxx的读者将超时的图书86154归还,根据描述实现如下需求:
- 更新借阅信息表,将借阅状态(status)更新为‘是’。
- 更新罚款记录信息表,更新实际还书日期和罚款金额,罚款金额为每超出一天扣0.2元。
- 同时更新读者信息表的余额。(在余额中扣除罚款金额)
1 | update readerfee t1 join readerinfo t2 on t1.card_id = t2.card_id |
多表删除
1 | delete table1[.*], table2[.*] |
图书类别表,图书信息表:
由于业务需求,需要删除图书类别表中在图书信息表中没有图书记录的类别。
1 | select book_id,book_name,category from bookcategory_bak t1 |
需要删除图书类别表的编程语言的类别,以及图书信息表中关于编程语言的图书记录。
1 | select book_id,book_name,category_id,category from bookcategory_bak t1 |
多表连接
根据连接查询返回的结果:内连接(inner join),外连接(outer join),交叉连接(cross join)。
根据连接条件所使用的操作符:相等连接,不等连接。
12.自定义函数
创建函数
1 | CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型 |
调用函数
1 | SELECT 函数名(参数列表) |
查看函数
1 | SHOW FUNCTION STATUS; |
删除函数
1 | DROP FUNCTION IF EXISTS function_name; |
函数:需要有返回值,可以指定0~n个参数
创建自定义函数:
1 | create function function_name([func_parameter]) |
Characteristics
指定存储函数的特性,取值举例:
1 | sql security{definer|invoker}指明谁有权限来执行。 |
函数体是由sql代码构成,可以简单的sql语句。如果为复合结构需要使用begin...end
语句,复合结构可以包含声明,流程控制。
1 | select length('hello'); |
创建自定义函数:
语法格式:
1 | create function function_name([func_parameter]) |
1 | select length('hello'); |
1 | delimiter // |
实例分析函数:
1 | 创建一个函数 |
自定义函数两个必要条件:参数,返回值
创建自定义函数
1 | create function function_name |
- function_name : 函数名称
- func_parameter : 函数的参数列表
- RETURNS type : 指定返回值的类型
- Characteristics : 指定存储函数的特性
- routine_body : 函数体
创建无参的自定义函数:
删除自定义函数
1 | DROP FUNCTION [IF EXISTS] func_name; |
1 | SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H点:%i分:%s秒') |
复合结构体的函数
1 | -- 将语句结束符改为$$,为了防止下面的函数将;看成是语句的结束 |
流程控制的使用
常用的流程控制语句:
- IF条件判断语句-if
- CASE条件判断语句-case
- WHILE循环语句-while
- LOOP循环语句-loop
- REPEAT循环语句-repeat
13.存储过程
局部变量以关键字DECLARE
声明
1 | DECLARE var_name [, varname2, varname3 …] date_type [DEFAULT value]; |
内部BEGIN…END
块中定义的变量只在该块内有效
会话变量的作用范围为整个程序
语法结果
1 | create procedure proc_name([proc_parameter]) |
1 | delimiter // |
删除存储过程:
1 | drop procedure [if exists] proc_name; |
1 | 创建一个查询图书的编号、书名、价格和库存的存储过程。 |
1 | 创建查询图书编号、书名、图书类别的存储过程 |
存储过程和函数的区别
存储过程,存储过程实现的功能比较复制,功能强大,可以执行包括修改表等一系列数据库操作。
存储函数,实现的功能针对性比较强。
返回值上的不同
存储过程:可以返回多个值,也可以不返回值,只是实现某种效果或动作。
存储函数:必须有返回值,而且只能有一个返回值。
参数不同
存储过程:存储过程的参数类型有三种,in,out,inout。
存储函数:参数类型只有一种,类似于in参数,调用函数时需要按照参数的类型指定值即可。
语法结构
存储过程,存储过程声明时不需要指定返回类型。
存储函数,函数声明时需要指定返回类型,且在函数体中必须包含一个有效的return语句。
调用方式
存储过程,用call
语句进行调用
存储函数,嵌入在sql
中使用的,可以在select
中调用
14.事务
事务必须满足的四个条件:
1 | atomicity 原子性 |
控制事务处理
rollback
,回滚会结束用户的事务,并撤销正在进行的所有未提交的修改
commit
,会提交事务,并使已对数据库进行的所有修改称为永久性的
savepoint identifier
,允许在事务中创建一个保存点,一个事务中可以有多个savepoint
rollback to identifier
,把事务回滚到标记点
事务处理主要有两种方法
用begin, rollback, commit
来实现
begin,start transaction
开始一个事务rollback
事务回滚commit
事务确认
直接用set来改变mysql的自动提交模式
set autocommit = 0
禁止自动提交set autocommit = 1
开始自动提交
innodb使用事务
从Mysql5.5版本开始,InnoDB是默认的表存储引擎。
innodb
是事务型数据库的首选引擎,支持事务安全表。
MySql中 delimiter
默认下,delimiter是分号,在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。
(告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。 )
什么是存储引擎:数据库存储引擎是数据库底层软件组件。数据库管理系统使用数据引擎进行创建,查询,更新和删除数据的操作。
mysql
的核心就是存储引擎。
innodb
存储引擎
- 它为
mysql
提供了具有提交,回滚和崩溃恢复能力的事务安全存储引擎。 - 对于处理巨大数据量的数据拥有很好的性能
innodb
存储引擎支持外键完整性约束innodb
被用在众多需要高性能的大型数据库站点上
设置存储引擎:
- 设置服务器的存储引擎
- 在配置文件my.ini中的mysqld下面设置需要的存储引擎
default-storage-engine=InnoDB
- 重启mysql服务器
1 | 创建表(单个)设置存储引擎 |
修改表的存储引擎
1 | alter table tablename engine = engineName |
15.管理与维护
管理用户
1 | USE mysql; |
权限表:存储账号的权限信息表:user,db,host,tables_priv,columns_priv
和procs_priv
各个权限表的作用
tables_priv
表用来对表设置操作权限;columns_priv
表用来对表的某一列设置权限;procs_priv
表可以对存储过程和存储函数设置操作权限。
使用CREATE USER语句创建新用户
语法格式:
1 | CREATE USER “user”@“host” [IDENTIFIED BY “password”]; |
使用DROP USER 语句删除用户
语法格式:
1 | DROP USER user[, user]; |
示例:
1 | 查看日志文件的路径 |
点关注,不迷路
好了各位,以上就是这篇文章的全部内容,能看到这里的人都是人才。我后面会不断更新技术相关的文章,如果觉得文章对你有用,欢迎给个“赞”,也欢迎分享,感谢大家 !!