前言
本章讲解的是Mysql基础的管理以及其他的一些常识。
账户管理
账户管理是MySQL用户管理最基本的内容。包括登录,退出MySQL服务器、创建用户、删除用户、密码管理和权限管理等内容。
1.新建普通用户
- 使用create user语句来创建新的用户;
- 直接在mysql.user表中insert 用户;
- 使用grant 语句来新建用户;
1)使用CREATE USER语句创建用户,必须要拥有CREATE USER权限。其格式如下:
CREATE USER user[IDENTIFIED BY [PASSWORD] 'password'],
[user[IDENTIFIED BY [PASSWORD] 'password']]...
其中,user参数表示新建用户的账户,user由用户名(User)和主机名(Host)构成;IDENTIFIED BY关键字用来设置用户的密码;password参数表示用户的密码;如果密码是一个普通的字符串,就不需要使用PASSWORD关键字。可以没有初始密码。
例:
CREATE USER 'admin'@'%' IDENTIFIED BY 'admin'
执行之后user表会增加一行记录,但权限暂时全部为’N’。
2)用INSERT语句新建普通用户
可以使用INSERT语句直接将用户的信息添加到mysql.user表。但必须拥有mysql.user表的INSERT权限。
INSERT INTO mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) VALUES('%','newuser1',PASSWORD('123456'),'','','')
执行INSERT之后,需要使用一下命令来刷新权限:
FLUSH PRIVILEGES
3)用GRANT语句来新建普通用户
用GRANT来创建新的用户时,能够在创建用户时为用户授权。但需要拥有GRANT权限。
GRANT priv_type ON database.table
TO user[IDENTIFIED BY [PASSWORD] 'password']
[,user [IDENTIFIED BY [PASSWORD] 'password']...]
2删除普通用户
1)DROP USER语句删除普通用户
需要拥有DROP USER权限
DROP USER user[,user]...
user是需要删除的用户,由用户名(User)和主机名(Host)构成。
DROP USER 'newuser1'@'%'
2)DELETE语句删除普通用户
可以使用DELETE语句直接将用户的信息从mysql.user表中删除。但必须拥有对mysql.user表的DELETE权限。
DELETE FROM mysql.user WHERE Host = '%' AND User = 'admin'
删除完成后,一样要FLUSH PRIVILEGES才生效。
3.忘记密码解决方式
如果root用户密码丢失了,会给用户造成很大的麻烦。但是,可以通过某种特殊方法登录到root用户下,然后修改密码。
登录root用户,并且设置新密码
mysql -u root
必须使用UPDATE语句更新mysql数据库下的user表,而不能使用SET语句,因为–skip-grant-tables不能使用SET语句。
修改完密码以后,FLUSH PRIVILEGES语句加载权限表,新密码即生效。
常用引擎
在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。Support列的值表示某种引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的存储引擎 。下面来看一下其中几种常用的引擎。
- InnoDB存储引擎:InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了,InnoDB是默认的MySQL引擎。
- MyISAM存储引擎:MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物。
- MEMORY存储引擎:MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。
不同的存储引擎都有各自的特点,以适应不同的需求,如图所示:
常见约束
分类:六大约束
1.NOT NULL :非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等。
2.DEFAULT:默认值,用于保证该字段有默认值。例如学生表的学生性别
3.PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。例如学生表的学生学号等。
4.UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。例如注册用户的手机号,身份证号等。
5.CHECK:检查约束(MySql不支持),检查字段的值是否为指定的值。
6.FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值。
添加列级约束 :
create table if not exists t_stuinfo(
2 id int primary key,
3 stuName varchar(20) not null,
4 gender char(1) check(gender='男' or gender='女'),
5 seat int unique,
6 age int default 18,
7 majorId int references major(id)
8 );
添加表级约束:
create table if not exists t_stuinfo(
2 id int,
3 stuName varchar(20),
4 gender char(1),
5 seat int,
6 age int,
7 majorId int,
8 constraint pk primary key(id),
9 constraint uq unique(seat),
10 constraint ck check(gender='男' or gender='女'),
11 constraint fk_stuinfo_major foreign key(majorId) references major(id)
12 );
表的管理
创建表语句:
CREATE TABLE employee(
eid INT,
ename VARCHAR(20),
gender CHAR(2),
birthday DATE,
email VARCHAR(20),
remark VARCHAR(50)
);
查看表结构:
desc employee;
删除表:
drop table Employee;
修改多个字段:
UPDATE USER SET birthday='2018-08-30',score=99 WHERE sid=2;