`

第二部分 1NF ALTER

    博客分类:
  • SQL
阅读更多

一、原子性

    数据根据需求,被分割成最小块。分割必须是创建有效率的表所需的。如果不需要增加额外的列,就不要因为可增加而增加。

    具有原子性的数据的列不会有多个类型相同的值。例如列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条记录
分享到:
评论

相关推荐

    MySQL数据库基础实例教程(第2版)(微课版)-教学课件.zip

    第二章 数据库设计:这一章深入讨论了数据库设计的原理,包括需求分析、实体关系模型(ER模型)、范式理论(1NF, 2NF, 3NF等),以及如何创建数据库表结构。通过实例,学习者将学会如何设计符合业务需求的数据模型。...

    数据的纯净之旅:SQL中的第一范式(1NF)

    1. **查询**(Query):从数据库中检索数据。 2. **插入**(Insert):向数据库表中添加新的数据行。 3. **更新**(Update):修改数据库表中的现有数据。 4. **删除**(Delete):从数据库表中移除数据。 5. **创建...

    ACCP-SQL_ 第二章资料

    - **第二范式(2NF)**:在满足1NF的基础上,消除非主属性对候选键的部分依赖。 - **第三范式(3NF)**:在满足2NF的基础上,消除非主属性对候选键的传递依赖。 3. **SQL语句用于创建数据库**: 使用`CREATE ...

    (完整word版)数据库原理与应用教程何玉洁五——八章课后习题部分答案.doc

    * 第二范式(2NF):如果 R(U,F)∈1NF,并且 R 中的每个非主属性都完全函数依赖于主码,则 R(U,F)∈2NF * 第三范式(3NF):如果 R(U,F)∈2NF,并且所以的非主属性都不传递依赖于主码,则 R(U,F)∈3NF 七、部分依赖...

    《SQL Server 2016数据库应用教程》试卷及答案3套.pdf

    2. 第二范式(2NF):在1NF基础上,消除非主属性对候选键的部分函数依赖。 3. 第三范式(3NF):在2NF基础上,消除非主属性对候选键的传递函数依赖。 4. 阿尔姆特朗推理法则(Armstrong's Axioms):包括自合规则、...

    大学计算机数据库练习题.pdf

    20. 第二范式(2NF):消除了部分函数依赖的1NF关系模式必定是2NF。 21. 不满足第一范式(1NF)的原因:在"部门"关系中,因"部门成员"属性导致不满足1NF,因为它包含了一个集合值。 22. 主键确定:在"销售"实体中...

    数据库原理练习题1.pdf

    范式是衡量关系数据库规范化程度的标准,通常有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和第四范式(4NF)。第5题提到,任何二元关系模式至少可以达到1NF,这是最基本的范式要求。 在概念设计阶段,实体...

    (完整word版)数据库原理第4版-习题参考答案(陈志泊).doc

    3. **范式**:包括1NF(第一范式)、2NF(第二范式)、3NF(第三范式)和BCNF(博科斯范式),每个范式都对应着数据依赖的特定规则,旨在减少数据冗余和提高数据一致性。 **第三部分:SQL语言** 1. **SQL语句**:...

    MySQL数据库基础面试知识点

    * 第二范式(2NF):如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。 * 第三范式(3NF):表中的非主键列之间不能相关依赖...

    不错的数据库课件及应用

    此外,本章可能会涉及数据库模式设计和范式理论,例如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(巴斯-科德范式)。 第03章“结构化查询语言-SQL”是数据库操作的核心,内容可能包括SQL的基本语法,如...

    mysql基础知识总结(第二版)

    第二范式(2NF)要求表必须消除部分依赖;第三范式(3NF)要求消除传递依赖,确保数据独立性。 SQL语言是与MySQL交互的主要工具。基本概念包括数据库术语,如表、字段、记录等,以及建表规范,如指定字段类型、长度...

    mysql数据库应用从入门到精通(第2版)

    对于数据库设计,范式理论是必不可少的,比如第一范式(1NF)、第二范式(2NF)和第三范式(3NF),这些都是为了减少数据冗余和提高数据完整性。书中可能会介绍如何进行数据库规范化设计。 备份与恢复是数据库管理...

    SQL Server2005知识要点

    - 第二范式(2NF):在1NF基础上,消除部分函数依赖,确保每个非主键字段完全依赖于主键。 - 第三范式(3NF):在2NF基础上,消除传递依赖,确保非主键字段不依赖于其他非主键字段。 3. 设计数据库的步骤: - ...

    mysql数据库设计(1).pdf

    第二范式(2NF)要求表去除部分依赖;第三范式(3NF)要求表去除传递依赖;巴斯-科德范式(BCNF)进一步消除数据依赖;第四范式(4NF)处理多值依赖;而第五范式(5NF,又称完美范式)是最理想的范式状态。遵循这些...

    MySQL面试题集1

    2. **第二范式(2NF)**:在满足1NF的基础上,所有非主键列完全依赖于主键,不存在部分依赖。这意味着表中每一列都直接依赖于整个主键,而不是主键的一部分。 3. **第三范式(3NF)**:除了满足2NF,还要求表中每一...

    数据库课件上下ppt

    2. 第二范式(2NF):在1NF基础上,消除非主属性对候选键的部分依赖。 3. 第三范式(3NF):在2NF基础上,消除非主属性对候选键的传递依赖。 4. BCNF(博科斯范式):消除所有非平凡的函数依赖,提高数据一致性。 ...

    山东理工大学试题纸A(1).docx

    - **必定是1NF**:2NF要求非主属性完全依赖于主键,同时也符合1NF的要求。 - **必定是3NF**:不一定,只有当非主属性不传递依赖于主键时才是3NF。 - **必定是BCNF**:不一定,BCNF要求每一个决定因素都是候选码。 *...

    数据库原理试题及答案.pdf

    首先,文件中提到了多种数据库范式(Normal Forms),包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF(Boyce-Codd Normal Form)。范式是关系数据库设计的标准,用以确保数据的组织方式能够减少...

Global site tag (gtag.js) - Google Analytics