-- 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标识分别表示什么意思?

解决方案 »

  1.   

    回2楼,我的理解是:
    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中已有的数据为我想存入的数据
      

  2.   


    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
      

  3.   


    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参考手册。
      

  4.   

    on delete cascade是级联删除,删除子表记录时,主表记录也删除