-- mysql> \.db_setup.mysqlCREATE DATABASE ca;
USE ca;--
-- table1
--CREATE TABLE `cacert`(
`collection-owner` INT(10) NOT NULL,
`USERJID` VARCHAR(20),
`CERTTYPE` VARCHAR(20),
`DAY` INT(10),
`KEYLEN` INT(4),
`CERTSTATE` INT,
`REVOKEREASON` VARCHAR(255),
`REVOKETIME` VARCHAR(10),
`BEGINTIME` TIMESTAMP,
`ENDTIME` VARCHAR(10),
PRIMARY KEY(`USERJID`)
) ENGINE=InnoDB;
--
-- table2
--
CREATE TABLE `userinfo`(
`collection-owner` INT(10) NOT NULL,
`USERJID` VARCHAR(20),
`USERINFO` VARCHAR(255),
PRIMARY KEY(`USERJID`),
INDEX(`collection-owner`),
FOREIGN KEY(`USERJID`) REFERENCES `cacert`(`USERJID`) ON DELETE CASCADE) ENGINE=InnoDB;
这是我参照别人写的数据库setup写的,虽然创建成功了,但是其中很多语句的意思我都不懂,google了之后还是不太懂,希望大侠们帮我解释一下,其中PRIMARY KEY、FOREIGN KEY及REFERENCES相互之间的关系,还有INDEX和ENGINE标识分别表示什么意思?
USE ca;--
-- table1
--CREATE TABLE `cacert`(
`collection-owner` INT(10) NOT NULL,
`USERJID` VARCHAR(20),
`CERTTYPE` VARCHAR(20),
`DAY` INT(10),
`KEYLEN` INT(4),
`CERTSTATE` INT,
`REVOKEREASON` VARCHAR(255),
`REVOKETIME` VARCHAR(10),
`BEGINTIME` TIMESTAMP,
`ENDTIME` VARCHAR(10),
PRIMARY KEY(`USERJID`)
) ENGINE=InnoDB;
--
-- table2
--
CREATE TABLE `userinfo`(
`collection-owner` INT(10) NOT NULL,
`USERJID` VARCHAR(20),
`USERINFO` VARCHAR(255),
PRIMARY KEY(`USERJID`),
INDEX(`collection-owner`),
FOREIGN KEY(`USERJID`) REFERENCES `cacert`(`USERJID`) ON DELETE CASCADE) ENGINE=InnoDB;
这是我参照别人写的数据库setup写的,虽然创建成功了,但是其中很多语句的意思我都不懂,google了之后还是不太懂,希望大侠们帮我解释一下,其中PRIMARY KEY、FOREIGN KEY及REFERENCES相互之间的关系,还有INDEX和ENGINE标识分别表示什么意思?
PRIMARY KEY(`USERJID`)语句意思是设置主键,两个表中都把USERJID设置为主键;
表2中的“REFERENCES `cacert`(`USERJID`)”语句是将表2中的USERJID项同表1中的USERJID项设置成关联,至于
INDEX(`collection-owner`),FOREIGN KEY(`USERJID`)两句还有后面的“ON DELETE CASCADE”语句就看不懂了。
我想实现的功能是:先在table2中,根据“USERJID”列查看table2中是否已经存在我要存入的USERJID,如果不存在,就在table2中新加一行数据,并在table1中也新加一行;如果已经存在,则替换table2和table1中已有的数据为我想存入的数据
INDEX(`collection-owner`) 创建一个索引,索引列是collection-owner
FOREIGN KEY(`USERJID`) REFERENCES `cacert`(`USERJID`) ON DELETE CASCADE 这是一个完整的子句 ,创建一个外键,列USERJID中的值必须在表cacert的列USERJID中存在,并且当表cacert中记录删除时,当前表中的对应记录也同时删除。其实你可以直接在手册中查到这些语法。
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
CREATE TABLE `cacert`(
`collection-owner` INT(10) NOT NULL,
`USERJID` VARCHAR(20),
`CERTTYPE` VARCHAR(20),
`DAY` INT(10),
`KEYLEN` INT(4),
`CERTSTATE` INT,
`REVOKEREASON` VARCHAR(255),
`REVOKETIME` VARCHAR(10),
`BEGINTIME` TIMESTAMP,
`ENDTIME` VARCHAR(10),
PRIMARY KEY(`USERJID`) #主键约束
) ENGINE=InnoDB; #数据库引擎为innodbCREATE TABLE `userinfo`(
`collection-owner` INT(10) NOT NULL,
`USERJID` VARCHAR(20),
`USERINFO` VARCHAR(255),
PRIMARY KEY(`USERJID`), #主键约束
INDEX(`collection-owner`),#将collection-owner设置为索引列
FOREIGN KEY(`USERJID`) REFERENCES `cacert`(`USERJID`) ON DELETE CASCADE) ENGINE=InnoDB;#foreign key是设置外键,references是基于的主表以及列,on delete cascade是关联关系吧;这些是数据库的基本知识,lz可以先读读mysql参考手册。