1. 基础理论:
1.主键和外键的设计原则。
a. 主键应尽量分离于业务的。
b. 主键应尽量是单列的,以便提高筛选和连接的效率。
c. 主键不应该被更新,且不含动态变化的数据。
d. 主键应是有计算机自动生成的。
2.常见的主键选取方式
a.自动增长。
b.手动增长字段
c.UniqueIdentifier
d.COMB Combine 组合类型
目前再项目中用到了a,c两种。以下是优缺点
使用自增长做主键的优点:
1、很小的数据存储空间
2、性能最好
3、容易记忆
使用自增长做主键的缺点:
1、如果存在大量的数据,可能会超出自增长的取值范围
2、很难(并不是不能)处理分布式存储的数据表,尤其是需要合并表的情况下
3、安全性低,因为是有规律的,容易被非法获取数据
使用GUID做主键的优点:
1、它是独一无二的,出现重复的机会少
2、适合大量数据中的插入和更新操作,尤其是在高并发和分布式环境下
3、跨服务器数据合并非常方便
4、安全性较高
使用GUID做主键的缺点:
1、存储空间大(16 byte),因此它将会占用更多的磁盘空间
2、会降低性能
3、很难记忆
COMB Combine 组合类型的方法:uuid+时间
ID=CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)
1
2. SQL 中的约束
2.1 Not Null
作用:强制字段始终包含值,若字段为null,无法插入或更新记录。
/-- 创建表时添加 not null 约束
create table table_NotNull
(
ID int identity(1,1) primary key,
Name varchar(50) not null
)
/--对已经存在是某列添加not null 约束
/--已存在的数据中 Name均有值
alter table dbo.table_NotNull alter column Name varchar(20) not null
/--已存在的数据中 存在Name为null 的情况。以后无法插入name=null 的数据
alter table dbo.table_NotNull with nocheck add constraint Name check(Name is not null)
1
2
3
4
5
6
7
8
9
10
11
2.2 unique
作用:约束唯一标识数据库-表中的每条数据。
create table table_Unique
(
ID int primary key Identity(1,1) not null,
Name varchar(50) unique,
Age int not null
)
alter table table_Unique add unique(Age)
1
2
3
4
5
6
7
2.3 primary key
作用:主键,记录唯一标识,主键自动拥有not null及 unique约束。
/--定义多个列的primaey key 约束
create Table Table_PrimaryKey
(
Code varchar(20),//自动约束为not null
DateInfo datetime,//自动约束为not null
Name varchar(20) not null,
constraint pk_Table_PrimaryKey Primary Key(Code,DateInfo)
)
-- 主键列应申明不包含null 值
ALTER TABLE Table_PrimaryKey ADD PRIMARY KEY (Code )
ALTER TABLE Table_PrimaryKey ADD CONSTRAINT pk_PersonID PRIMARY KEY (Code,DateInfo)
1
2
3
4
5
6
7
8
9
10
11
2.4 foreign key
作用:外键,预防破坏表之间的连接行为,防止非法数据插入外键列。
create Table Table_ForeignKey
(
Id int identity(1,2) primary key,
Code int,
DateInfo datetime,
constraint fk_ForeignKey foreign key(Code) references table_Unique(ID)
)
--撤销外键约束 定义外键且已命名
ALTER TABLE [dbo].[Table_ForeignKey] drop constraint fk_ForeignKey
1
2
3
4
5
6
7
8
9
2.5 Check
作用:限制列的取值范围
create Table Table_Check
(
Id int identity(1,2) primary key,
Age int not null,
State int,
constraint ck_Check check(Age>20 and State in (0,1))
)
--删除同上
1
2
3
4
5
6
7
8
2.6 DEFAULT
作用:设置默认值
create Table Table_DEFAULT
(
Id int identity(1,2) primary key,
Age int not null,
State int,
Name varchar(20) DEFAULT 'Sandnes'
)
--更改
ALTER TABLE Table_DEFAULT ALTER COLUMN City
SET DEFAULT 'ss' (drop DEFAULT )
1
2
3
4
5
6
7
8
9
10
参考:1. 优缺点 http://www.yyjjssnn.cn/articles/754.html
2. 4中常见方法 http://blog.sina.com.cn/s/blog_5f39af320102wsfs.html
3.sql 基础:http://www.runoob.com/sql/sql-default.html
相关文章
- 主键约束(PRIMARY KEY) [MySQL][数据库]
- 数据加载与保存-通用方式 使用df.write.save方法保存数据,同样可通过format指定数据类型。 save方法后需传入保存路径(针对csv、orc、parquet、textFile格式)。 option方法用于设置特定格式的参数。 保存操作可使用SaveMode来指明如何处理数据,如覆盖(overwrite)、追加(append)等,通过mode方法设置。 特定格式保存 与加载类似,Parquet、JSON、CSV等格式均可通过指定format进行保存。 MySQL等关系型数据库的写入也通过JDBC实现,需指定format为jdbc,并传入数据库连接信息及表名。 注意事项
- 数据库表创建 - 主键约束:在创建数据库表时,可以使用主键约束来唯一标识记录
- 数据库字符类型与约束条件
- 达梦数据库、表字段创建索引或删除索引,增加表字段、修改字段类型或长度、修改注释,大字段类型修改为varchar 类型,修改表名及注释sql语句
- 数据库[类型,基本概念,生活实例],登录mysql数据库的三种方式,修改sql编辑器界面样式及字体样式
- 添加约束及联合主键
- Oracle数据库:如何创建约束及创建约束的SQL语句,正则约束的SQL语句
- SQLSERVER数据库设置varchar类型主键自增方法
- 自增还是UUID?MYSQL数据库主键的类型选择