确保数据的完整性 = 在创建表时给表中添加约束
完整性的分类:
- 实体完整性(行完整性):
- 域完整性(列完整性):
- 引用完整性(关联表完整性):
1
2
3
1
2
3
1.2 实体完整性
实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行数据不重复。
约束类型:
主键约束(primary key)
唯一约束(unique)*
自动增长列(auto_increment)*
1.2.1 主键约束(primary key)
注:每个表中要有一个主键,但一张表的主键约束只能有1个
特点:数据唯一,且不能为null
主键约束,主键字段中的数据不能为NULL,也不能重复。
主键相关的术语?
- 主键约束 : primary key
- 主键字段 : id字段添加primary key之后,id叫做主键字段
- 主键值 : id字段中的每一个值都是主键值。
1
2
3
1
2
3
主键有什么作用?
- 表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键。
- 主键的作用:主键值是这行记录在这张表当中的唯一标识。(就像一个人的身份z号码一样。)
1
2
1
2
主键的分类?
1:根据主键字段的字段数量来划分:
- 单一主键(推荐的,常用的。)
- 复合主键(多个字段联合起来添加一个主键约束)(复合主键不建议使用,因为复合主键违背三范式。)
-
2:根据主键性质来划分:
- 自然主键:主键值最好就是一个和业务没有任何关系的自然数。(这种方式是推荐的)
- 业务主键:主键值和系统的业务挂钩,例如:拿着yhk的卡号做主键,拿着身份z号码作为主键。(不推荐用)
最好不要拿着和业务挂钩的字段作为主键。因为以后的业务一旦发生改变的时候,主键值可能也需要
,随着发生变化,但有的时候没有办法变化,因为变化可能会导致主键值重复。
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
第一种添加方式:在列名后面直接添加:
--stuId作为主键
CREATE TABLE student( id int primary key, stuId varchar(50) )
1
2
1
2
第二种添加方式:此种方式优势在于,可以创建联合主键
CREATE TABLE student
(
id int, name varchar(50),
primary key(id)
)
--可以创建联合主键
CREATE TABLE student
(
classid int, stuid int, name varchar(50),
primary key(classid,stuid)
)
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
第三种添加方式:在创建好表之后添加
CREATE TABLE student
(
id int, name varchar(50)
)
--在创建表之后对表的列进行添加主键
ALTER TABLE student ADD PRIMARY KEY (id)
1
2
3
4
5
6
1
2
3
4
5
6
1.2.2 唯一约束(unique)
唯一约束修饰的字段具有唯一性,不能重复。但可以为NULL。
create table t_user(
id int,
username varchar(255) unique // 唯一约束
)
1
2
3
4
1
2
3
4
1.2.3 自动增长列(auto_increment)
自增是给主键添加自动增长的数值,列只能是整数类型
create table t_user(
id int primary key auto_increment, // id字段自动维护一个自增的数字,从1开始,以1递增。
username varchar(255)
)
--用了自增,插入数据时,就不需要自己赋值
insert into t_user(username) values('a')
insert into t_user(username) values('b')
insert into t_user(username) values('c')
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
1.3 域完整性
域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较
域完整性约束:数据类型 非空约束(not null) 默认值约束(default)
1.3.1 数据类型
只选取了常见的数据类型:
字符型:
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65 535字节 长文本数据
数值类型
类型 大小 范围(有符号) 范围(无符号 ) 用途
tinyint 1 字节 (-128,127) (0,255) 小整数值
smallint 2 字节 (-32 768,32 767) (0,65 535) 大整数值
INT 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
日期类型:
类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY
class sqlHelper{\x0d\x0apublic $conn \x0d\x0apublic $dbname="数据库名称" \x0d\x0apublic $username="数据库用户名" \x0d\x0apublic $password="数据库密码" \x0d\x0apublic $host="localhost" \x0d\x0a//连接数据库\x0d\x0apublic function __construct(){\x0d\x0a$this->conn=mysql_connect($this->host,$this->username,$this->password) \x0d\x0aif(!$this->conn){\x0d\x0adie("连接失败".mysql_error()) \x0d\x0a}\x0d\x0amysql_select_db($this->dbname,$this->conn) \x0d\x0a}\x0d\x0a//执行查询语句\x0d\x0apublic function execute_dql($sql){ \x0d\x0a$res=mysql_query($sql,$this->conn) \x0d\x0areturn $res \x0d\x0a}\x0d\x0a//执行增填改语句\x0d\x0apublic function execute_dml($sql){\x0d\x0a$b=mysql_query($sql,$this->conn) \x0d\x0aif(!$b){\x0d\x0areturn 3 \x0d\x0a}else{\x0d\x0aif(mysql_affected_rows($this->conn)){ \x0d\x0areturn 1//表示OK\x0d\x0a}else{\x0d\x0areturn 2//表示没有行收到影响 \x0d\x0a}\x0d\x0a}\x0d\x0a}\x0d\x0a}class文件是JAVA文件编译后而产生的.我是从网上下的一个小颖的反编译器.
class反编译为JAVA后修改JAVA的内容保存.
再用JAVA编译工具,或直接执行JAVAC 命令
将JAVA文件编译成CLASS,就OK啦.........
如果你看不懂就不要管了,用不上的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)