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)特定的存储过程
可以授予或撤销的权限
8.更改口令
SET PASSWORD FOR user_name = Password('password');
新口令必须传递到Password()函数进行加密
不指定用户名,更新当前登录用户的口令。
1.使用命令行mysqldump转储所有数据库内容到某个文件
2.使用mysqlhotcopy从一个数据库复制所有数据
3.诊断启动问题
Mysql服务器通过在命令行执行mysqld启动