- 浏览: 253177 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wls212:
...
数据库查询优化技巧(MySQL) -
wang1352083:
来看几个实例 1、客户/订单/订单项目 ...
MongoDB Schema Design(MongoDB模式设计)(中文简述版) -
RunUpwind:
感谢,对我很有帮助!
ruby install相关(远程安装时出现HTTP Response 302的解决办法) -
yinmang1215:
不错,感觉这些方面的文档真是稀缺,谢了。
MongoDB+Rails的Demo实现 -
fireflyman:
rake -T
Rake命令大全
【网络转载】http://blog.csdn.net/yaoxy/archive/2009/07/16/4353115.aspx
Primary key 与Unique Key都是唯一性约束。但二者有很大的区别:
1、Primary key的1个或多个列
必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求。
2、一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY。
下面以测试说明:
SQL> create table t (a int,b int,c int,d int);
Table created.
SQL> desc t
Name Null? Type
----------------------------------------- -------- -----------
A NUMBER(38)
B NUMBER(38)
C NUMBER(38)
D NUMBER(38)
SQL> alter table t add constraint pk_t primary key (a,b);
Table altered.
SQL> desc t
Name Null? Type
----------------------------------------- -------- ----------------
A NOT NULL NUMBER(38)
B NOT NULL NUMBER(38)
C NUMBER(38)
D NUMBER(38)
可以看到A、B两个列都自动改为了NOT NULL
SQL> alter table t modify (a int null);
alter table t modify (a int null)
*
ERROR at line 1:
ORA-01451: column to be modified to NULL cannot be modified to NULL
可以看到,列A不允许改为 NULL
SQL> alter table t drop constraint pk_t;
Table altered.
SQL> alter table t add constraint uk_t_1 unique (a,b);
Table altered.
SQL> desc t
Name Null? Type
----------------------------------------- -------- -----------
A NUMBER(38)
B NUMBER(38)
C NUMBER(38)
D NUMBER(38)
我们看到列A又变回了NULL。
注意到,在删除主键时,列的NULLABLE会回到原来的状态。如果在创建主键后,对原来为NULL的主键列,显式设为NOT NULL,在删除主键后仍然是NOT NULL。比如在创建主键后,执行下面的操作,可以看到:
SQL> alter table t modify (b int not null);
Table altered.
SQL> alter table t drop constraint pk_t;
Table altered.
SQL> desc t
Name Null? Type
----------------------------------------- -------- ----------
A NUMBER(38)
B NOT NULL NUMBER(38)
C NUMBER(38)
D NUMBER(38)
再做如下的实验:
SQL> drop table t;
Table dropped.
SQL> create table t (a int,b int,c int,d int);
Table created.
SQL> alter table t add constraint uk_t_1 unique (a,b);
Table altered.
SQL> alter table t add constraint uk_t_2 unique (c,d);
Table altered.
可以看到可以增加两个UNIQUE KEY。看看能不能增加两个主键:
SQL> alter table t add constraint pk_t primary key (c);
Table altered.
SQL> alter table t add constraint pk1_t primary key (d);
alter table t add constraint pk1_t primary key (d)
*
ERROR at line 1:
ORA-02260: table can have only one primary key
由此可以看到一个表只能有一个主键。
SQL> alter table t drop constraint pk_t;
Table altered.
SQL> insert into t (a ,b ) values (null,null);
1 row created.
SQL> /
1 row created.
SQL> insert into t (a ,b ) values (null,1);
1 row created.
SQL> /
insert into t (a ,b ) values (null,1)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.UK_T_1) violated
SQL> insert into t (a ,b ) values (1,null);
1 row created.
SQL> /
insert into t (a ,b ) values (1,null)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.UK_T_1) violated
主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。
发表评论
-
mysql proxy V0.8.2 测试问题记录
2012-03-08 15:40 19181、 问题:没法输出控制台日志。(控制台日志可以统计分 ... -
mysql用户管理
2012-02-27 16:30 1398网络转载:http://www.cnblogs.com/blo ... -
数据库查询优化技巧(MySQL)
2011-12-19 13:42 1715在数据库程序的开发中,性能是最让人关心和担心的问题之一, ... -
mysql服务器性能调优工具
2011-12-19 12:10 1926数据库服务器的性能在网络服务中往往起着至关重要的作用,通常 ... -
mysql主从服务器搭建配置
2011-12-19 12:07 1738主服务器的(db1)配置 ●my.cnf设置 [mysql ... -
mysql中如何获得数据库的大小
2011-07-15 13:33 2477转载:http://zhidao.zgsj.com/artic ... -
mysql中常用命令收集
2011-04-22 17:13 1143①查看表中各列的具体属性: show full col ... -
mysql慢查询功能介绍及其相关工具的使用
2011-03-07 11:43 3892【Backgroud】在以MySQL为 ... -
MySQL中查看表状态
2011-02-18 17:19 2641#MySQL中查看表状态 SHOW TABLE STATUS ... -
MySQL-Proxy负载平衡测试遇到的问题及其分析 && MySQL-Proxy工作机制
2010-12-23 16:19 4269(1)MySQL-Proxy负载平衡测试中遇到的问题及其分析 ... -
mysql中查看该台数据库服务器执行的查询次数
2010-11-26 17:26 2072mysql> show status like & ... -
mysql中GROUP BY的高级应用
2010-10-18 19:53 2002有SQL文如下所示: SELECT place_id, con ... -
mysql中GROUP BY结合GROUP_CONCAT的使用
2010-10-18 18:59 1657有查询语句如下所示: select id, type, si ... -
MySQL Proxy Version 0.8.0安装手顺
2010-09-08 15:56 3186MySQL Proxy Version 0.8.0安装 ... -
MySql查看数据库和表的创建语句
2010-07-27 16:59 19971博文参照:http://zhuixue.iteye.c ... -
查看mysql服务器的端口
2010-07-21 17:13 3350##########查看mysql服务器的端口####### ... -
MySQL Sandbox的安装
2010-07-13 17:37 1798安装MySQLSandbox 下载地址:https://la ... -
利用MySQL Sandbox同一台机器上创建多个MySQL服务器
2010-07-13 17:33 2742创第一个MySQL服务器---sp ... -
USING SPIDER (Simple case)
2010-07-12 17:28 1568利用spider storage engine的简单实 ... -
spider storage engine实践时遇到[Mysql::Error: This xid is already exist: COMMIT]的解决办法
2010-07-07 17:16 2085参考博文:http://ilgnep.iteye.com/bl ...
相关推荐
在MySQL数据库中,`key`、`primary key`、`unique key`和`index`都是与数据表结构和查询性能紧密相关的概念。了解它们的区别对于优化数据库操作至关重要。 1. **Key** - Key是一种索引约束,它限制了表中特定列的...
总的来说,理解 PRIMARY KEY、UNIQUE KEY 和 INDEX 的区别,以及如何适当地在数据库设计中使用它们,对于优化数据库性能和保证数据完整性至关重要。在创建索引时,应考虑查询模式、存储需求和性能平衡,确保数据库在...
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 CREATE TABLE 时...
约束是用于限制数据的输入的规则,MySQL 中常用的约束有 PRIMARY KEY、FOREIGN KEY、UNIQUE、CHECK 等。 * 主键约束(PRIMARY KEY):用于指定表中的唯一标识符,例如 `CREATE TABLE t_user1(userId INT PRIMARY ...
1、建表语句: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, ... UNIQUE KEY `idxunique_first_name_gender` (`first_name`
撤销 PRIMARY KEY 约束,两者均需使用 `ALTER TABLE` 语句,但具体语法有所区别。 **唯一约束(UNIQUE)**: - MySQL 中创建唯一约束: ```sql CREATE TABLE table_name ( column_name2 datatype UNIQUE, ... ); ...
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 下面的 SQL 在 ...
id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE ); ``` 查询所有用户信息: ```sql SELECT * FROM users; ``` 插入新用户: ```sql INSERT INTO users (name, ...
在MySQL中,常见的索引类型包括普通索引(INDEX)、主键索引(PRIMARY KEY)、唯一索引(UNIQUE INDEX)、联合索引(多个列的索引)和全文索引(FULLTEXT INDEX)。 `key`(键)则是数据库中用于确保数据完整性的...
UNIQUE KEY `uk_bank_account` (`bank_account`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4; ``` 本示例中,我们创建了一个银行余额表,包含 `id`、`balance` 和 `bank_account` 三...
- PRIMARY KEY约束也自动具有UNIQUE属性,但它还增加了自动索引和不允许NULL值的特点。 **创建UNIQUE约束的方法**: 1. **在创建表时**: - **MySQL**: ```sql CREATE TABLE Persons ( Id_P int NOT NULL, ...
- **特点**: 用于索引的所有字段都被使用,并且索引为 PRIMARY KEY 或 UNIQUE NOT NULL。 - **应用**: 当使用 "=" 运算符进行匹配时使用。例如: - `SELECT * FROM ref_table, other_table WHERE ref_table.key_...
2. const:数据表最多只有一个匹配行,因为只匹配一行数据,所以很快,常用于 PRIMARY KEY 或者 UNIQUE 索引的查询。 3. eq_ref:mysql 手册是这样说的:对于每个来自于前面的表的行组合,从该表中读取一行。这可能...
create table t5 (id int primary key, stuid int, constraint uq_stuid unique, stutel int unique); 三、外键约束 外键约束是将主表的某些列和子表的某些列关联在一起,以确保数据的完整性和统一性。例如: ...
唯一索引与主键(Primary Key)类似,主键同时要求字段非空(NOT NULL),但一个表只能有一个主键,而可以有多个唯一索引。 3. 全文索引(Full Text):这是专门用于全文搜索的索引,适用于处理长文本的搜索,如...
在IT领域,数据库是存储和管理数据的核心工具,而MySQL是一种广泛应用的关系型数据库管理系统(RDBMS),尤其在互联网行业中,由于其开源、免费、高效和稳定的特点,被广泛用于网站开发、数据分析以及各种业务系统。...
综上所述,MySQL 和 SQL Server 在数据定义方面有相似之处,但在具体语法和功能上有所区别。选择哪个数据库取决于应用场景、性能需求、开发人员熟悉程度等因素。理解这些差异有助于更有效地设计和管理数据库。
综上所述,通过上述示例可以看出MySQL提供了丰富的功能来帮助用户创建和管理数据库和表格。从简单的数据表结构设计到复杂的主键、外键以及约束的应用,这些知识点都是学习和使用MySQL的基础。掌握这些基本操作对于...