- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
好的,我正在为我的示例创建一个简单的数据库,其中包含用户数据和用户公司的数据。
CREATE TABLE `users` (
`UID` INT(25) NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(60) NOT NULL ,
`password` VARCHAR(100) NOT NULL ,
`ownername` VARCHAR(150) NOT NULL ,
`userstatus` TINYINT(1) NOT NULL ,
`userregistertime` DATETIME NOT NULL ,
`userlastonline` DATETIME NOT NULL ,
PRIMARY KEY (`UID`) ,
INDEX `username` (`username` ASC) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
CREATE TABLE `company` (
`CID` INT(25) NOT NULL AUTO_INCREMENT ,
`UID` INT(25) NOT NULL ,
`companyname` VARCHAR(60) NOT NULL ,
`companyaddress` VARCHAR(255) NOT NULL ,
`companyemail` VARCHAR(255) NULL DEFAULT NULL ,
`companyphone` VARCHAR(20) NOT NULL ,
`companyimage` VARCHAR(255) NULL DEFAULT NULL ,
`companyyahoo` VARCHAR(255) NULL DEFAULT NULL ,
`companytwitter` VARCHAR(255) NULL DEFAULT NULL ,
`companykaskus` VARCHAR(255) NULL DEFAULT NULL ,
`companyfacebook` VARCHAR(255) NULL DEFAULT NULL ,
`companytype` TINYINT(1) NOT NULL DEFAULT '0' ,
`companystatus` TEXT NULL DEFAULT NULL ,
`companytemplate` TEXT NULL DEFAULT NULL ,
`companyintroduction` TEXT NULL DEFAULT NULL ,
`partnership` TINYINT(1) NOT NULL DEFAULT '0' ,
PRIMARY KEY (`CID`) ,
INDEX `ownername` (`UID` ASC) ,
INDEX `companyname` (`companyname` ASC) ,
CONSTRAINT `ownernamecompany`
FOREIGN KEY (`UID` )
REFERENCES `users` (`UID` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
1.为什么我向用户表中插入数据后(uid 是自动递增的)它没有更新我公司的 UID 表?
如果您有 php 知识,请查看我如何插入它。
$RegisterInsert1 = $dbConnect->prepare("INSERT INTO users (
`username`, `password`, `ownername`, `userregistertime`, `userlastonline`) VALUES (
:username, :password, :ownername, :userregistertime, :userlastonline)");
$RegisterInsert1->execute($RegisterData1);
如您所见,我得到 UID = 1 ( auto ) 然后用户名、密码、所有者名等插入到用户表中。但不知何故我公司的 UID 没有更新。它应该是 UID = 1,然后是其余的 CID (auto) 公司名称为 null,等等。
2.我定义外键用法是否正确?
3.请给我一个插入用户数据+公司数据的最佳例子,正确使用外国的正确用法。
我现在是怎么做的
// INSERT USERS DB
$RegisterInsert1 = $dbConnect->prepare("INSERT INTO users (
`username`, `password`, `ownername`, `userregistertime`, `userlastonline`) VALUES (
:username, :password, :ownername, :userregistertime, :userlastonline)");
$RegisterInsert1->execute($RegisterData1);
// GET USERS GIVEN AUTO GENERATED UID
// QUESTION ? THIS one should be automated by foreign useage ?
$GetUid = $dbConnect->prepare("SELECT UID FROM users WHERE username = :username");
$GetUid->execute($RegisterData3);
$UserID = $GetUid->fetch();
$RegisterData2['UID'] = $UserID;
// INSERT COMPANY INFO + UID
$RegisterInsert2 = $dbConnect->prepare("INSERT INTO company (
`UID`,`companyphone`,`partnership`) VALUES (
:UID, :companyphone, :partnership)");
$RegisterInsert2->execute($RegisterData2);
最佳答案
架构定义中的外键是 Company 表中的 UID 列。这指的是用户表中的一行。您可以通过添加外键约束来确保永远不会将无效的 UID 插入到 Company 表中...
ALTER TABLE COMPANY ADD FOREIGN KEY COMPANY_USER_FK (UID) REFERENCES USER(UID);
这将导致尝试将用户表中不存在的 UID 添加到公司名称中的尝试失败。您可以添加额外的功能,以便从用户表中删除用户会删除公司表中的所有匹配行,如下所示...
ALTER TABLE COMPANY ...etc... REFERENCES USER(UID) ON DELETE CASCADE;
或者如果用户的行存在于公司表中,您可以防止用户被删除......
ALTER TABLE COMPANY ...etc... REFERENCES USER(UID) ON DELETE RESTRICT;
虽然它不适用于您的架构,但您也可以通过...将更改级联到用户表中的 UID
ALTER TABLE COMPANY ...etc... REFERENCES USER(UID) ON UPDATE CASCADE;
请注意,如果存储引擎是 INNODB;
关于php - SQL 外键用法 ?它到底有什么作用?什么时候需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263371/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!