-- 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标识分别表示什么意思?
解决方案 »
- 存储过程,如何使用prepare连接字符串参数
- myodbc不支持中文吗
- 求access表中存储的日期格式转换为mysql整形数据的方法
- mysql -uroot -h127.0.0.1
- 一个Mysql的SQL语句,竟然是对的?!
- 如何往数据库中添加“字符画”??
- 请问mysql中如何建立表的时候定义自动增长自段?多谢了
- postgresql7.2.4 无法按装到 redhat9.0上
- 谁知道合理设置mysql配置文件吗,总是出现这个问题could not retrieve connection info from pool
- Sql 批量插入300条insert语句最快用时多长?
- 在java区问了没人回答的问题---PostgreSQL的备份 希望各位高手帮忙,十分感谢!!
- 求一个SQL插入语句的写法.(Postgresql)
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参考手册。