`
lautherf
  • 浏览: 14972 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

HEAD FIRST SQL 深入浅出SQL 笔记

 
阅读更多
head first系列真是好书。

==================================================================

数据库是保存表和其他相关SQL结构的容器

数据库内的信息组成了表

列是存储在表中的一块数据

行是一组某个事物的列的集合

行列构成了表
********************************
CREATE DATABASE database_name

USE database_name

CREATE TABLE table_name
(
    column1 VARCHAR(10),
    column2 VARCHAR(4)
);

DESC table_name;

DROP TABLE table_name

********************************

CHAR 取出来都是固定的长度 255
INT INTEGER整数,可以为负。
BLOB 大文本数据
DATE 日期
VARCHAR 文本数据 可调整长度 255
DEC DECIMAL 小数 DEC(6.2) 总位数,小数点后位数
DATETIME 日期和时间

**********************************
INSERT INTO table_name
(column_name1,column_name2)
VALUES
('value1','value2');

可以
1.改变列顺序 (只要列名与数值对应即可)
2.省略列名 (数值顺序与创建表时的列顺序完全相同即可)
3.省略部分列 (只有部分列名与对应的数据)

**********************************

CREATE TABLE table_name
(
    column1 VARCHAR(10) NOT NULL,
    column2 DEC(3.2) NOT NULL DEFAULT 1.00
);


*****************************************

SELECT * FROM table_name
where column_name = 'value'
AND
INT = 0;

DEC INT 不需要用单引号,其他需要

\' or '' 来替代 VALUE中的引号

SELECT column1,column2
FROM table_name
WHERE column_name = 'value'
OR
INT <> 0
OR
name IS NULL
OR
some LIKE '%CA'
OR
some LIKE '_im'
OR
int BETWEEN 30 AND 60
OR
name IN ('name1','name2')
ORhttp://lautherf.iteye.com/admin/blogs/1622447/edit
name NOT IN ('name3');

//
WHERE NOT name BETWEEN value1 AND value2
WHERE NOT name LIKE '%XX'
WHERE name IS NOT NULL
WHERE NOT name IS NULL


****************************************

DELETE FROM table_name
WHERE
column = 'value'

UPDATE table_name
SET column1 = 'value1',column2 = 'value2'
WHERE column3 = 'value3';

UPDATE table_name
SET column = 'value',int = int + 1;

*****************************************

原子性数据

1NF (first normal form) 原子,主键
1.每个数据行必须包含有原子性的值
2.每个数据行必须有独一无二的识别项,人称主键(Primary key)
::::主键不能为NULL;插入新记录时必须指定主键值;主键必须简洁;主键值不能改变

*****************************************


SHOW CREATE TABLE table_name;


******************************************

CREATE TABLE table_name
(
contact_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (contact_id)
);

******************************************

ALTER TABLE table_name
ADD COLUMN column_name INT NOT NULL AUTO_INCREMENT FIRST,
ADD COLUMN1 column1 VARCHAR(10) AFTER column_name,
ADD PRIMARY KEY (content_id);


:: FIRST LAST
:: FIFTH SECOND
:: BEFORE AFTER
*******************************************

ALTER TABLE
table_name
RENAME TO table_name2;

ALTER TABLE table_name2
CHANGE COLUMN column_name1 column_name2 INT NOT NULL AUTO_INCREMENT
ADD PRIMARY KEY(column_name2);

ALTER TABLE table_name
MODIFY COLUMN column_old VARCHAR(20);

ALTER TABLE table_name
DROP COLUMN column_name;
*********************************************

SELECT RIGHT(column,2) FROM table_name
SELECT LEFT(column,2) FROM table_name
SELECT SUBSTRING_INDEX(column,',',1) FROM table_name
UPPER(string)   LOWER(string)
REVERSE(string)
LTRIM(string) RTRIM(string)
LENGTH(string)


***********************************************

UPDATE table_name
SET column_name =
CASE
   WHEN column1 = value1 THEN  newvalue1
   WHEN column2 = value2 THEN newvalue2
   ELSE newvalue3
END


*************************************************

SELECT column
FROM table
WHERE
title LIKE 'A%'
ORDER BY column2 DESC;
//ASC DESC

SELECT SUM(col)
FROM table
WHERE col = 'value'
GROUP BY col
ORDER BY col;

//AVG(col) MAX(col) MIN(col) COUNT(col)

***************************************************

SELECT DISTINCT col
FROM table
ORDER BY col
LIMIT 2;

//LIMIT 0,4

****************************************************

外键 是表中的某一列,它引用到另一个表的主键,可以NULL,不唯一

约束 constraint

CREATE TABLE table (
int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
interest VARCHAR(50) NOT NULL,
contact_id INT NOT NULL,
CONSTRAINT my_contacts_contacts_contact_id_fk
FOREIGN KEY (contact_id)
REFERENCES my_contacts (contact_id)
);

数据模式 一对一 一对多 多对多

*******************************************************

组合键 就是由多个数据列构成的主键,组合各列后形成具有唯一性的主键

T.x -> T.y 
x影响y y依赖x

传递函数依赖 任何非键列于另一个非键列有关联
部分函数依赖 非主键的列依赖于组合主键的某个部分

********************************************************

第二范式 2NF
1. 达成1NF
2.没有部分函数依赖

第三范式 3NF
1.达成2NF
2.没有传递函数依赖

********************************************************

CREATE TABLE profession
(
  id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  profession VARCHAR(20)
)AS
SELECT profession FROM table
GROUP BY profession
ORDER BY profession;

AS 输出通道

SELECT profession AS mc_prof
FROM my_contact AS mc
GROUP BY mc_prof
ORDER BY mc_prof;

**********************************************************

SELECT t.boy,b.boy
FROM toys AS t
CROSS JOIN
boys AS b;

//交叉联接 全联接

SELECT boys.boy,toys.toy
FROM boys
  INNER JOIN
  toys
ON boys.toy_id = toys.toy_id;
ORDER BY boys.boy;

//内联接

SELECT boys.boy,toys.toy
FROM boys
  NATURE JOIN
  toys;

//自然联接 无ON 无条件联接 共享列名

******************************************

SELECT col1,col2
FROM table
WHERE col = (SELECT col FROM table );

包含查询 或 外层查询 子查询

SELECT mc.first_name,mc.last_name,
(SELECT state
FROM zip_code
WHERE mc.zip_code = zip_code) AS state
FROM my_contacts mc;

***********************************************

SELECT g.girl,t.toy
FROM girls g
LEFT OUTER JOIN toy t
ON g.toy_id = t.toy_id;

g-t

//左外联接 主表 join 附表 附表可为NULL

SELECT title FROM table
UNION
SELECT title FROM table1
UNION
SELECT title FROM table2
ORDER BY title;

//UNION ALL 所有的值 可重复

SELECT title FROM job_current
INTERSECT
SELECT title FROM job_desired;


//INTERSECT EXCEPT
*****************************************


http://www.iteye.com/topic/465807

左联接以左表为主 left join 或者 left outer join
右联接以右表为主 right join 或 right outer join
全联接以项多的表为主 full join 或者 full outer join
内联接以以两表都有的项为主 inner join 或者 join
交叉连接以符合WHERE条件的笛卡尔积组成 cross join 不带 where 条件的
笛卡尔积联接 无WHERE的交叉联接
自联接表示从属,上下级关系
******************************************

CREATE TABLE table
(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
coin CHAR(1) CHECK (coin IN('P','N','D','Q'))

*******************************************

CREATE VIEW view AS
SELECT * FROM table;

************************
事务
SELECT * FROM
(SELECT col FROM table WHERE col = 'value' AS table_name);

ACID
ATOMICITY 原子性 不能只执行一部分事务
CONSISTENCY 一致性 事务完成后应保持数据库一致
ISOLATION 隔离性  每次的事务应看到同一个数据库
DURABILITY 持久性 事务完成后能够正确的保存在数据库中,免受断电等危害

START TRANSACTION;
COMMIT;
ROLLBACK;

***********************************************

SET PASSWORD FOR 'root'@'localhost'=PASSWORD('XXXX');

CREATE USER name IDENTIFIED BY 'XXXX';

GRENT SELECT ON table_name TO someone;

REVOKE SELECT ON table_name FROM someone;

REVOKE SELECT ON table_name FROM someone CASCADE; 取消传递的权限



CREATE ROLE data_entry;

GRENT SELECT,INSERT ON some_table TO data_entry;

GRENT data_entry TO someone;


GRENT data_entry TO someone WITH ADMIN OPTION; 允许赋予别人

REVOKE data_entry FROM someone CASCADE;

REVOKE data_entry FROM someone RESTRICT; 收到错误信息,如已经赋权给别人

DROP ROLE data_entry ;

分享到:
评论

相关推荐

    Head First SQL笔记

    ### Head First SQL 笔记概览 #### 第一章 创建与管理数据库 - **创建数据库** 使用 `CREATE DATABASE` 语句可以创建一个新的数据库。语法格式如下: ```sql CREATE DATABASE database_name; ``` - **使用...

    Head First SQL阅读笔记

    ### Head First SQL 阅读笔记关键知识点梳理 #### 数据库与表的概念 - **数据库**: 它是存储表及其他 SQL 结构的容器。数据库的主要功能是管理数据,确保数据的完整性、一致性和安全性。 - **表**: 表是数据库内...

    Head First Servlet JSP(中文版)

    这本书以易理解的图文并茂的形式,深入浅出地讲解了这两个重要技术。 Servlet是Java编程语言中的一个接口,用于扩展服务器的功能,特别是Web服务器。它允许程序员创建动态、交互式的HTTP服务。Servlet可以处理...

    2009达内SQL学习笔记

    SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号...

    Head.First.C#.中文版.第一章

    ### Head First C# 中文版 第一章:高效构建可视化应用程序 #### 1. 引言 本章节主要介绍了如何利用C#与Visual Studio IDE快速地构建高效的可视化应用程序。通过结合这两种工具,开发者能够将更多的时间和精力投入...

    pandas,numpy笔记.docx

    pandas 和 numpy 笔记 在数据科学和机器学习中,pandas 和 numpy 是两种非常重要的库,它们提供了强大的数据处理和分析功能。下面是对 pandas 和 numpy 的一些重要知识点的总结。 数据导入 pandas 提供了多种方式...

    高级java笔试题-Notebook:记录日常学习知识的笔记本

    环境高级编程、深入理解计算机系统。 参考 鸟哥的 Linux 私房菜。 网络 :cloud: 参考 谢希仁的计算机网络、计算机网络 自顶向下方法、TCP/IP 详解。 参考 图解 HTTP,更多的是参考网上的文档,比如 MDN、维基百科等...

    LotusDomino学习笔记.doc

    ### LotusDomino学习笔记知识点概览 #### 1. 选取视图的列的内容 (@Trim @DbColumn) - **@Trim**: 是一个内置的LotusScript函数,用于去除字符串两端的空白字符。 - **@DbColumn**: 此函数用于获取指定列的信息。...

    leetcode下载-Notebook:招聘笔记

    环境高级编程、深入理解计算机系统。 参考 鸟哥的 Linux 私房菜。 网络 :cloud: 参考 谢希仁的计算机网络、计算机网络 自顶向下方法、TCP/IP 详解。 参考 图解 HTTP,更多的是参考网上的文档,比如 MDN、维基百科等...

    SCWCD 题库整理

    Head First 串讲笔记.pdf可能以易于理解的方式阐述了这些概念。 3. **JSTL**:JSTL是JavaServer Pages Standard Tag Library的缩写,它提供了用于处理常见任务的标签,比如XML处理、SQL查询、国际化和格式化。...

    LearningProcessForJava:Java的学习过程

    3. **工具书**:经典的Java教材,如《Thinking in Java》、《Head First Java》等,提供了全面而深入的理论知识。 4. **在线视频**:通过观看教学视频,可以直观地看到代码的编写和执行过程,加深理解。 在...

Global site tag (gtag.js) - Google Analytics