面试汇总-待整理

唯一索引、主键索引区别?

唯一索引
唯一索引不允许两行具有相同的索引值。
如果该字段被设置为允许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根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

explain 详解

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();
posted @ 2019-04-23 22:08  Hermioneee  阅读(187)  评论(0编辑  收藏  举报