柚子酱的Mysql学习笔记(三)

创建和操纵表

1.表基础创建

CREATE TABLE table_name
(
col_name1 int NOT NULL AUTO_INCREMENT,
col_name2 char(50) NOT NULL,
col_name2 char(50) NOT NULL,
PRIMARY KEY(col_name1)
)ENGINE=InnoDB;

各列之间用逗号表示,后接列的数据类型
创建新表时,指定的表名必须不存在,否则报错
若仅想在一个表不存在时创建它,应该在表名后给出IF NOT EXISTS
2.主键
主键可以由单列或者多列组成
PRIMARY KEY(col_name1, col_name2, col_name3)
主键可以在创建表时定义,也可以在创建表之后定义
3.使用AUTO_INCREMENT
使用AUTO_INCREMENT的列每当增加一行时自动增量。
每个表只允许一个AUTO_INCREMENT列,而且它必须被索引
使用SELECT last_insert_id()来获取表中最新的AUTO_INCREMENT值。

4.指定默认
如果插入行时没有给出值,Mysql允许指定此时使用的默认值。
使用DEFAULT关键字指定
col_name int NOT NULL DEFAULT 1
5.更新表
使用ALTER TABLE更改表结构
添加一个列

ALTER TABLE table_name
ADD col_name char(20);

5.删除表

DROP TABLE table_name;

6.重命名表

RENAME TABLE table_name1 TO table_name2;

可以同时对多个表进行重命名:

RENAME TABLE table_name1 TO table_name2,
	     table_name3 TO table_name4,
	     table_name5 TO table_name6;

视图

1.创建视图
视图是虚拟的表,只包含使用时动态检索数据的查询。
视图必须唯一命名,不能取与别的视图或表相同的名字
通常创建视图必须有足够的访问权限
视图可以嵌套,可以利用从其他视图检索数据的查询来构造一个视图。

使用CREATE VIEW语句来创建视图
使用SHOW CREATE VIEW view_name;来查看创建视图的语句
使用DROP 删除视图,DROP VIEW view_name;

CREATE VIEW view_name AS
SELECT col_name1, col_name2, col_name3
FROM table_name1, table_name2, table_name3
WHERE condition;

更新视图
视图是可更新的,对视图增加或者删除行,实际是对基表增加或删除行。

存储过程

存储过程:为以后的使用而保存的一条或多条Mysql语句的集合,可将其视为批文件。
Mysql称存储过程的执行为调用,因此Mysql执行存储语句为CALL

1.创建存储过程

CREATE PROCEDURE productpricing()
BEGIN
	SELECT Avg(prod_price) AS priceaverage
	FROM products;
END;

创建存储过程名为productpricing,使用CREATE PROCEDURE
productpricing()
如果存储过程接受参数,在()中列举出来
使用BEGIN和END语句来限定存储过程体

若使用mysql命令行,需要临时更改命令行实用程序的语句分隔符,如下:

DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
 SELECT Avg(prod_price) AS priceaverage
 FROM products;
END //

其中DELIMITER告诉命令行实用程序使用//作为新得语句结束分隔符,出\符号外,任何字符都可以用作语句分隔符

2.使用存储过程

CALL productpricing();

3.删除存储过程

DROP PROCEDURE productpricing();

如果指定的过程不存在,则将产生一个错误
使用
DROP PROCEDURE IF EXISTS
4.使用参数
关键字IN表示传递给存储过程
关键字OUT表示从存储过程传出
关键字INOUT表示对存储过程传入和传出
关键字INTO保存到相应的变量
5.检查存储过程

SHOW CREATE PROCEDURE proceduce_name;

游标

在使用游标前,必须声明它
一旦声明,必须打开游标以供使用
在结束游标使用时,必须关闭游标
1.创建游标
DECLARE定义游标,并定义相应的SELECT语句

CREATE PROCEDURE processorders()
BEGIN
	DECLARE ordernumbers CURSOR
	FOR
	SELECT order_num FROM orders;
END;

2.打开和关闭游标

OPEN ordernumbers;
CLOSE ordernumbers;

修改版本

CREATE PROCEDURE processorders()
BEGIN
 	DECLARE ordernumbers CURSOR
 	FOR
 	SELECT order_num FROM orders;

	OPEN ordernumbers;
	CLOSE ordernumbers;
END;

3.使用游标数据
游标被打开后,使用FETCH语句分别来访问它的每一行

触发器

1.触发器时Mysql响应以下任意语句而自动执行的一条Mysql语句
DELETE;
INSERT;
UADATE;
创建触发器时,需要给出4条信息
(1)唯一的触发器名
(2)触发器关联的表
(3)触发器应该响应的活动
(4)触发器何时执行

2.创建触发器

CREATE TRIGGER trigger_name AFTER INSERT ON table_name
FRO EACH ROW SELECT 'Product added'

FOR EACH ROW指定对每个插入行执行

每个表每个事件每次只允许一个触发器
每个表最多支持6个触发器(每条INSERT、UPDATE和DELETE的前后)
单一触发器不能与多个事件或多个表关联

3.删除触发器

DROP TRIGGER trigger_name;

触发器不能修改,必须先删除再重新创建

管理事务处理
有些数据库引擎支持事务处理,而有些则不支持
事务处理用来维护数据库的完整性

保证一组操作不会中途停止,他们或者作为整体执行,或者不执行

1.标志事务开始

START TRANSACTION;

2.提交事务,使用COMMIT

START TRANSACTION;
DELETE FROM table_name1 WHERE condition1;
DELETE FROM table_name2 WHERE condition2;
COMMIT;

3.使用保留点
对复杂的事务可能需要部分提交或回退
创建占位符,占位符即保留点

SAVEPOINT save_name1;

Mysql要知道回退到何处,如下:

ROLLBACK TO save_name1;

全球化和本地化

1.字符集
使用SHOW CHARACTER SET;显示所有可用的字符集以及每个字符集的描述和默认校对
2.校对完整列表

SHOW COLLATION

3.为了给表指定字符集和校对,可使用带子句的CREATE TABLE

CREATE TABLE table_name
(
	col_name1 INT,
	col_name2 VARCHAR(10)
)DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;

安全管理

1.访问控制
MYSQL用户帐号和信息存储在名为mysql的数据库中

USE mysql;
SELECT user FROM user;

2.创建用户帐号

CREATE USER user_name IDENTIFIED BY 'password';

3.重命名用户帐号

RENAME USER user_name1 TO user_name2;

4.删除用户账号

DROP USER user_name;

5.设置访问权限
显示赋予用户帐号的权限

SHOW GRANT FOR user_name;

设置权限,使用GRANT语句,给出以下信息:
(1)要授予的权限
(2)被授予访问权限的数据库和表
(3)用户名

GRANT SELECT ON  crashcourse.* TO user_name;

允许用户在crashcourse.* (crashcourse数据库的所有表)上使用SELECT
6.撤销权限REVOKE

REVOKE SELECT ON crashcourse.* FROM user_name;

7.访问层次
(1)整个服务器 GRANT ALL 或 REVOKE ALL
(2)整个数据库 ON database.*
(3)特定的表 ON database.table
(4)特定的列
(5)特定的存储过程
可以授予或撤销的权限
柚子酱的Mysql学习笔记(三)_第1张图片柚子酱的Mysql学习笔记(三)_第2张图片
8.更改口令

SET PASSWORD FOR user_name = Password('password');

新口令必须传递到Password()函数进行加密
不指定用户名,更新当前登录用户的口令。

数据库维护

1.使用命令行mysqldump转储所有数据库内容到某个文件
2.使用mysqlhotcopy从一个数据库复制所有数据
3.诊断启动问题
Mysql服务器通过在命令行执行mysqld启动

你可能感兴趣的:(数据库)