5. 创建表
6. 数据完整性
为了实现数据完整性,需要检验数据库表中的每行和每列数据是否符合要求
在创建表的时候,应该保证以后的数据输入是正确的,错误的数据不允许输入
6.1 域完整性
不同的字段需要设置为各种合适的类型,比如年龄就是整数类型
6.2 默认值
默认值是指如果用户没有指定值的情况下会记录的此字段指定一个提供一个预先设定的值
可以把居住地默认值设置为北京
6.3 非空约束
我们可以指定某个字段不能不输入,必须提供一个非空的值
姓名字段不能为空
7.实体完整性
7.1 主键约束
7.1.1 主键
表中一列或者几列组合的值能用来唯一标识表中的每一行,这样的列或者列组合称为表的主键,主键表的数据不同重复。
如果两列或者多列组合起来唯一标识表中的每一行,则该主键又称为"组合键"
主键的选择标准
最少性 尽量选择单个键作为主键
稳定性 ,由于主键是用来在两个表间建立联接的,所以不能经常更新,最好就不更新
7.1.2 外键
成绩表中的学生ID应该在学生表中是存在的 我们应该让成绩表中的ID只能引用学生表中的ID,它们的值应该是一一对应的,也就是说成绩表中的ID是成绩表中的外键,对应学生表的主键 ,这样就可以保证数据的引用完整性
7.1.3 唯一约束
唯一约束是指某个字段值是唯一的,在所有的记录中不能有重复的值.
学生的身份证号可以设置为唯一约束
7.1.4 标识列
当表中没有合适的列作为主键时可以考虑增加标识列,标识列是一个无实际业务含义的列,仅仅用来区分每条记录。
标识列的值是自动生成的,不能在该列上输入数据
思考: 如果标识列id的初始值为1,增长量为3,则输入3行数据以后,再删除1行,下次再输入数据行的时候,标识值自动插入的值是多少?
7.1.5 外键约束
一个表的外键必须引用另一个表的主键,比如成绩表中的学生ID会引用学生表的主键,课程ID会引用成绩表的主键
主表没有记录,子表中不能添加相应的记录
修改和删除主表记录不能让子表记录孤立,必须相应修改和删除
数据操作 8.1 创建学生表
CREATE TABLE `student` (`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,`name` varchar(50) NOT NULL ,`age` int(11) NULL DEFAULT NULL ,`city` varchar(50) DEFAULT '北京' , )
8.2 增加身份证号字段
ALTER TABLE `student` ADD COLUMN `idcard` varchar(15) NULL AFTER `city`; --增加身份证字段ALTER TABLE `student` MODIFY COLUMN `idcard` varchar(18) DEFAULT NULL AFTER `name`; --修改身份证字段ALTER TABLE `student`DROP COLUMN `idcard`; --删除身份证字段
8.3 添加约束
-- 主键约束ALTER TABLE `student` ADD PRIMARY KEY (`id`);-- 唯一约束ALTER TABLE `student` ADD UNIQUE INDEX `uq_idcard` (`idcard`) ;-- 默认约束ALTER TABLE `student` MODIFY COLUMN `city` varchar(50) DEFAULT '北京' AFTER `age`;-- 外键约束ALTER TABLE `score` ADD CONSTRAINT `fk_stuid` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`);-- 删除约束ALTER TABLE `score` DROP FOREIGN KEY `fk_stuid`;
8.4 准备数据
CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `idcard` varchar(18) DEFAULT NULL, `age` int(11) DEFAULT NULL, `city` varchar(50) DEFAULT '', PRIMARY KEY (`id`) );CREATE TABLE `course` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) );CREATE TABLE `score` ( `student_id` int(11) NOT NULL DEFAULT '0', `course_id` int(11) NOT NULL DEFAULT '0', `grade` float DEFAULT NULL, PRIMARY KEY (`student_id`,`course_id`), KEY `fk_courseid` (`course_id`), CONSTRAINT `fk_courseid` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`), CONSTRAINT `fk_stuid` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
9. SQL
9.1 SQL是什么
Structured Query Language:结构化查询语言
9.2 为什么要用SQL
使用界面操作数据库不方便
我们需要通过应用程序去操作数据库
9.3 SQL组成
9.3.1 DDL(data definition language)是数据定义语言
主要的命令有CREATE
、ALTER
、DROP
等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
9.3.2 DML(data manipulation language)是数据操纵语言
它们是SELECT
、UPDATE、
INSERT、
DELETE`,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
9.3.3 DCL(DataControlLanguage)是数据库控制语言
是用来设置或更改数据库用户或角色权限的语句,包括(grant
,revoke
等)语句
9.4 SQL运算符
是一种符号,它是用来进行列间或者变量之间的比较和数学运算的
9.4.1 算术运算符
运算符 | 说明 |
---|---|
+ | 加运算,求两个数或表达式相加的和,如1+1 |
- | 减少减运算,求两个数或表达式相减的差,如4-1 |
* | 乘运算,求两个数或表达式相乘的积,如2*2 |
/ | 除运算,求两个数或表达式相除的商,如6/4的值为1 |
% | 取模运算,求两个数或表达式相除的余数,如:6%4的值为2 |
查询姓名全称
9.4.2 逻辑运算符
运算符 | 说明 |
---|---|
AND | 当且仅当两个布尔表达式都为true时,返回TRUE |
OR | 当且仅当两个布尔表达式都为false,返回FALSE |
NOT | 布尔表达式的值取反 |
9.4.3 比较运算符
运算符 | 说明 |
---|---|
= | 等于 |
> | 大于 |
< | 小于 |
<> | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |