一、原子性
数据根据需求,被分割成最小块。分割必须是创建有效率的表所需的。如果不需要增加额外的列,就不要因为可增加而增加。
具有原子性的数据的列不会有多个类型相同的值。例如列ingredient中,一行可能同时有:milk、oil、egg三个值,这样就不具备原则性了。试想,如何查找列ingredient中的egg呢?
具有原子性的表不会含有多个表达同一信息的列。例如一个表中含有列student1、student2,、student3,那么这个表就不具备原子性。
二、主键
主键是表中的某列,它可以让每一条记录具有唯一性。
主键不能为NULL,其值不能被修改;插入新纪录时必须给出主键的值;另外,主键还应该简洁,只含独一无二的内容,不该有其它内容。 另外,可以单独创建一个ID列来存放主键。
CREATE TABLE my_contacts # 创建表联系人 ( contact_id INT NOT NULL; name VARCHAR(30) NOT NULL, gender CHAR(1) NOT NULL DEFAULT 'M', #'M'或'F' birthday DATE, # 1980-09-15 phone VARCHAR(11) NOT NULL, information BLOB , PRIMARY KEY(contact_id) );
CREATE TABLE my_contacts # 创建表联系人 ( contact_id INT NOT NULL AUTO_INCREMENT; name VARCHAR(30) NOT NULL, gender CHAR(1) NOT NULL DEFAULT 'M', #'M'或'F' birthday DATE, # 1980-09-15 phone VARCHAR(11) NOT NULL, information BLOB , PRIMARY KEY(contact_id) );
一个表中只能有一个AUTO_INCREMENT,且只能是INTEGER型的。
如果主键是AUTO_INCREMENT,那么插入时可以不写明主键的值,主键的值会自动加一。当写明主键的值时,如果主键的值在表中已经有了,那么插入会失败。
1NF:具有原子性和主键。
三、SHOW命令
SHOW TABLE my_contacts; SHOW CREATE TABLE my_contacts; #显示创建表的语句 SHOW COLUMNS FROM my_contacts; #显示表的所有列及其语句类型 SHOW CREATE DATABASE basename; SHOW INDEX FROM my_contacts; #显示索引列及索引类型 SHOW WARNINGS; #得到更加确切的警告内容
四、ALTER命令
ALTER一般与CHANGE、MODIFY、ADD、DROP搭配来修改表的结构。
ALTER TABLE my_contacts ADD COLUMN phone VARCHAR(10); #默认添加列放在最后 ALTER TABLE my_contacts ADD COLUMN phone VARCHAR(10) AFTER name; #添加列phone放在name后面 ALTER TABLE my_contacts ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST, #添加列放在最前面 ADD PRIMARY KEY(id); #添加主键
除了FIRST、AFTER name外,还可以用BEFORE name、LAST、SECOND、THIRD、FIFTH等。
修改表名:
ALTER TABLE projeckt RENAME TO project_list;
删除某一列
ALTER TABLE project_list DROP COLUMN date;
CHANGE命令
CHANGE可以修改表名、数据类型、设置主键、改变AUTO_INCREMENT等。
如果列discription为VARCHAR(30),列name为VARCHAR(10),可以用CHANGE同时修改名称与数据。
修改数据类型时,当数据不兼容,命令会执行失败;当数据兼容时,可能会发生数据丢失,例如VARCHAR(10)改为CHAR(1),'Bonzo'会改为'B'。
ALTER TABLE project_list CHANGE COLUMN number project_id INT NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(project_id); #将列number改为project_id并设为主键 ALTER TABLE project_list CHANGE COLUMN discription project_desc VARCHAR(70); #改变列名和数据类型 ALTER TABLE project_list CHANGE COLUMN name project_name VARCHAR(30); ALTER TABLE your_table CHANGE your_id your_id INT(11) NOT NULL AUTO_INCREMENT; #添加AUTO_INCREMENT ALTER TABLE your_table CHANGE your_id your_id INT(11) NOT NULL ; #删除AUTO_INCREMENT
CHANGE可以用来只改变数据类型,但用MODIFY更好。
ALTER TABLE project_list CHANGE COLUMN project_desc project_desc VARCHAR(100); ALTER TABLE project_list MODIFY COLUMN project_desc VARCHAR(100);
一个表一旦建立,其列的先后顺序就不能改变,用MODIFY改变列的顺序时,实际是SQL软件背后将当前数据缓存,然后删除要移动的列,再用ALTER指定添加位置。
ALTER TABLE hooptie RENAME TO car_table, ADD COLUMN car_id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY(car_id), ADD COLUMN VIN VARCHAR(16) AFTER car_id, CHANGE COLUMN mo model VARCHAR(20), MODIFY COLUMN color AFTER model, MODUFY COLUMN year SIXTH, CHANGE COLUMN howmuch price DECIMAL(7,2)
五、CASE
CASE可以与SELECT、INSERT、DELETE、UPDATE搭配。
UPDATE movie_table SET category= CASE WHEN drama='T' THEN 'drama' WHEN comedy='T' THEN 'comedy' WHEN action='T' THEN 'action' WHEN gore='T' THEN 'gore' WHEN scifi='T' THEN 'scifi' WHEN for_kids='T' THEN 'family' WHEN catoon='T' THEN 'family' ELSE 'misc' END #后面还可以加上WHERE之句
六、ORDER BY
SELECT title ,category FROM movie_table WHERE title LIKE 'A%' AND category='family' ORDER BY title; SELECT title ,category,purchases FROM movie_table ORDER BY category,purchases ; #设置第二排序 SELECT title ,category,purchases FROM movie_table ORDER BY category ASC,purchases DESC; #ASC是默认升序,DESC是降序
ORDER BY的顺序为:!"#$%&'()*+,./0123:;<=>?@ABCD[\]^_`abcd~
七、SELECT与函数
字符串函数:
SELECT RIGHT(location,2) FROM mycontacts; #从列location(字符串类型)选取两个字符 SELECT SUBSTRING_INDEX(location,',',1) FROM my_contacts; #取列location中第1个‘,’前面的所有内容 UPDATE mycontacts SET state=RIGHT(location,2);
还有:SUBSTRING(string,start,lenth)获取子字符串。SELECT SUBSTRING('San Antonio,TX',5,3)。
UPPER(string)、LOWER(string)转大小写。SELECT UPPER('Abc')。
REVERSE(string)反转字符串。SELECT REVERSE('hello')。
LTRIM(string)、RTRIM(string)清除左右的空格。SELECT LTRIM(' abc').
LENGTH(string)获取字符个数。SELECT LENFTH(' china ')。
注意:字符串函数并没有改变表中的内容,它只是修改了查询结果。
非字符串函数:
SELECT SUM(sales) FROM cookie_sales WHERE name='Nicole';#name为Nicole的sales之和 SELECT name,SUM(sales) FROM cookie_sales GROUP BY name ORDER BY SUM(sales) DESC; #根据name分类求sales和,并用和排序 SELECT name,AVG(sales) FROM cookie_sales GROUP BY name ; #根据name分类求平均 SELECT name,MAX(sales) FROM cookie_sales GROUP BY name ; #每一种name的最大sales SELECT name,MIN(sales) FROM cookie_sales GROUP BY name ; #每一种name的最小sales SELECT COUNT(sales_date) FROME cookie_sales;#返回多少个sales_date不为null SELECT DISTINCT sales_date FROM cookie_sales ORDER BY sales_date; #DISTINCT是关键字不是函数,选出不同的值 SELECT COUNT(DISTINCT sales_date) FROM cookie_sales;
八、LIMIT
SELECT name,SUM(sales) FROM cookie_sales GROUP BY name ORDER BY SUM(sales) DESC LIMIT 2; #只显示两行记录 SELECT name,SUM(sales) FROM cookie_sales GROUP BY name ORDER BY SUM(sales) DESC LIMIT 0,4; #从第0条记录开始显示4条记录 SELECT name,SUM(sales) FROM cookie_sales GROUP BY name ORDER BY SUM(sales) DESC LIMIT 1,1; #只显示第2条记录
相关推荐
第二章 数据库设计:这一章深入讨论了数据库设计的原理,包括需求分析、实体关系模型(ER模型)、范式理论(1NF, 2NF, 3NF等),以及如何创建数据库表结构。通过实例,学习者将学会如何设计符合业务需求的数据模型。...
1. **查询**(Query):从数据库中检索数据。 2. **插入**(Insert):向数据库表中添加新的数据行。 3. **更新**(Update):修改数据库表中的现有数据。 4. **删除**(Delete):从数据库表中移除数据。 5. **创建...
- **第二范式(2NF)**:在满足1NF的基础上,消除非主属性对候选键的部分依赖。 - **第三范式(3NF)**:在满足2NF的基础上,消除非主属性对候选键的传递依赖。 3. **SQL语句用于创建数据库**: 使用`CREATE ...
* 第二范式(2NF):如果 R(U,F)∈1NF,并且 R 中的每个非主属性都完全函数依赖于主码,则 R(U,F)∈2NF * 第三范式(3NF):如果 R(U,F)∈2NF,并且所以的非主属性都不传递依赖于主码,则 R(U,F)∈3NF 七、部分依赖...
2. 第二范式(2NF):在1NF基础上,消除非主属性对候选键的部分函数依赖。 3. 第三范式(3NF):在2NF基础上,消除非主属性对候选键的传递函数依赖。 4. 阿尔姆特朗推理法则(Armstrong's Axioms):包括自合规则、...
20. 第二范式(2NF):消除了部分函数依赖的1NF关系模式必定是2NF。 21. 不满足第一范式(1NF)的原因:在"部门"关系中,因"部门成员"属性导致不满足1NF,因为它包含了一个集合值。 22. 主键确定:在"销售"实体中...
范式是衡量关系数据库规范化程度的标准,通常有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和第四范式(4NF)。第5题提到,任何二元关系模式至少可以达到1NF,这是最基本的范式要求。 在概念设计阶段,实体...
3. **范式**:包括1NF(第一范式)、2NF(第二范式)、3NF(第三范式)和BCNF(博科斯范式),每个范式都对应着数据依赖的特定规则,旨在减少数据冗余和提高数据一致性。 **第三部分:SQL语言** 1. **SQL语句**:...
* 第二范式(2NF):如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。 * 第三范式(3NF):表中的非主键列之间不能相关依赖...
此外,本章可能会涉及数据库模式设计和范式理论,例如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(巴斯-科德范式)。 第03章“结构化查询语言-SQL”是数据库操作的核心,内容可能包括SQL的基本语法,如...
第二范式(2NF)要求表必须消除部分依赖;第三范式(3NF)要求消除传递依赖,确保数据独立性。 SQL语言是与MySQL交互的主要工具。基本概念包括数据库术语,如表、字段、记录等,以及建表规范,如指定字段类型、长度...
对于数据库设计,范式理论是必不可少的,比如第一范式(1NF)、第二范式(2NF)和第三范式(3NF),这些都是为了减少数据冗余和提高数据完整性。书中可能会介绍如何进行数据库规范化设计。 备份与恢复是数据库管理...
- 第二范式(2NF):在1NF基础上,消除部分函数依赖,确保每个非主键字段完全依赖于主键。 - 第三范式(3NF):在2NF基础上,消除传递依赖,确保非主键字段不依赖于其他非主键字段。 3. 设计数据库的步骤: - ...
第二范式(2NF)要求表去除部分依赖;第三范式(3NF)要求表去除传递依赖;巴斯-科德范式(BCNF)进一步消除数据依赖;第四范式(4NF)处理多值依赖;而第五范式(5NF,又称完美范式)是最理想的范式状态。遵循这些...
2. **第二范式(2NF)**:在满足1NF的基础上,所有非主键列完全依赖于主键,不存在部分依赖。这意味着表中每一列都直接依赖于整个主键,而不是主键的一部分。 3. **第三范式(3NF)**:除了满足2NF,还要求表中每一...
2. 第二范式(2NF):在1NF基础上,消除非主属性对候选键的部分依赖。 3. 第三范式(3NF):在2NF基础上,消除非主属性对候选键的传递依赖。 4. BCNF(博科斯范式):消除所有非平凡的函数依赖,提高数据一致性。 ...
- **必定是1NF**:2NF要求非主属性完全依赖于主键,同时也符合1NF的要求。 - **必定是3NF**:不一定,只有当非主属性不传递依赖于主键时才是3NF。 - **必定是BCNF**:不一定,BCNF要求每一个决定因素都是候选码。 *...
首先,文件中提到了多种数据库范式(Normal Forms),包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(Boyce-Codd Normal Form)。范式是关系数据库设计的标准,用以确保数据的组织方式能够减少...