面试汇总-待整理
唯一索引、主键索引区别?
唯一索引
唯一索引不允许两行具有相同的索引值。
如果该字段被设置为允许NULL值,则插入该字段的值可以包含多个NULL值。但此例外情况不适用于使用Berkley DB(BDB)引擎的数据表。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。
主键索引
主键索引是唯一索引的特殊类型。
数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。
它们的一些比较:
(1)对于主健/unique constraint , oracle/sql server/mysql等都会自动建立唯一索引;
(2)主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的;
(3)主健可作外健,唯一索引不可;
(4)主健不可为空,唯一索引可;
(5)主健也可是多个字段的组合;
(6)主键与唯一索引不同的是:
a.有not null属性;
b.每个表只能有一个。
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。主键分为复合主键和联合主键。复合主键就是指该主键含有一个以上的字段组成 。
例如;
create table test (
name varchar(19),
id number,
value varchar(10),
primary key (id,name) )
UNIQUE 唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。
explain sql
mysql> explain select * from servers;
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | servers | ALL | NULL | NULL | NULL | NULL | 1 | NULL |
+----+-------------+---------+------+---------------+------+---------+------+------+-------+
1 row in set (0.03 sec)
possible_keys
指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
Key
key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。
rows
表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
PreparedStatement
// 连接数据库
connection = JDBCTools.getConnection();
// 使用占位符的SQl语句
String sql = "insert into customers(name,birth)"
+ "values(?,?)";
// 使用preparedStatement的setXxx方法设置每一个位置上的值
preparedStatement = connection.prepareStatement(sql);
// 设置name字段
preparedStatement.setString(1, "ATGUIGU");
// 设置birth字段
preparedStatement.setDate(2,
new Date(new java.util.Date().getTime()));
// 执行更新操作
preparedStatement.executeUpdate();