MySQL
关系型数据库介绍
数据结构模型
数据结构模型主要有:
- 层次模型
- 网状结构
- 关系模型
关系模型:
二维关系:row,column
数据库管理系统:DBMS
关系:Relational,RDBMS
RDBMS专业名词
常见的关系型数据库管理系统:
- MySQL:MySQL,MariaDB,Percona-Server
- PostgreSQL:简称为pgsql
- Oracle
- MSSQL
**SQL:**Structure Query Language,结构化查询语言
**约束:**constraint,向数据表提供的数据要遵守的限制
- 主键约束:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行。且必须提供数据,不能为空(NOT NULL)。
- 一个表只能存在一个
- 惟一键约束:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行。允许为空(NULL)
- 一个表可以存在多个
- 外键约束:一个表中的某字段可填入数据取决于另一个表的主键已有的数据
- 检查性约束
**索引:**将表中的一个或多个字段中的数据复制一份另存,并且这些数据需要按特定次序排序存储
关系型数据库的常见组件
关系型数据库的常见组件有:
- 数据库:database
- 表:table,由行(row)和列(column)组成
- 索引:index
- 视图:view
- 用户:user
- 权限:privilege
- 存储过程:procedure
- 存储函数:function
- 触发器:trigger
- 事件调度器:event scheduler
SQL语句
SQL语句有三种类型:
- DDL:Data Defination Language,数据定义语言
- DML:Data Manipulation Language,数据操纵语言
- DCL:Data Control Language,数据控制语言
SQL语句类型 | 对应操作 |
---|---|
DDL | CREATE:创建 DROP:删除 ALTER:修改 |
DML | INSERT:向表中插入数据 DELETE:删除表中数据 UPDATE:更新表中数据 SELECT:查询表中数据 |
DCL | GRANT:授权 REVOKE:移除授权 |
MySQL安装
//下载MySQL包
[root@localhost ~]# wget http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
//安装MySQL的安装工具
[root@localhost ~]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
//修改yum的配置文件
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim mysql-community.repo
# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1 //修改为1启动
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0 //修改为0关闭
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
保存退出
//安装MySQL
[root@localhost yum.repos.d]# yum module disable mysql
[root@localhost yum.repos.d]# yum -y install mysql-community-server
[root@localhost ~]# rpm -qa |grep mysql
mysql-community-server-5.7.34-1.el7.x86_64
mysql-community-client-5.7.34-1.el7.x86_64
mysql80-community-release-el7-3.noarch
mysql-community-common-5.7.34-1.el7.x86_64
mysql-community-libs-5.7.34-1.el7.x86_64
//启动MySQL,并设置开机自启
[root@localhost ~]# systemctl enable --now mysqld
[root@localhost ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2021-04-28 07:00:44 EDT; 28s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Main PID: 1038 (mysqld)
Tasks: 27 (limit: 4743)
Memory: 215.8M
CGroup: /system.slice/mysqld.service
└─1038 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Apr 28 07:00:37 localhost.localdomain systemd[1]: Starting MySQL Server...
Apr 28 07:00:44 localhost.localdomain systemd[1]: Started MySQL Server.
MySQL配置
//在日志文件找出临时密码
[root@localhost ~]# grep 'A temporary password' /var/log/mysqld.log |tail -1
2021-04-28T10:46:09.957304Z 1 [Note] A temporary password is generated for root@localhost: 0kjaYG&aGpxu
[root@localhost ~]# mysql -uroot -p
Enter password: //这里输入刚才的临时密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.34
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
//修改MySQL登陆密码
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'asd123321';
Query OK, 0 rows affected (0.12 sec)
MySQL工具使用
//语法:mysql [OPTIONS] [database]
//常用的OPTIONS:
-uUSERNAME //指定用户名,默认为root
-hHOST //指定服务器主机,默认为localhost,推荐使用ip地址
-pPASSWORD //指定用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
-V //查看当前使用的mysql版本
-e //不登录mysql执行sql语句后退出,常用于脚本
//查看当前使用的mysql版本
[root@localhost ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.34, for Linux (x86_64) using EditLine wrapper
//指定服务器主机和用户登陆
[root@localhost ~]# mysql -uroot -pasd123321 -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.34 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
//注意,这里不推荐直接在命令行里直接使用-pPASSWORD的方式登陆,而是使用-p选项,然后交互式输入密码
[root@localhost ~]# mysql -uroot -p -h127.0.0.1
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.34 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
//不登录mysql执行sql语句后退出
[root@localhost ~]# mysql -uroot -p -h127.0.0.1 -e 'SHOW DATABASES;'
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
MySQL数据库操作
DDL操作
数据库操作
//创建数据库
//语法:CREATE DATABASE [IF NOT EXISTS] 'DB_NAME';
//创建数据库liuaodan
mysql> create database liuaodan;
Query OK, 1 row affected (0.00 sec)
//查看当前实例有哪些数据库
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| liuaodan |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
//删除数据库
//语法:DROP DATABASE [IF EXISTS] 'DB_NAME';
//删除数据库liuaodan
mysql> drop database liuaodan;
Query OK, 0 rows affected (0.11 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
表操作
//创建表
//语法:CREATE TABLE table_name (col1 datatype 修饰符,col2 datatype 修饰符) ENGINE='存储引擎类型';
//在数据库liuaodan里创建表aa
mysql> use liuaodan; //进入数据库
Database changed
mysql> create table aa (id int not null,name varchar(100) not null,age tinyint); //创建aa表
Query OK, 0 rows affected (0.13 sec)
//查看当前数据库有哪些表
mysql> show tables;
+--------------------+
| Tables_in_liuaodan |
+--------------------+
| aa |
+--------------------+
1 row in set (0.00 sec)
//删除表
//语法:DROP TABLE [ IF EXISTS ] 'table_name';
//删除表aa
mysql> drop table aa;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
Empty set (0.00 sec)
用户操作
- mysql用户帐号由两部分组成,如’USERNAME’@‘HOST’,表示此USERNAME只能从此HOST上远程登录
这里(‘USERNAME’@‘HOST’)的HOST用于限制此用户可通过哪些主机远程连接mysql程序,其值可为:
- IP地址,如:172.16.12.129
- 通配符
- %:匹配任意长度的任意字符,常用于设置允许从任何主机登录
- _:匹配任意单个字符
//数据库用户创建
//语法:CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
//创建数据库用户xxbb
mysql> create user 'xxbb'@'127.0.0.1' identified by 'Asd123321!';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
//用新创建的用户和密码登陆
[root@localhost ~]# mysql -uxxbb -pAsd123321! -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.7.34 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
//删除数据库用户
//语法:DROP USER 'username'@'host';
mysql> drop user 'xxbb'@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user; //查询用户
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)
查看命令show
//查看支持的所有字符集
mysql> show character set;
+----------+---------------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
....
//查看当前数据库支持的所有存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
//查看数据库信息
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| liuaodan |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.14 sec)
//不进入某数据库而列出其包含的所有表
mysql> show tables from liuaodan;
+--------------------+
| Tables_in_liuaodan |
+--------------------+
| liuaodan |
+--------------------+
1 row in set (0.00 sec)
//查看表结构
mysql> desc liuaodan.liuaodan;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
//查看某表的创建命令
mysql> show create table liuaodan.liuaodan;
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| liuaodan | CREATE TABLE `liuaodan` (
`id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`age` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
//查看某表的状态
mysql> use liuaodan; //进入数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show table status like 'liuaodan'\G //查看liuaodan表的状态
*************************** 1. row ***************************
Name: liuaodan
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2021-04-29 08:48:11
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
获取帮助
//获取命令使用帮助
//语法:HELP keyword;
mysql> help create database //获取创建数据库的帮助
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_option] ...
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
}
CREATE DATABASE creates a database with the given name. To use this
statement, you need the CREATE privilege for the database. CREATE
SCHEMA is a synonym for CREATE DATABASE.
URL: https://dev.mysql.com/doc/refman/5.7/en/create-database.html
DML操作
DML操作包括增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT),均属针对表的操作。
INSERT语句
//DML操作之增操作insert
//语法:INSERT [INTO] table_name [(column_name,...)] {VALUES | VALUE} (value1,...),(...),...
mysql> use liuaodan; //进入数据库
Database changed
mysql> insert into liuaodan (id,name,age) value (1,'tom',21); //一次插入一条记录
Query OK, 1 row affected (0.01 sec)
mysql> select * from liuaodan;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | tom | 21 |
+----+------+------+
1 row in set (0.00 sec)
mysql> insert into liuaodan (id,name,age) value (2,'xiaoer',18),(3,'zhangsan',18),(4,'wangwu',19),(5,'zhangsan',20); //一次插入多条记录
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from liuaodan;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 21 |
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
+----+----------+------+
5 rows in set (0.00 sec)
SELECT语句
字段column表示法
表示符 | 代表什么? |
---|---|
* | 所有字段 |
as | 字段别名,如col1 AS alias1 当表名很长时用别名代替 |
条件判断语句WHERE
操作类型 | 常用操作符 |
---|---|
操作符 | >,<,>=,<=,=,!= BETWEEN column# AND column# LIKE:模糊匹配 RLIKE:基于正则表达式进行模式匹配 IS NOT NULL:非空 IS NULL:空 |
条件逻辑操作 | AND OR NOT |
ORDER BY:排序,默认为升序(ASC)
ORDER BY语句 | 意义 |
---|---|
ORDER BY ‘column_name’ | 根据column_name进行升序排序 |
ORDER BY ‘column_name’ DESC | 根据column_name进行降序排序 |
ORDER BY ’column_name’ LIMIT 2 | 根据column_name进行升序排序 并只取前2个结果 |
ORDER BY ‘column_name’ LIMIT 1,2 | 根据column_name进行升序排序 并且略过第1个结果取后面的2个结果 |
//DML操作之查操作select
//语法:SELECT column1,column2,... FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
mysql> select * from liuaodan;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 21 |
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
+----+----------+------+
5 rows in set (0.00 sec)
mysql> select name from liuaodan;
+----------+
| name |
+----------+
| tom |
| xiaoer |
| zhangsan |
| wangwu |
| zhangsan |
+----------+
5 rows in set (0.00 sec)
mysql> select * from liuaodan order by age;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
| 1 | tom | 21 |
+----+----------+------+
5 rows in set (0.00 sec)
mysql> select * from liuaodan order by age desc;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 21 |
| 5 | zhangsan | 20 |
| 4 | wangwu | 19 |
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
+----+----------+------+
5 rows in set (0.00 sec)
mysql> select * from liuaodan order by age limit 2;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
+----+----------+------+
2 rows in set (0.01 sec)
mysql> select * from liuaodan order by age limit 1,2;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
+----+----------+------+
2 rows in set (0.00 sec)
mysql> select * from liuaodan where age >= 19;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 21 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
+----+----------+------+
3 rows in set (0.00 sec)
mysql> select * from liuaodan where age >= 19 and name='zhangsan';
+----+----------+------+
| id | name | age |
+----+----------+------+
| 5 | zhangsan | 20 |
+----+----------+------+
1 row in set (0.00 sec)
mysql> select * from liuaodan where age between 19 and 20;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
+----+----------+------+
2 rows in set (0.00 sec)
mysql> select * from liuaodan where age is not null;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 21 |
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
+----+----------+------+
5 rows in set (0.00 sec)
mysql> select * from liuaodan where age is null;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 6 | jerry | NULL |
+----+-------+------+
1 row in set (0.01 sec)
UPDATE语句
//DML操作之改操作update
//语法:UPDATE table_name SET column1 = new_value1[,column2 = new_value2,...] [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
mysql> update liuaodan set age = 25 where name = 'tom';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from liuaodan;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 25 |
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
| 6 | jerry | NULL |
+----+----------+------+
6 rows in set (0.00 sec)
DELETE语句
//DML操作之删操作delete
//语法:DELETE FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
mysql> select * from liuaodan;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 25 |
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
| 6 | jerry | NULL |
+----+----------+------+
6 rows in set (0.00 sec)
mysql> delete from liuaodan where id = 6; //删除某条记录
Query OK, 1 row affected (0.00 sec)
mysql> select * from liuaodan;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 1 | tom | 25 |
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
+----+----------+------+
5 rows in set (0.00 sec)
mysql> delete from liuaodan; //删除整张表的内容
Query OK, 5 rows affected (0.00 sec)
mysql> select * from liuaodan;
Empty set (0.00 sec)
mysql> desc liuaodan;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
TRUNCATE语句
truncate与delete的区别:
语句类型 | 特点 |
---|---|
delete | DELETE删除表内容时仅删除内容,但会保留表结构 DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项 可以通过回滚事务日志恢复数据 非常占用空间 |
truncate | 删除表中所有数据,且无法恢复 表结构、约束和索引等保持不变,新添加的行计数值重置为初始值 执行速度比DELETE快,且使用的系统和事务日志资源少 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放 对于有外键约束引用的表,不能使用TRUNCATE TABLE删除数据 不能用于加入了索引视图的表 |
//语法:TRUNCATE table_name;
mysql> select * from liuaodan;
+----+----------+------+
| id | name | age |
+----+----------+------+
| 2 | xiaoer | 18 |
| 3 | zhangsan | 18 |
| 4 | wangwu | 19 |
| 5 | zhangsan | 20 |
| 1 | tom | 25 |
+----+----------+------+
5 rows in set (0.01 sec)
mysql> truncate liuaodan;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from liuaodan;
Empty set (0.00 sec)
mysql> desc liuaodan;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| age | tinyint(4) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
DCL操作
创建授权grant
权限类型(priv_type)
权限类型 | 代表什么? |
---|---|
ALL | 所有权限 |
SELECT | 读取内容的权限 |
INSERT | 插入内容的权限 |
UPDATE | 更新内容的权限 |
DELETE | 删除内容的权限 |
指定要操作的对象db_name.table_name
表示方式 | 意义 |
---|---|
. | 所有库的所有表 |
db_name | 指定库的所有表 |
db_name.table_name | 指定库的指定表 |
WITH GRANT OPTION:被授权的用户可将自己的权限副本转赠给其他用户,说白点就是将自己的权限完全复制给另一个用户。不建议使用。
//语法
GRANT priv_type,... ON [object_type] db_name.table_name TO ‘username'@'host' [IDENTIFIED BY 'password']
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| liuaodan |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.13 sec)
//授权xxbb用户在数据库本机上登陆访问所有数据库
mysql> grant all on *.* to 'xxbb'@'127.0.0.1' identified by 'Asd123321!';
Query OK, 0 rows affected, 1 warning (0.01 sec)
//授权xxbb用户在192.168.10.15上远程访问登陆liuaodan数据库
mysql> grant all on liuaodan.* to 'xxbb'@'192.168.10.15' identified by 'Asd123321!';
Query OK, 0 rows affected, 1 warning (0.00 sec)
//授权xxbb用户在所有位置上远程登陆访问liuaodan数据库
mysql> grant all on *.* to 'xxbb'@'%' identified by 'Asd123321!';
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看授权
//查看当前登陆用户的授权信息
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
//查看指定用户xxbb的授权信息
mysql> show grants for xxbb;
+-------------------------------------------+
| Grants for xxbb@% |
+-------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'xxbb'@'%' |
+-------------------------------------------+
1 row in set (0.00 sec)
mysql> show grants for 'xxbb'@'127.0.0.1';
+---------------------------------------------------+
| Grants for xxbb@127.0.0.1 |
+---------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'xxbb'@'127.0.0.1' |
+---------------------------------------------------+
1 row in set (0.00 sec)
取消授权
//语法:REVOKE priv_type,... ON db_name.table_name FROM 'username'@'host';
mysql> show grants for xxbb;
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for xxbb@% |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* TO 'xxbb'@'%' |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
注意:mysql服务进程启动时会读取mysql库中的所有授权表至内存中:
- GRANT或REVOKE等执行权限操作会保存于表中,mysql的服务进程会自动重读授权表,并更新至内存中
- 对于不能够或不能及时重读授权表的命令,可手动让mysql的服务进程重读授权表
mysql> flush privileges;