MYSQL中USER表结构中的字段解释

本文深入探讨了MySQL数据库中用户权限的各个方面,包括不同权限的作用、如何查看和设置用户权限,以及如何安全地管理这些权限。

Select_priv。确定用户是否可以通过SELECT命令选择数据。

Insert_priv。确定用户是否可以通过INSERT命令插入数据。

Update_priv。确定用户是否可以通过UPDATE命令修改现有数据。

Delete_priv。确定用户是否可以通过DELETE命令删除现有数据。

Create_priv。确定用户是否可以创建新的数据库和表。

Drop_priv。确定用户是否可以删除现有数据库和表。

Reload_priv。确定用户是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表。

Shutdown_priv。确定用户是否可以关闭MySQL服务器。在将此权限提供给root账户之外的任何用户时,都应当非常谨慎。

Process_priv。确定用户是否可以通过SHOW PROCESSLIST命令查看其他用户的进程。

File_priv。确定用户是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令。

Grant_priv。确定用户是否可以将已经授予给该用户自己的权限再授予其他用户。例如,如果用户可以插入、选择和删除foo数据库中的信息,并且授予了GRANT权限,则该用户就可以将其任何或全部权限授予系统中的任何其他用户。

References_priv。目前只是某些未来功能的占位符;现在没有作用。

Index_priv。确定用户是否可以创建和删除表索引。

Alter_priv。确定用户是否可以重命名和修改表结构。

Show_db_priv。确定用户是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库。可以考虑对所有用户禁用这个权限,除非有特别不可抗拒的原因。

Super_priv。确定用户是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET
GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令。

Create_tmp_table_priv。确定用户是否可以创建临时表。

Lock_tables_priv。确定用户是否可以使用LOCK TABLES命令阻止对表的访问/修改。

Execute_priv。确定用户是否可以执行存储过程。此权限只在MySQL 5.0及更高版本中有意义。

Repl_slave_priv。确定用户是否可以读取用于维护复制数据库环境的二进制日志文件。此用户位于主系统中,有利于主机和客户机之间的通信。

Repl_client_priv。确定用户是否可以确定复制从服务器和主服务器的位置。

Create_view_priv。确定用户是否可以创建视图。此权限只在MySQL 5.0及更高版本中有意义。关于视图的更多信息,参见第34章。

Show_view_priv。确定用户是否可以查看视图或了解视图如何执行。此权限只在MySQL 5.0及更高版本中有意义。关于视图的更多信息,参见第34章。

Create_routine_priv。确定用户是否可以更改或放弃存储过程和函数。此权限是在MySQL 5.0中引入的。

Alter_routine_priv。确定用户是否可以修改或删除存储函数及函数。此权限是在MySQL 5.0中引入的。

Create_user_priv。确定用户是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户。

Event_priv。确定用户能否创建、修改和删除事件。这个权限是MySQL 5.1.6新增的。

Trigger_priv。确定用户能否创建和删除触发器,这个权限是MySQL 5.1.6新增的。

查看MYSQL数据库中所有用户及拥有权限

查看MYSQL数据库中所有用户
mysql>SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+---------------------------------------+
| query |
+---------------------------------------+
| User:; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
+---------------------------------------+

21 rows in set (0.01 sec)


查看数据库中具体某个用户的权限
mysql> show grants for ;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT PROCESS, SUPER ON *.* TO IDENTIFIED BY PASSWORD '*DAFF917B80E3314B1ABECBA9DF8785AFD342CE89' |
| GRANT ALL PRIVILEGES ON `cacti`.* TO |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> select * from mysql.user where user='cactiuser' \G
*************************** 1. row ***************************
Host: %
User: cactiuser
Password: *DAFF917B80E3314B1ABECBA9DF8785AFD342CE89
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: Y
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: Y
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
查看user表结构 需要具体的项可结合表结构来查询
mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
******************
******************
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)


查看MYSQL数据库中所有用户及拥有权限

查看MYSQL数据库中所有用户
mysql>SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+---------------------------------------+
| query |
+---------------------------------------+
| User:; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
| User: ; |
+---------------------------------------+

21 rows in set (0.01 sec)


查看数据库中具体某个用户的权限
mysql> show grants for ;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT PROCESS, SUPER ON *.* TO IDENTIFIED BY PASSWORD '*DAFF917B80E3314B1ABECBA9DF8785AFD342CE89' |
| GRANT ALL PRIVILEGES ON `cacti`.* TO |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> select * from mysql.user where user='cactiuser' \G
*************************** 1. row ***************************
Host: %
User: cactiuser
Password: *DAFF917B80E3314B1ABECBA9DF8785AFD342CE89
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: Y
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: Y
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
查看user表结构 需要具体的项可结合表结构来查询
mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
******************
******************
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)


<think>好的,我现在需要帮助用户了解如何在MySQL中编创建表的语句,特别是自增字段和各种约束的用法。首先,我应该回顾一下用户提供的引用内容,看看有没有相关的信息可以直接利用。 用户提到了CREATE TABLE语句的基本结构,引用[1]给出了语法模板,包括列定义、约束和存储引擎。引用[3]和[4]涉及到外键的创建,引用[5]提到了varchar字段的长度限制。用户的问题集中在自增字段AUTO_INCREMENT,以及主键、唯一、外键等约束上,所以我需要把这些内容整合起来。 首先,自增字段MySQL中通常与主键一起使用,使用AUTO_INCREMENT关键字。需要确保该字段是整数类型,比如INT或BIGINT,并且是主键或唯一索引。例如,id INT AUTO_INCREMENT PRIMARY KEY。 接下来是主键约束,主键唯一标识表中的每一行,不能重复且不能为NULL。用户可能需要在创建表时指定PRIMARY KEY,可以是单个字段或多个字段的组合。例如,PRIMARY KEY (id)或者复合主键PRIMARY KEY (col1, col2)。 然后是唯一约束UNIQUE,确保某列的值唯一,但允许NULL值。比如在email字段上加UNIQUE约束,防止重复的邮箱地址。 外键约束FOREIGN KEY用于关联两个表,确保引用另一个表的存在值。需要指定外键字段和引用的表及字段,如CONSTRAINT fk_name FOREIGN KEY (type) REFERENCES animal(name)。引用[2]和[3]提供了外键的例子,需要注意存储引擎必须是InnoDB才能支持外键。 用户可能还关心自增字段的起始值和步长,虽然这不是基本语法,但有时会用到ALTER TABLE来设置。比如ALTER TABLE users AUTO_INCREMENT=1000;。 此外,用户提供的引用中有提到字段的NOT NULL约束和默认值,这些也是创建表时常用的选项。比如name VARCHAR(20) NOT NULL DEFAULT 'anonymous'。 现在需要将这些内容组织成一个清晰的回答结构,分步骤说明,并给出示例代码。同时,根据用户的要求,生成相关问题。例如,如何修改自增起始值,如何添加复合主键,外键约束失败的原因等。 需要检查LaTeX语法是否正确,所有数学表达式和代码块是否符合要求。比如,确保主键定义在$$...$$中,代码用三个反引号包围,并且语言指定为sql。 最后,确保引用的引用标识正确添加,比如引用[1]到[5]的相关内容,但用户提供的引用中并没有直接提到AUTO_INCREMENT,所以可能需要依靠自己的知识补充这部分,同时结合现有的引用内容,如外键的创建方法。 总结步骤: 1. 创建表的基本语法结构,包括列定义和约束。 2. 自增字段的用法和示例。 3. 主键约束的定义,单字段和复合主键。 4. 唯一约束的示例。 5. 外键约束的创建,注意事项如存储引擎。 6. 其他约束如NOT NULL和DEFAULT。 7. 示例代码整合这些元素。 8. 生成相关问题,覆盖自增、主键、外键、存储引擎等可能的问题点。 需要确保回答准确,并且示例代码正确无误,比如自增字段只能有一个,且必须为主键。外键需要对应的引用表存在,字段类型匹配等。</think>### MySQL创建表语法详解(含自增字段与约束) #### 1. 基本语法结构 创建表的核心语法为: $$ \text{CREATE TABLE [IF NOT EXISTS] 表名 (列定义, 约束定义) ENGINE=存储引擎;} $$ 其中列定义包含字段名、数据类型和列级约束,约束定义包含表级约束如主键、外键等[^1]。 #### 2. 自增字段(AUTO_INCREMENT) 自增字段**必须是主键或唯一索引**,且数据类型为整数(如`INT`/`BIGINT`)。示例: ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL ); ``` - 每个表**只能有一个自增字段** - 插入数据时无需指定自增字段值 #### 3. 主键约束(PRIMARY KEY) 主键用于**唯一标识记录**,不允许重复和NULL值: ```sql -- 单字段主键 CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(50) ); -- 复合主键 CREATE TABLE orders ( order_id INT, product_id INT, PRIMARY KEY (order_id, product_id) ); ``` #### 4. 唯一约束(UNIQUE) 确保字段值**唯一但允许NULL值**: ```sql CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(50) UNIQUE, phone VARCHAR(15) UNIQUE ); ``` #### 5. 外键约束(FOREIGN KEY) 用于建立表间关系,需满足: - 引用表和被引用表的字段**数据类型必须一致** - 存储引擎必须是`InnoDB` ```sql CREATE TABLE orders ( order_id INT PRIMARY KEY, user_id INT, CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ) ENGINE=InnoDB; ``` #### 6. 完整创建表示例 ```sql CREATE TABLE students ( stu_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, email VARCHAR(50) UNIQUE, class_id INT, CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES classes(id) ) ENGINE=InnoDB AUTO_INCREMENT=1001; ``` - `AUTO_INCREMENT=1001`设置自增起始值 - `NOT NULL`强制字段必填 - 外键命名`fk_class`提高可读性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值