如何将整个MySQL数据库字符集转换为UTF-8并将整理转换为UTF-8?
所以我试图将外键约束添加到我的数据库作为项目需求,它在不同的表上第一次或第二次工作,但我有两个表,在尝试添加外键约束时我得到一个错误.我得到的错误消息是:
ERROR 1215(HY000):无法添加外键约束
这是我用来创建表的SQL,两个有问题的表是Patient和Appointment.
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=1;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE SCHEMA IF NOT EXISTS `doctorsoffice` DEFAULT CHARACTER SET utf8 ;
USE `doctorsoffice` ;
-- -----------------------------------------------------
-- Table `doctorsoffice`.`doctor`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `doctorsoffice`.`doctor` ;
CREATE TABLE IF NOT EXISTS `doctorsoffice`.`doctor` (
`DoctorID` INT(11) NOT NULL AUTO_INCREMENT ,
`FName` VARCHAR(20) NULL DEFAULT NULL ,
`LName` VARCHAR(20) NULL DEFAULT NULL ,
`Gender` VARCHAR(1) NULL DEFAULT NULL ,
`Specialty` VARCHAR(40) NOT NULL DEFAULT …Run Code Online (Sandbox Code Playgroud) 我在创建mysql数据库中现有表的外键时遇到了一些问题.
我有桌子exp:
+-------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+-------+
| EID | varchar(45) | NO | PRI | NULL | |
| Comment | text | YES | | NULL | |
| Initials | varchar(255) | NO | | NULL | |
| ExpDate | date | NO | | NULL | |
| InsertDate | date | NO | | NULL | |
| inserted_by | int(11) unsigned …Run Code Online (Sandbox Code Playgroud) 我发现了一些关于错误的线索.但是所有解决方案对我都不起作用.
我创建了2个表用户表和一个用于文章.现在我想存储创建文章的用户和最后一个修饰符的用户.
CREATE TABLE IF NOT EXISTS `testDb`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`nickname` VARCHAR(255) NULL,
`first_name` VARCHAR(255) NULL,
`last_name` VARCHAR(255) NULL,
`e_mail` VARCHAR(255) NOT NULL,
`activated` TINYINT(1) NOT NULL DEFAULT 0,
`birth_date` DATE NULL,
`locked` TINYINT(1) NOT NULL DEFAULT 0,
`locked_date_time` DATETIME NULL,
`street` VARCHAR(255) NULL,
`street_number` VARCHAR(255) NULL,
`city` VARCHAR(255) NULL,
`postal_code` VARCHAR(255) NULL,
`country` VARCHAR(255) NULL,
`phone` VARCHAR(255) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `user_id_UNIQUE` (`id` ASC)
)
ENGINE = InnoDB
AUTO_INCREMENT = 1;
CREATE TABLE …Run Code Online (Sandbox Code Playgroud) 无论如何,我可以将一个完整填充的MyISAM数据库转换为InnoDB(以某种方式创建所有外键约束,就像我从头开始运行syncdb命令一样)?
一般:给定多个列的外键,其中一些可能为 NULL。
默认情况下(MATCH SIMPLE)只要多列外键中至少有一列为 NULL,MySQL/MariaDB InnoDB 就不会检查外键。
要求:如果从父级删除一行,则相应子级的一列应设置为 NULL,但外键中的两列不应设置为 NULL。
示例/描述:学生可能会被列入某个讲座的名单,也可能会被列入其中一个讲座小组的名单。如果讲座被删除,所有学生列表(作品)及其所有组(作品)都应被删除。如果仅删除单个组,则学生仍应列出讲座,但不应再将他们分配到组(问题)。
示例/SQL:以下 SQL 说明了此示例,但最后一条语句不起作用,因为最后一个 FOREIGN KEY 要求 LectureId 和 groupId 都可为 NULL,但使两者都可为 NULL 将意味着删除组也会将 LectureId 设置为 NULL 。
CREATE TABLE lectures (
lectureId INT NOT NULL,
title VARCHAR(10) NOT NULL,
PRIMARY KEY (lectureId)
);
CREATE TABLE groups (
lectureId INT NOT NULL,
groupNo INT NOT NULL,
title VARCHAR(10) NOT NULL,
PRIMARY KEY (lectureId,groupNo),
FOREIGN KEY (lectureId) REFERENCES lectures (lectureId)
ON UPDATE CASCADE ON DELETE CASCADE
); …Run Code Online (Sandbox Code Playgroud) 怎么了?
mysql> create table price(
-> p_code char(1) not null,
-> p_description varchar(20),
-> p_rentfee decimal(2,2) not null,
-> p_dylatefee decimal(2,2));
Query OK, 0 rows affected (0.18 sec)
mysql> create table movie(
-> mv_no char(4) not null,
-> mv_name varchar(50) not null,
-> mv_year char(4) not null,
-> mv_cost decimal(2,2) not null,
-> mv_genre varchar(15) not null,
-> p_code char(1) not null,
-> foreign key (p_code) references price(p_code));
ERROR 1215 (HY000): Cannot add foreign key constraint
mysql>
Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于这个错误的回答问题,但没有一个答案似乎能帮我解决问题.
我得到的错误是
#1215 - Cannot add foreign key constraint
Run Code Online (Sandbox Code Playgroud)
当我这样做时show engine innodb status,它给了我这个信息:
在引用的表中找不到索引,其中引用的列显示为第一列,或者表中的列类型与引用的表不匹配约束.请注意,使用> = InnoDB-4.1.12创建的表中ENUM和SET的内部存储类型已更改,旧表中的此类列不能被新表中的此类列引用.
以下是涉及的表(我正在创建一个创建脚本,并且在执行sql期间出现错误)
CREATE TABLE IF NOT EXISTS customer_type (
customer_type_id int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(128) NOT NULL,
sort int(11) NOT NULL,
is_active tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (customer_type_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS location (
location_id int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
email varchar(255) DEFAULT NULL,
phone varchar(32) DEFAULT NULL,
address …Run Code Online (Sandbox Code Playgroud)