精华内容
下载资源
问答
  • UNIQUE等于普通索引吗?

    千次阅读 2016-09-27 10:22:00
    一、unique不等于普通索引,各种索引的定义如下:二、虽然键和unique都能唯一标识一条记录,但是一个表只能建立一个主键,而unique则能建多个1、普通索引 这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引...
    一、unique不等于普通索引,各种索引的定义如下:二、虽然键和unique都能唯一标识一条记录,但是一个表只能建立一个主键,而unique则能建多个1、普通索引
    这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建: 
    创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表); 
    修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表); 
    创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
    
    2、唯一性索引
    这种索引和前面的「普通索引」基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建: 
    创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表); 
    修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表); 
    创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
    
    3、主键
    主键是一种唯一性索引,但它必须指定为「PRIMARYKEY」。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如「CREATETABLE tablename ( [...], PRIMARY KEY (列的列表) );」。但是,我们也可以通过修改表的方式加入主键,例如「ALTER TABLE tablename ADD PRIMARY KEY (列的列表);」。每个表只能有一个主键。 
    
    4、全文索引
    MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创
    建,也可以通过ALTER TABLE或CREATEINDEX命令创建。对於大规模的数据集,通过ALTER TABLE(或者CREATEINDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引,要瞭解更多信息,请参见MySQLdocumentation。
    
    http://zhidao.baidu.com/link?url=RXbx5Xtm41XdHpsHDjhrhKmMWGNHSM-vL68wGa3IxTsc6DIORpB5cXP3c4iWxyECLHolfhyKblm9YR_aeryEUa
    
    展开全文
  • sql主键和外键的区别

    千次阅读 2015-10-13 23:56:20
    什么是主键: 数据库主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行。这样的一列或者列成为表的主键,通过它可以强制表...每一个表都必须定义一个主键吗? 我个人认为这个问题要看我们的表的功能

    什么是主键:

        数据库主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行。这样的一列或者多列成为表的主键,通过它可以强制表的实体完整性。当创建或者更改表时可以通过定义PRIMARY KEY约束来创建主键,一个表只能有一个主键约束,而且主键约束中的列不能是空值,由于主键约束确保唯一数据,所一经常来定义标识列。
    

    每一个表都必须定义一个主键吗?

        我个人认为这个问题要看我们的表的功能,利用来存储大量数据,并需要经常查询的,建立主键可以加快查询效率,从而降低服务器的负担,但是如果没有这样的需求,建立主键反而消耗资源,所以这种情况下就没有必要建立主键了。
        有些人认为:虽然在有些数据库中,主键不是必须的,但是最好为每个表都设置一个主键,不管是但主键还是复合主键,它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。
    

    主键的作用:

    1、 从上面的定义可以看出,主键是用于唯一标识数据库表中一行数据的。
    2、 作为一个可以被外键有效引用的对象。

    主键的设计原则:

    1、 主键应当是对用户没有意义的,比如说用户登陆一个系统的时候的登录id;而这种情况就不可能了:“学生表”需要支持这样的需求“学生注销后,可以重新激活自己的信息,而且还要保持自己的号码跟原来的一直”,这样的话主键就不能满足要求了。
    2、 唯一性,这个原则就不用多说了。
    3、 非空性:主键的值是不可重复的,也不可以为空。

    什么是外键:

        外键是建立于表与表之间的联系,方便程序的编写。
    

    外键的特点:

    1、 外键保证了数据的完整性
    2、 使用外键,简单直观,可以直接在数据模型中体现,无论是设计、维护等等。
    3、 外键在调试程序的时候可能会带来一些麻烦。

    展开全文
  • 什么是主键: 数据库主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行。这样的一列或者列成为表的主键,通过它可以强制表的...每一个表都必须定义一个主键吗? 我个人认为这个问题要看我...

    什么是主键:

    数据库主键是指表中一个列或者列的组合,其值能够唯一的标识表中的每一个行。这样的一列或者多列成为表的主键,通过它可以强制表的实体完整性。当创建或者更改表时可以通过定义PRIMARY KEY约束来创建主键,一个表只能有一个主键约束,而且主键约束中的列不能是空值,由于主键约束确保唯一数据,所一经常来定义标识列。

    每一个表都必须定义一个主键吗?

    我个人认为这个问题要看我们的表的功能,利用来存储大量数据,并需要经常查询的,建立主键可以加快查询效率,从而降低服务器的负担,但是如果没有这样的需求,建立主键反而消耗资源,所以这种情况下就没有必要建立主键了。

    有些人认为:虽然在有些数据库中,主键不是必须的,但是最好为每个表都设置一个主键,不管是但主键还是复合主键,它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。

    主键的作用:

    1、 从上面的定义可以看出,主键是用于唯一标识数据库表中一行数据的。

    2、 作为一个可以被外键有效引用的对象。

    主键的设计原则:

    1、 主键应当是对用户没有意义的,比如说用户登陆一个系统的时候的登录id;而这种情况就不可能了:“学生表”需要支持这样的需求“学生注销后,可以重新激活自己的信息,而且还要保持自己的号码跟原来的一直”,这样的话主键就不能满足要求了。

    2、 唯一性,这个原则就不用多说了。

    3、 非空性:主键的值是不可重复的,也不可以为空。

    什么是外键:

    外键是建立于表与表之间的联系,方便程序的编写。

    外键的特点:

    1、 外键保证了数据的完整性

    2、 使用外键,简单直观,可以直接在数据模型中体现,无论是设计、维护等等。

    3、 外键在调试程序的时候可能会带来一些麻烦。

    如何插入外键:


    如上图所示,数据库中有三个表,下面我们给news和category表设置关系


    如图所示,邮件单击“数据库关系图”,选择“新建数据库关系图”


    出现上面的“添加表”

    选择要添加的表的名称,将这三个表全部添加到里面去(如下图所示)


    我们将news的categoryId设置为category的Id的外键




    单击添加按钮



    选择上边的“表和列规范”左边的三个小点号的按钮,点开后如下图所示



    展开全文
  • MySQL面试其他问题

    2021-01-22 17:35:07
    MySQL创建表可以设置多个主键吗?MySQL创建表时不指定主键可以吗?SQL的生命周期?Java连接MySQL的步骤? ⼀条SQL语句在MySQL中如何执⾏的? 条sql语句是如何执行的 什么是存储过程?有哪些优缺点? 存储过程是...

    ⼀条SQL语句在MySQL中如何执⾏的?

    一条sql语句是如何执行的

    什么是存储过程?有哪些优缺点?

    存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需要创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

    优点:

    • 存储过程是预编译过的,执行效率高。

    • 存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。

    • 安全性高,执行存储过程需要有一定权限的用户。

    • 存储过程可以重复使用,减少数据库开发人员的工作量。

    缺点:

    • 调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。

    • 移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

    • 重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

    • 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

    MySQL数据库cpu飙升到500%的话怎么处理?

    当 cpu 飙升到 500%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的,如果不是,找出占用高的进程,并进行相关处理。

    如果是 mysqld 造成的, show processlist,看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行。找出消耗高的 sql,看看执行计划是否准确, index 是否缺失,或者实在是数据量太大造成。

    一般来说,肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降),等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再重新跑这些 SQL。

    也有可能是每个 sql 消耗资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等

    解释⼀下什么是池化设计思想。什么是数据库连接池?为什么需要数据库连接池?

    池话设计应该不是一个新名词。我们常见的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消耗,如创建线程的开销,获取远程连接的开销等。就好比你去食堂打饭,打饭的大妈会先把饭盛好几份放那里,你来了就直接拿着饭盒加菜即可,不用再临时又盛饭又打菜,效率就高了。除了初始化资源,池化设计还包括如下这些特征:池子的初始值、池子的活跃值、池子的最大值等,这些特征可以直接映射到java线程池和数据库连接池的成员属性中。——这篇文章对池化设计思想介绍的还不错,直接复制过来,避免重复造轮子了。

    数据库连接本质就是一个 socket 的连接。数据库服务端还要维护一些缓存和用户权限信息之类的 所以占用了一些内存。我们可以把数据库连接池是看做是维护的数据库连接的缓存,以便将来需要对数据库的请求时可以重用这些连接。为每个用户打开和维护数据库连接,尤其是对动态数据库驱动的网站应用程序的请求,既昂贵又浪费资源。在连接池中,创建连接后,将其放置在池中,并再次使用它,因此不必建立新的连接。如果使用了所有连接,则会建立一个新连接并将其添加到池中。连接池还减少了用户必须等待建立与数据库的连接的时间。

    MySQL自增主键用完了怎么办?

    【原创】杂谈自增主键用完了怎么办

    ⼀条SQL语句执⾏得很慢的原因有哪些?

    https://www.cnblogs.com/kubidemanong/p/10734045.html

    MySQL创建表时可以设置多个主键吗?

    主键只能有一个。但是,如果你想用多个唯一索引’(unique index),是可以有多个的。主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。所谓的一张表多个主键,我们称之为联合主键。可以由多个列形成联合主键,但是主键只能有一个!

    MySQL创建表时不指定主键可以吗?

    如果是mysql的话,没有定义主键,系统会自动创建一个6位长度的隐藏主键rowId.

    SQL的生命周期?

    1. 应用服务器与数据库服务器建立一个连接

    2. 数据库进程拿到请求sql

    3. 解析并生成执行计划,执行

    4. 读取数据到内存并进行逻辑处理

    5. 通过步骤一的连接,发送结果到客户端

    6. 关掉连接,释放资源
      在这里插入图片描述

    Java连接MySQL的步骤?

    1. 加载驱动
    2. 获取数据库连接
    3. 创建语句对象
    4. 执行sql语句
    5. 获取结果
    6. 释放连接
    public class DemoJdbc {
        public static void main(String[] args) {
            save();
        }
    
        public static void save() {
            String sql = "insert into t_student (name, age) values (?, ?)";
            Student stu = new Student("zhangsan", 15);
            Connection connection = null;
            Statement statement = null;
            try {
                // 1 加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 2 获取数据库连接
                connection = DriverManager.getConnection("jdbc:mysql:///designmodel", "root", "root");
                // 3 创建语句对象
                PreparedStatement ps = connection.prepareStatement(sql);
                ps.setObject(1, stu.getName());
                ps.setObject(2, stu.getAge());
                // 4 执行sql语句
                ps.executeUpdate();
                // 5 释放连接
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (statement != null) {
                        statement.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (connection != null) {
                            connection.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    
    展开全文
  • 我们可以表创建主键约束主键保证了数据的唯一性,主键可以保证同一条记录只能插入一次。 一般情况下,只有一个字段可以添加主键,此字段一般是编号 2.域完整性 一般是对一个字段的约束 例如:学号 位数...
  • 4.3.4 在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载器加载?为什么。 4.3.5 说一说你对java.lang.Object对象中hashCode和equals方法的理解。在什么场景下需要重新实现这两个方法。 ...
  • 1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 56 2、sleep() 和 wait() 有什么区别? 56 3、当一个线程进入一个对象的一个synchronized方法后,其它线程...
  • java面试题

    2018-04-27 19:55:38
    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...
  • MySql

    2021-03-19 15:33:04
    答:索引是对数据库列或列的值进行排序的种结构,使用索引可快速访问数据库 中的特定信息,可以加快查询速度。 创建索引的方式 自动创建 :mysql会为主键和唯一键的列自动创建索引; 手动创建:create ...
  • 然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中...
  • 我们到目前为止做了这么准备,我们可以开发功能吗?比如说注册功能,其实我们还差一个很重要的东西,模型!数据库 我们首先要分析,我们创建什么,干什么用,彼此之间的关系 用户:User 我们看一下我们的注册...
  • 例如,可以一个事件调用多个方法。 方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。 C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。 【面试...
  • 到读完本书之时,你将不仅能够理解高效数据库设计和创建,还能像一个专家那样查询、归一(normalizing)和联接数据。你将成为数据的真正主人。 目录 序  这本书适合谁?  我们知道你在想什么  元认知  让你的...
  • java面试800题

    2011-09-13 20:25:48
    Q0033 在Oracle数据库中,给定一个表,其中一列有索引,现在用这个列作为查询条件,因为用到了索引,速度一定会快吗? 答案是否定的,比如在这个列中使用‘%sdfd%’来进行模糊查询 Q0034 给定了一些创建数据库试图...
  • asp.net知识库

    2015-06-18 08:45:45
    从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle...
  • [Q]怎么样热备份一个表空间 29 [Q]怎么快速得到整个数据库的热备脚本 30 [Q]丢失一个数据文件,但是没有备份,怎么样打开数据库 30 [Q]丢失一个数据文件,没有备份但是有该数据文件创建以来的归档怎么恢复 30 [Q]...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... SQL Server 2008数据库...虽然无法自由地表达自己的想法,然而,翻译的快乐就在于:使另一个人的好想法能让更的人了解。当然,由于时间紧张,译者水平有限,错误粗糙...
  • 对这样设计出来的数据库,只需问几为什么——业务模型是如何体现的?数据完整性如何保证?性能是如何权衡的?——恐怕设计者就该崩溃了。.  这也难怪,设计、开发人员在学校中学习数据库时,理论书籍离实际...
  • 5.5.2 回滚一个事务 155 5.6 数据一致性和数据并发性 155 5.6.1 数据库写入器和写前协议 155 5.6.2 SCN 156 5.6.3 撤销管理 156 5.7 备份与恢复体系结构 157 5.7.1 用户管理的备份与恢复 157 5.7.2 ...
  • 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...
  • 25111.2 用生成表查询创建新表 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 ...
  • 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 25611.4 用操作查询从一个表中删除...
  • 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 25611.4 用操作查询从一个表中删除...
  • 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 25611.4 用操作查询从一个表中删除...
  • 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 25611.4 用操作查询从一个表中删除...
  • 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 25611.4 用操作查询从一个表中删除...
  • 25111.2.1 设计和测试选择查询 25211.2.2 将选择查询转换为生成表查询 25311.2.3 为新表建立关系 25411.2.4 使用新的tblShipAddresses表 25511.3 创建操作查询向一个表中追加记录 25611.4 用操作查询从一个表中删除...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

一个表可以创建多个主键吗?