一、外键问题
外键添加错误,导致原因:
- 两个字段的类型或者大小不严格匹配。
例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多关于signed和unsigned的信息,请参阅:http://www.verysimple.com/blog/?p=57 - 试图设置外键的字段没有建立起索引,或者不是一个primary key(主键)。
如果其中一个不是primary key的话,你必须先为它创建一个索引。 - 其中一个或者两个表是MyISAM引擎的表。
若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。 - 外键的名字不能重复。
你应该检查你的数据库以确保外健名字是唯一的,或者你在键名后面加上几个随机的字符以测试是否是这个原因。 - 你可能设置了ON DELETE SET NULL,但是相关的键的字段又设置成了NOTS NULL值。
你可能通过修改cascade的属性值或者把字段属性设置成allow null来解决。 - 请确定你的Charset和Collate选项在表级和字段级上的一致。
- 可能设置为外键设置了一个默认值,如default=0。
- 语法错误
二、编码问题
可能的错误:
- 默认编码方式可能时latin1,修改 my.ini 文件改变编码方式为 gbk 或 utf8 .修改之后再创建表默认按修改后的编码方式
- 要修改已创建的表的编码方式需要用
//修改表属性 alter table table_name modify name varchar(30) character set gbk; //修改整表 ALTER TABLE OLD_TABLE CONVERT TO CHARACTER SET charset_name [COLLATE collation_name];
三、角色和用户问题
关于用户的操作:
查看所有用户
//创建用户并赋予相应权限
grant select
on database_name.* to 'user_name'@'localhost'
identified by 'password';
//查询所有用户
select user from mysql.user;
//删除用户
use mysql;
drop user 'user_name';
//修改制定用户密码
update mysql.user set
password=password('new_password')
where user="user_name" and Host="localhost";
2.关于角色,MYSQL8版本才能使用
//创建角色
create role role_name;
//赋予角色查询权限
grant select
on table table_name
to role_name
with admin option;
//收回权限
revoke select
on table table_name
from role_name;
//将角色授予其他角色
grant R1
to R2
with admin option;
//删除角色
drop role role_name;
四、电脑中有多个mysql
在配置各种环境装了很多mysql,要让他们同时工作,需要设置注册表的一些信息。
为了避免端口冲突,要先配置各个mysql的my.ini配置文件。
[client]
port=3306
# The TCP/IP Port the MySQL Server will listen on
port=3306
#Path to installation directory. All paths are usually resolved relative to this.
basedir="D:\php\AppServ/MySQL"
#Path to the database root
datadir="D:\php\AppServ/MySQL/data/"
其他 mysql 的 my.ini 的修改类似,使每个各占用一个端口。basedir 和 datadir 为其对应地址。
在services.msc中生成服务
- 进入对应的bin文件夹,在bin文件夹下运行命令窗口(Shift+右键),或在cmd中进入相应bin目录。
- 输入mysqld -install MySQL --defaults-file="D:\php\AppServ/MySQL/my.ini"并回车(MySQL是自己取得服务名字,也可以MySQL2或其他名称;引号中是每个mysql的my.ini对应地址)。
- 提示:Service successfully installed.表示服务安装成功。
- 打开注册表regedit,展开HKEY_LOCAL_MACHINE--->SYSTEM--->CurrentControlSet--->services,找到上面安装的MySQL(或自己取得其他名字)服务,修改参数 ImagePath的值:D:\php\AppServ\MySQL\bin\mysqld --defaults-file=D:\php\AppServ\MySQL\my.ini MySQL(划线部分修改为自己电脑上的值)
- 在services.msc中可以找到并启动相应的服务,可同时运行多个mysql。