[SQL]Head First SQL 入门书籍内容总结
2017-12-20 11:19
183 查看
1 创建数据库:
CREATE DATABASE gred_lists;
USEgred_lists;
2 设定表:
CREATE TABLE doughnut_list
(doughnut_name VARCHAR(10),
Doughnut_typeVARCHAR(6)
);
3 查看与检查目标表:
DESC my_contacts;
4 删除表:
DROP TABLE my_contacts;
5 插入观测:
INSERT INTO my_contacts
(last_name, first_name, email,gender,birthday)
VALUES
(‘Anderson’,’Jillian’,’jill-anderson@breakpizza.com’,’F’,’1980-09-05’);
其中VARCHAR CHAR DATE 和 BLOB类型都必须添加单引号。
6 设置非空
CREATE TABLE my_contacts
(last_name VARCHAR(30) NOT NULL,
first_name VARCHAR(20) NOT NULL
);
7 设置默认值 DEFAULT
CREATE TABLE doughnut_list
(doughnut_cost DEC(3,2) NOT NULL DEFAULT1.00);
二 SELECT查询
1 双重条件用AND(同理有关键字OR)
SELECT location FROM doughnut_ratings
WHERE type=’plain glazed’
AND
rating=10;
2 比较符(文本也可以比较)
SELECT drink_name
FROM drink_info
WHERE
drink_name>=’L’
AND
drink_name<’M’
3
选出缺失值 IS NULL
SELECT drink_name
FROM drink_info
WHERE
calories IS NULL;
5 使用通配符查找
SELECT * FROM my_contacts
WHERE location LIKE ‘%CA’
其他通配符:_
6 范围用BETWEEN
SELECT drink_name FROM drink_info
WHERE calories BETWEEN 30 AND 60;
7 需要使用多个OR时,使用关键字IN
SELECT data_name
FROM black_book
WHERE rating (NOT) IN (‘innovative’,’fabulous’,’delightful’,’prettygood’);
8 NOT 与BETWEEN和LIKE 一起用的时候
SELECT drink_name FROM drink_info
WHERE NOT carbs BETWEEN 3 and 5
AND NOT dat_name LIKE ‘% B’;
三 DELETE&UPDATE
1 DELETE语句
DELETE FROM down_info
WHERE 条件
2创建新纪录并删除旧记录
INSERT 与 DELETE
3 UPDATE 改变数据
(1) UPDATE doughnut_rtings
SET
type=’glazed’,date=’9.27’
WHERE 条件
(2) 利用表达式
UPDATE drink_info
SET cost=cost+1
WHERE
drink_name=’Blue Moon’;
四 聪明表设计
1 查看创建表的代码
SHOW CREATE TABLE my_contacts;
2 创建主键
CREATE TABLE my_contacts
(contact_id INT NOT NULL,
Profession VARCHAR(50) DEFAULT
NULL,
PRIMARY KEY(contact_id)
);
3 设计自动递增的主键
CREATE TABLE my_contacts
(contact_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (contact_id)
);
4 为已经设计好的表添加主键
ALTER TABLE my_contacts
ADD COLUMN contact_id INT NOT NULLAUTO_INCREMENT FIRST,
ADD PRIMARY KEY(contact_id);
五 ALTER
1 添加列(可先用DESCRIBE 查看数据类型和主键)
ALTER TABLE my_contacts
ADD COLOMN phone VARCHAR(10)LAST/FIRST/SECOND/BEFORE last_name;
2 改表名
ALTER TABLE projeckts
RENAME TO project_list;
3
更改列名
ALTER TABLE project_list
CHANGE COLUME number proj_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (proj_id);
4 一条SQL的ALTER可同时改变两列,但应该加上逗号
ALTER TABLE project_list
CHANGE COLUMN descriptionofproj proj_descVARCHAR(100),
CHANGE COLUMN contactoronjob con_nameVARCHAR(30);
5 只改变列的类型:
ALTER TABLE project_list
MODIFY COLUMN proj_desc VARCHAR(120);
6删除列
ALTER TABLE project_list
DROP COLUMN start_date;
7 字符串函数
SELECT RIGHT(column1,2) FROM my_contacts;
SELECT SUBSTRING_INDEX(column1,’,’,1) FROMmy_contacts;
字符串函数不会改变存储在表中的内容
8 以现有列的内容填入新列
UPDATE my_contacts
SET state=RIGHT(location,2);
六 SELECT进阶
1 CASE(CASE可搭配UPDATE,SELECT,INSERT,DELETE等),需要加上END。
UPDATE my_table
SET new_colume=
CASE
WHEN column1=somevalue1
THEN newvalue1
WHEN column1=somevalue2
THEN newvalue2
ELSEnewvalue3
END;
2 ORDER
SELECT title,catalogy
FROM movie_table
WHERE
title LIKE ‘A%’
AND
catalog=’family’
ORDER BY title ASC,purchased DESC;
3 分组加函数(例子实现了分组求和)
SELECT first_name,sum(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales) DESC;
其他函数:MAX(),MIN(),AVG(),COUNT()
SELECT COUNT(DISTINCT sale_date)
FROM cookie_sales;
4 LIMIT函数,两个参数(a,b)表示从a计数,b个记录
SELECT first_name,SUM(sales)
FROM cookie_sales
GROUP BY first_name
LIMIT 2;
七多张表的数据库设计
1 外键:表中某一列作为新表的主键
引用完整性:插入外键列的值必须已存在于父表来源列。
2 创建带有外键的新表
CREATE TABLE interest
(int_id INT NOT NULL AUTO_INCREMENT PRIMARYKEY,
interest VARCHAR(50) NOT NULL,
contact_id INT NOT NULL,
CONSTRAIN my_contacts_contact_id_fk
FOREIGN KEY (contact_id)
REFERENCES my_contacts(contact_id)
);
3 表间关系数据模式:
一对一;一对多;多对多(利用junction table)
4 INF
(1) 数据列只包含具有原子性的值
(2) 没有重复的数据组
5 数据依赖于某列
(1) 部分函数依赖:非主键的列依赖于组合主键中某部分(但不完全依赖于组合主键)
(2) 传递函数依赖:任何非键列与另一个非键列有关联
6 2NF
只要所有列都是主键的一部分或者表中有唯一主键列符合1NF的表也会符合2NF。
Rule1:1NF
Rule2:没有部分函数依赖性
7 3NF
Rule1:2NF
Rule2:没有传递函数依赖性
八链接与多张表操作:
1 出现了interest列中有多个兴趣值时,不满足原子性:
UPDATE my_contacts SET
interest1=SUBSTRING_INDEX(interest,’,’,1);
interest=SUBSTR(interest,LENGTH(interest1+2));
interest2=SUBSTRING_INDEX();
2 找出一张表中的profession且不重复
(1)先CREATE,然后利用SELECT进行INSERT
CREATE TABLE profession
(id INT(11) NOT NULL AUTO_INCREMENT PRIMARYKEY
profession VARCHAR(20)
);
INSERT INTO profession
SELECTprofession FROM my_contacts
GROUP BY profession
ORDER BY profession;
(2)SELECT 进行CREATE,然后ALTER 添加主键
CREATE TABLE profession
AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
ALTER TABLE profession
ADD COLUMN id INT(11) NOT NULLAUTO_INCREMENT FIRST,
ADD PRIMARY KEY(id);
(3)利用CREATE同时完成
CREATE TABLE profession
(id INT(11) NOT NULL AUTO_INCREMENT PRIMARYKEY,
profession VARCHAR(20)
)
AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
3 列别名与表别名
4 交叉连接(行数n1*n2)
SELECT t.toy, b.boy
FROM toy AS t
CROSS JOIN
boy AS b;
5 内联结
(1) 相等连接:
SELECT boys.boy,toys.toy
FROM boys
INNER JOIN
toys
ON boys.toy_id=toys.toy_id;
(2)不等联结
SELECT boys.boy,toys.toy
FROM boys
INNER JOIN
toys
ON boys.toy_id<>toys.toy_id;
(3) 自然联结:
SELECT boys.boy toys.toy
FROM boys
NATURAL JOIN
toys;
自然连接是通过对参与表关系中所有同名的属性对取等(即相等比较)来完成的,故无须自己添加连接条件
与外连接的区别在于对于无法匹配的记录外连接会虚拟一条与之匹配的记录来保全连接表中的所有记录,但自然连接不会
九 子查询
1 子查询
SELECT mc.first_name,mc.last_name,mc.phone,jc.title
FROM job_current AS jc NATURAL JOINmy_contacts AS mc
WHERE jc.title IN
(SELECT title FROM job_listings);
2 作为选取列的子查询
SELECT mc.first_name,mc.last_name,
(SELECT state FROM zip_code WHEREmc.zip_code=zip_code)AS state
FROM my_contacts mc;
3 非关联子查询:子查询可以独立运行且不会引用外层查询的任何结果
4 有多个值的非关联子查询:利用 IN或者 NOT IN
5 关联子查询
SELECT mc.first_name,mc.last_name
FORM my_contacts AS mc
WHERE 3=(SELECT COUNT(*) FROMcontact_interest WHERE contact_id=mc.contact_id);
6 搭配NOT EXISTS的关联子查询
SELECT mc.first_name firstname,mc.last_namelastname,mc_email email
FROM my_contact mc
WHERE NOT EXISTS
(SELECT * FROM job_current jc WHEREmc.contact_id=jc.contact_id);
十 外联结 自联结和联合
1 左外连接
SELECT g.girl,t.toy
FORM girls g
LEFT OUTER JOIN toys t
ON g.toy_id=t.toy_id;
左外联结的结果中NULL表示右表中没有找到与左边相符的记录
2 自联结
SELECT c1.name,c2.name AS boss
FROM clown_info c1
INNER JOIN clown_info c2
ON c1.boss_id=c2.boss_id;
3 三张表都有一个相同列时可以使用UNION
(1) 每个SELECT 中的列数必须一致
(2) 会清除重复记录,使用UNION ALL可以保存重复记录
SELECT title FROM job_current
UNION
SELECT title FROM job_desired
UNION
SELECT title FROM job_listings
ORDER BY title;
4 与UNION 用法差不多的还有INTERSECT(交集)和EXCEPT(子集)
5 把子查询转化为联结可以提高查询速度
SELECTmc.first_name,mc.last_name,mc.phone,jc.title
FROM job_current AS jc NATURAL JOINmy_contacts AS mc
WHERE jc.title IN
(SELECT title FROM job_listings);
SELECTmc.first_name,mc.last_name,mc.phone,jc.title
FROM job_current AS jc NATURAL JOINmy_contacts AS mc
INNER JOIN job_listings jl
ON jc.title=jl.title;
十一 约束视图和事务
1 检查约束CHECK
CREATE TABLE piggy_bank
(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY
coin CHAR(1) CHECK(coin IN (‘P’,’N’,’Q’,’D’))
);
2 创建视图
CREATE VIEW web_desighners AS
SELECT 语句
3 删除视图
DROP VIEW pb_dimes;
4 事务:一群可以完成一组工作的SQL查询
如果所有步骤无法不受干扰地完成,则不该完成任意单一步骤
原子性;一致性;隔离性;持久性
START TRANSACTION;
COMMIT;
ROLLBACK;
十二 安全性
1 根用户ROOT
SET PASSWORD FOR‘root’&’localhost’=PASSWORD(‘sd89as8daf’)
2 添加用户
CREATE USER elsie
IDENTIFIED BY ‘8a989g9s8sa’
3 授予权限
GRANT SELECT ON
clown_info
TO elise
WITH GRANT OPTION;
4 收回权限
REVOKE SELECT ON
clown_info
FROM elise; CASCADE/RESTRICT;
CASCADE:有连锁反应
RESTRICT:还有别人受到影响就报错
5角色
(1) 创建
CREATE ROLE data_entry;
GRANT SELECT,INSERT ON some_table TOdata_entry;
(2) 使用
GRANT data_entry TO doc;
(3) 卸除角色
DROP ROLE data_entry;
(4) 授予角色的功能
GRANT data_entry TO doc
WITH ADMIN OPTION;
(5) 收回权限
REVOKE data_entry FORM doc CASCADE/RESTRICT
6 结合CREATE USERS 和 GRANT
GRANT SELECT ON
clown_info
TO elsie
IDENTIFIED BY ‘sda98f9a8e’;
重要概念:
一了解数据库建模
在设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。它主要包括两部分内容:确定最基本的数据结构;对约束建模。
数据库设计(DatabaseDesign)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。
二 ER模型
E-R图也称实体-联系图(EntityRelationship
Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;
用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。
实体:公司-部门-员工-商品-厂家
CREATE DATABASE gred_lists;
USEgred_lists;
2 设定表:
CREATE TABLE doughnut_list
(doughnut_name VARCHAR(10),
Doughnut_typeVARCHAR(6)
);
3 查看与检查目标表:
DESC my_contacts;
4 删除表:
DROP TABLE my_contacts;
5 插入观测:
INSERT INTO my_contacts
(last_name, first_name, email,gender,birthday)
VALUES
(‘Anderson’,’Jillian’,’jill-anderson@breakpizza.com’,’F’,’1980-09-05’);
其中VARCHAR CHAR DATE 和 BLOB类型都必须添加单引号。
6 设置非空
CREATE TABLE my_contacts
(last_name VARCHAR(30) NOT NULL,
first_name VARCHAR(20) NOT NULL
);
7 设置默认值 DEFAULT
CREATE TABLE doughnut_list
(doughnut_cost DEC(3,2) NOT NULL DEFAULT1.00);
二 SELECT查询
1 双重条件用AND(同理有关键字OR)
SELECT location FROM doughnut_ratings
WHERE type=’plain glazed’
AND
rating=10;
2 比较符(文本也可以比较)
SELECT drink_name
FROM drink_info
WHERE
drink_name>=’L’
AND
drink_name<’M’
3
选出缺失值 IS NULL
SELECT drink_name
FROM drink_info
WHERE
calories IS NULL;
5 使用通配符查找
SELECT * FROM my_contacts
WHERE location LIKE ‘%CA’
其他通配符:_
6 范围用BETWEEN
SELECT drink_name FROM drink_info
WHERE calories BETWEEN 30 AND 60;
7 需要使用多个OR时,使用关键字IN
SELECT data_name
FROM black_book
WHERE rating (NOT) IN (‘innovative’,’fabulous’,’delightful’,’prettygood’);
8 NOT 与BETWEEN和LIKE 一起用的时候
SELECT drink_name FROM drink_info
WHERE NOT carbs BETWEEN 3 and 5
AND NOT dat_name LIKE ‘% B’;
三 DELETE&UPDATE
1 DELETE语句
DELETE FROM down_info
WHERE 条件
2创建新纪录并删除旧记录
INSERT 与 DELETE
3 UPDATE 改变数据
(1) UPDATE doughnut_rtings
SET
type=’glazed’,date=’9.27’
WHERE 条件
(2) 利用表达式
UPDATE drink_info
SET cost=cost+1
WHERE
drink_name=’Blue Moon’;
四 聪明表设计
1 查看创建表的代码
SHOW CREATE TABLE my_contacts;
2 创建主键
CREATE TABLE my_contacts
(contact_id INT NOT NULL,
Profession VARCHAR(50) DEFAULT
NULL,
PRIMARY KEY(contact_id)
);
3 设计自动递增的主键
CREATE TABLE my_contacts
(contact_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (contact_id)
);
4 为已经设计好的表添加主键
ALTER TABLE my_contacts
ADD COLUMN contact_id INT NOT NULLAUTO_INCREMENT FIRST,
ADD PRIMARY KEY(contact_id);
五 ALTER
1 添加列(可先用DESCRIBE 查看数据类型和主键)
ALTER TABLE my_contacts
ADD COLOMN phone VARCHAR(10)LAST/FIRST/SECOND/BEFORE last_name;
2 改表名
ALTER TABLE projeckts
RENAME TO project_list;
3
更改列名
ALTER TABLE project_list
CHANGE COLUME number proj_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (proj_id);
4 一条SQL的ALTER可同时改变两列,但应该加上逗号
ALTER TABLE project_list
CHANGE COLUMN descriptionofproj proj_descVARCHAR(100),
CHANGE COLUMN contactoronjob con_nameVARCHAR(30);
5 只改变列的类型:
ALTER TABLE project_list
MODIFY COLUMN proj_desc VARCHAR(120);
6删除列
ALTER TABLE project_list
DROP COLUMN start_date;
7 字符串函数
SELECT RIGHT(column1,2) FROM my_contacts;
SELECT SUBSTRING_INDEX(column1,’,’,1) FROMmy_contacts;
字符串函数不会改变存储在表中的内容
8 以现有列的内容填入新列
UPDATE my_contacts
SET state=RIGHT(location,2);
六 SELECT进阶
1 CASE(CASE可搭配UPDATE,SELECT,INSERT,DELETE等),需要加上END。
UPDATE my_table
SET new_colume=
CASE
WHEN column1=somevalue1
THEN newvalue1
WHEN column1=somevalue2
THEN newvalue2
ELSEnewvalue3
END;
2 ORDER
SELECT title,catalogy
FROM movie_table
WHERE
title LIKE ‘A%’
AND
catalog=’family’
ORDER BY title ASC,purchased DESC;
3 分组加函数(例子实现了分组求和)
SELECT first_name,sum(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales) DESC;
其他函数:MAX(),MIN(),AVG(),COUNT()
SELECT COUNT(DISTINCT sale_date)
FROM cookie_sales;
4 LIMIT函数,两个参数(a,b)表示从a计数,b个记录
SELECT first_name,SUM(sales)
FROM cookie_sales
GROUP BY first_name
LIMIT 2;
七多张表的数据库设计
1 外键:表中某一列作为新表的主键
引用完整性:插入外键列的值必须已存在于父表来源列。
2 创建带有外键的新表
CREATE TABLE interest
(int_id INT NOT NULL AUTO_INCREMENT PRIMARYKEY,
interest VARCHAR(50) NOT NULL,
contact_id INT NOT NULL,
CONSTRAIN my_contacts_contact_id_fk
FOREIGN KEY (contact_id)
REFERENCES my_contacts(contact_id)
);
3 表间关系数据模式:
一对一;一对多;多对多(利用junction table)
4 INF
(1) 数据列只包含具有原子性的值
(2) 没有重复的数据组
5 数据依赖于某列
(1) 部分函数依赖:非主键的列依赖于组合主键中某部分(但不完全依赖于组合主键)
(2) 传递函数依赖:任何非键列与另一个非键列有关联
6 2NF
只要所有列都是主键的一部分或者表中有唯一主键列符合1NF的表也会符合2NF。
Rule1:1NF
Rule2:没有部分函数依赖性
7 3NF
Rule1:2NF
Rule2:没有传递函数依赖性
八链接与多张表操作:
1 出现了interest列中有多个兴趣值时,不满足原子性:
UPDATE my_contacts SET
interest1=SUBSTRING_INDEX(interest,’,’,1);
interest=SUBSTR(interest,LENGTH(interest1+2));
interest2=SUBSTRING_INDEX();
2 找出一张表中的profession且不重复
(1)先CREATE,然后利用SELECT进行INSERT
CREATE TABLE profession
(id INT(11) NOT NULL AUTO_INCREMENT PRIMARYKEY
profession VARCHAR(20)
);
INSERT INTO profession
SELECTprofession FROM my_contacts
GROUP BY profession
ORDER BY profession;
(2)SELECT 进行CREATE,然后ALTER 添加主键
CREATE TABLE profession
AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
ALTER TABLE profession
ADD COLUMN id INT(11) NOT NULLAUTO_INCREMENT FIRST,
ADD PRIMARY KEY(id);
(3)利用CREATE同时完成
CREATE TABLE profession
(id INT(11) NOT NULL AUTO_INCREMENT PRIMARYKEY,
profession VARCHAR(20)
)
AS
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
3 列别名与表别名
4 交叉连接(行数n1*n2)
SELECT t.toy, b.boy
FROM toy AS t
CROSS JOIN
boy AS b;
5 内联结
(1) 相等连接:
SELECT boys.boy,toys.toy
FROM boys
INNER JOIN
toys
ON boys.toy_id=toys.toy_id;
(2)不等联结
SELECT boys.boy,toys.toy
FROM boys
INNER JOIN
toys
ON boys.toy_id<>toys.toy_id;
(3) 自然联结:
SELECT boys.boy toys.toy
FROM boys
NATURAL JOIN
toys;
自然连接是通过对参与表关系中所有同名的属性对取等(即相等比较)来完成的,故无须自己添加连接条件
与外连接的区别在于对于无法匹配的记录外连接会虚拟一条与之匹配的记录来保全连接表中的所有记录,但自然连接不会
九 子查询
1 子查询
SELECT mc.first_name,mc.last_name,mc.phone,jc.title
FROM job_current AS jc NATURAL JOINmy_contacts AS mc
WHERE jc.title IN
(SELECT title FROM job_listings);
2 作为选取列的子查询
SELECT mc.first_name,mc.last_name,
(SELECT state FROM zip_code WHEREmc.zip_code=zip_code)AS state
FROM my_contacts mc;
3 非关联子查询:子查询可以独立运行且不会引用外层查询的任何结果
4 有多个值的非关联子查询:利用 IN或者 NOT IN
5 关联子查询
SELECT mc.first_name,mc.last_name
FORM my_contacts AS mc
WHERE 3=(SELECT COUNT(*) FROMcontact_interest WHERE contact_id=mc.contact_id);
6 搭配NOT EXISTS的关联子查询
SELECT mc.first_name firstname,mc.last_namelastname,mc_email email
FROM my_contact mc
WHERE NOT EXISTS
(SELECT * FROM job_current jc WHEREmc.contact_id=jc.contact_id);
十 外联结 自联结和联合
1 左外连接
SELECT g.girl,t.toy
FORM girls g
LEFT OUTER JOIN toys t
ON g.toy_id=t.toy_id;
左外联结的结果中NULL表示右表中没有找到与左边相符的记录
2 自联结
SELECT c1.name,c2.name AS boss
FROM clown_info c1
INNER JOIN clown_info c2
ON c1.boss_id=c2.boss_id;
3 三张表都有一个相同列时可以使用UNION
(1) 每个SELECT 中的列数必须一致
(2) 会清除重复记录,使用UNION ALL可以保存重复记录
SELECT title FROM job_current
UNION
SELECT title FROM job_desired
UNION
SELECT title FROM job_listings
ORDER BY title;
4 与UNION 用法差不多的还有INTERSECT(交集)和EXCEPT(子集)
5 把子查询转化为联结可以提高查询速度
SELECTmc.first_name,mc.last_name,mc.phone,jc.title
FROM job_current AS jc NATURAL JOINmy_contacts AS mc
WHERE jc.title IN
(SELECT title FROM job_listings);
SELECTmc.first_name,mc.last_name,mc.phone,jc.title
FROM job_current AS jc NATURAL JOINmy_contacts AS mc
INNER JOIN job_listings jl
ON jc.title=jl.title;
十一 约束视图和事务
1 检查约束CHECK
CREATE TABLE piggy_bank
(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY
coin CHAR(1) CHECK(coin IN (‘P’,’N’,’Q’,’D’))
);
2 创建视图
CREATE VIEW web_desighners AS
SELECT 语句
3 删除视图
DROP VIEW pb_dimes;
4 事务:一群可以完成一组工作的SQL查询
如果所有步骤无法不受干扰地完成,则不该完成任意单一步骤
原子性;一致性;隔离性;持久性
START TRANSACTION;
COMMIT;
ROLLBACK;
十二 安全性
1 根用户ROOT
SET PASSWORD FOR‘root’&’localhost’=PASSWORD(‘sd89as8daf’)
2 添加用户
CREATE USER elsie
IDENTIFIED BY ‘8a989g9s8sa’
3 授予权限
GRANT SELECT ON
clown_info
TO elise
WITH GRANT OPTION;
4 收回权限
REVOKE SELECT ON
clown_info
FROM elise; CASCADE/RESTRICT;
CASCADE:有连锁反应
RESTRICT:还有别人受到影响就报错
5角色
(1) 创建
CREATE ROLE data_entry;
GRANT SELECT,INSERT ON some_table TOdata_entry;
(2) 使用
GRANT data_entry TO doc;
(3) 卸除角色
DROP ROLE data_entry;
(4) 授予角色的功能
GRANT data_entry TO doc
WITH ADMIN OPTION;
(5) 收回权限
REVOKE data_entry FORM doc CASCADE/RESTRICT
6 结合CREATE USERS 和 GRANT
GRANT SELECT ON
clown_info
TO elsie
IDENTIFIED BY ‘sda98f9a8e’;
重要概念:
一了解数据库建模
在设计数据库时,对现实世界进行分析、抽象、并从中找出内在联系,进而确定数据库的结构,这一过程就称为数据库建模。它主要包括两部分内容:确定最基本的数据结构;对约束建模。
数据库设计(DatabaseDesign)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。
二 ER模型
E-R图也称实体-联系图(EntityRelationship
Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;
用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联系的类型(1:1,1:n或m:n)。
实体:公司-部门-员工-商品-厂家
相关文章推荐
- Head First SQL 总结
- SQL入门书籍内容汇总
- HEAD FIRST SQL 的读书心得
- 《HeadFirst SQL》笔记
- Entity Framework 学习总结之六:EntitySQL 介绍入门 .
- Python初入门(六)(Head First Python 第六章 打包代码与数据 ,字典,类与继承)
- Head First SQL 第五章
- java基础(总结Head First Iava一书)
- Head First SQL 第一章
- 《Head.First-Design.Patterns》总结
- Python初入门(五)(Head First Python 第五章 处理数据)
- Java Web开发入门书籍实例解析(总结一)
- SQL server 总结(入门)
- SQL入门总结
- Head First Java 总结(六)
- Head First SQL 笔记1
- Python初入门(二) 可共享的函数模板(Head First Python 第二章 共享你的代码)
- Head first HTML and CSS 总结-7. XHTML与CSS
- HeadFirst SQL 读书摘要
- sparkSQL1.1入门之十:总结