第一章 数据库的建立 1、mysql>PROMPT 标识符名 //修改标识符 常用:mysql>PROMPT u@h d u:当前用户 h:服务器名称 d:当前打开的数据库 MySQL语法规范: ·关键字与函数全部大写 ·数据库名、表名全部小写 ·SQL语句必须以‘;’结尾 2、mysql>USE x; //使用x数据库 3、mysql>CREATE DATABASE t1 CHARACTER SET = utf8;//创建数据库t1,编码为utf8 4、mysql>SHOW DATABASES; //显示所有数据库 5、mysql>SHOW CREATE DATABASE t1;//显示数据库t1的属性 6、mysql>ALTER DATABASE t1 CHARACTER SET = utf8;//将数据库t1的编码方式改为utf8 7、mysql>DROP DATABASE t1;//将数据库t1删除 8、mysql>SHOW WARNINGS;//显示警告 第二章 关系表的建立 1、mysql>SELECT DATABASE();//查询当前所打开的数据库 2、mysql>SHOW TABLES;//显示当前所打开的数据库中的表格 3、mysql>SHOW TABLES FROM t1;//显示t1数据库中的表 4、mysql>SHOW COLUMNS FROM tb1;//显示关系表t1的属性,t1必须在当前所打开的数据库中 5、mysql>CREATE TABLE tb1( ->username VARCHAR(20), ->userage TINYINT UNSIGNED, ->salary FLOAT UNSIGNED);//创建一个关系表格 6、mysql>INSERT tb1 VALUES('Tom',25,7500,50);//在tb1中插入一个实例 7、mysql>INSERT tb1(username,salary) VALUES('John',6900.00);//实例部分赋值 8、mysql>SELECT * FROM tb1; //完整显示tb1; 9、mysql>SELECT * ->FROM tb1 ->WHERE username = 'Tom';//显示表tb1中Tom的全部信息 10、id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY //AUTO_INCREMENT 插入实例时id增1,且必须为PRIMARY KEY 11、sex enum('男','女','保密') DEFAULT '保密' //若sex为赋值,则默认为'保密' 12、一个较为完整操作的实例: mysql>CREATE TABLE tb1( ->id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, ->name VARCHAR(20) UNIQUE NOT NULL, ->class SMALLINT UNSIGNED DEFAULT '9011', ->sex enum('f','m','s') DEFAULT 's'); 13、mysql>SHOW CREATE TABLE tb1; //显示关系表的属性 14、mysql>DROP TABLE tb1;//将表tb1删除 第三章 约束与修改 1、参照约束方式 ①.CASCADE //父表中删除某行时子表相参照的值的行也删除 ②.SET NULL//父表中删除某行时子表相参照的列的值设为NULL 注意:参照属性与被参照属性的结构必须相同 实例: mysql>CREATE TABLE provinces( ->pname VARCHAR(30) UNIQUE NOT NULL, ->pid SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY); mysql>CREATE TABLE client( ->cname VARCHAR(30) UNIQUE NOT NULL, ->cid SMALLINT UNSIGNED, ->FOREIGN KEY (cid) REFERENCES provinces(pid) ON DELETE CASCADE); 2、mysql>ALTER TABLE tb1 ADD age SMALLINT UNSIGNED;//在数据表中加一个新属性 3、mysql>ALTER TABLE tb1 ADD class SMALLINT AFTER age;//在age插入一个属性 将AFTER age改为FIRST则在表的最前面插入一属性 4、mysql>ALTER TABLE tb1 ADD( ->major VARCHAR(32) NOT NOLL, ->score FLOAT);//插入多列,位置只能位于最后 5、mysql>ALTER TABLE tb1 DROP score,DROP major;//删除多列 6、mysql>ALTER TABLE tb1 ADD PRIMARY KEY(id);//添加主键约束 mysql>ALTER TABLE tb1 DROP PRIMARY KEY;//删除主键约束 7、mysql>ALTER TABLE tb1 ADD UNIQUE(name);//添加唯一约束 8、mysql>ALTER TABLE tb1 ADD FOREIGN KEY(id) REFERENCES provinces(pid); //添加参照约束 9、mysql>ALTER TABLE tb1 ALTER num SET DEFAULT 15;//添加默认约束 10、mysql>ALTER TABLE tb1 MODIFY id INT; //将id原来SMALLINT的结构改为INT, 修改结构时必须将其他定义了的结构也列上 //例如:id若定义了NOT NULL,则上语句改为: mysql>ALTER TABLE tb1 MODIFY id INT NOT NULL; 11、mysql>ALTER TABLE tb1 CHANGE id i_d INT;//将id的名称改变,其定义了的 约束必须一个不少的加上去 12、mysql>ALTER TABLE tb1 RENAME tb2;//将表更名 13、mysql>CREATE TABLE user( ->ID INT, ->name CHAR(10), ->CONSTRAINT C1 PRIMARY KEY(ID,name));//将属性组设为主键 第四章 操作记录 创建一个user数据表 mysql>CREATE TABLE user( -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, -> name VARCHAR(20) NOT NULL, -> password VARCHAR(32) NOT NULL, -> age TINYINT DEFAULT 10, -> sex BOOLEAN); //alter table user auto_increment = 10; 自增号码将从10开始 1、插入记录 ①mysql>INSERT user VALUES(,,,) //若user不跟属性,则必须所有属性均赋值 // DEFAULT属性可用DEFAULT 代替,AUTO_INCREMENT 属性可用NULL,DEFAULT代替 ②mysql>INSERT user SET 属性名=属性值,,,,//只能一次插入一条记录 2、插入多条记录 mysql>INSERT user VALUES(,,,),(,,,)//插入多条记录 3、更新记录 mysql>UPDATE user SET age=20;//将表中所有记录的age属性均设为10 4、同时更新多条记录 mysql>UPDATE user SET age = age - id, sex = 0;//将所有记录的年龄减去其id, 且将sex设为0 5、mysql>UPDATE user SET sex = 1 WHERE id % 2 = 0;//将id为偶数的记录sex设为0 6、删除记录 mysql>DELETE FROM user WHERE id = 5;//将id号为 5 的记录删除 7、查找记录 mysql>SELECT id AS ID FROM user;//将结果集中属性id改名为ID 8、mysql>SELECT name, id FROM user;//结果集中第一列显示name, 第二列显示id; 9、mysql>SELECT * FROM user ORDER BY age DESC,id ASC; //显示表中的全部结果以age降序,若age相同则以id升序排列; 10、mysql>SELECT * FROM user LIMIT 2,2; //从上到下,从0开始数,返回以第2个开始的2条记录 11、mysql>CREATE TABLE tb( ->id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, ->name VARCHAR(20)); mysql>INSERT tb(name) SELECT name FROM user WHERE id > 2; //将user中id>2的记录插入tb中 12、mysql>CREATE TABLE date_test( ->day_ DATE, ->time_ DATETIME); mysql>INSERT date_test VALUES('2013-12-3','2013-12-3 11:30:30'); //DATE 及 DATETIME 类型的插入方式 13、mysql>UPDATE tb1,tb2 SET tb1.score = tb2.score WHERE tb1.ID=tb2.ID; //用tb2的数据对tb1进行更新 第五章 子查询与连接 1、mysql>CREATE TABLE class( ->ID SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, ->monitor VARCHAR(32) NOT NULL UNIQUE ->); mysql>CREATE TABLE student( ->classNum SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, ->name VARCHAR(32) NOT NULL, ->age SMALLITNT UNSIGNED DEFAULT 20 ->); mysql>SELECT monitor,name,age ->FROM class INNER JOIN student //INNER JOIN内部连接、LEFT JOIN左连接、RIGHT JOIN右连接 ->ON ID = classNum; 第六章 字符串函数 1、字符串连接函数 ①CONCAT mysql>SELECT CONCAT('imooc','-','MySQL');将'imooc'、'-'、'MySQL'连接 mysql>SELECT CONCAT(first_name,last_name) AS FULLNAME FROM Name; ②CONCAT_WS('分隔符','字符串','',,,); mysql>SELECT CONCAT_WS('|','A','B','C'); 2、格式转换函数,将实数转化为字符串 mysql>SELECT FORMAT(实数,保留小数点位数); 例如 mysql>SELECT FORMAT(212003.89,1) 结果为 212,003.9 //千分位表示法 3、字符串大小写转换函数 mysql>SELECT LOWER('MySQL'); //结果为 mysql mysql>SELECT UPPER('Mysql'); //结果为 mysql 4、取头尾函数 mysql>SELECT LEFT('MySQL',2);//结果为 My mysql>SELECT RIGHT('MySQL',2);//结果为 QL 5、求字符串长度 mysql>SELECT LENGTH('MySQL'); //结果为5 6、去前导、后续函数 mysql>SELECT TRIM(LEADING ' ' FROM ' MySQL '); //去前导' ',结果为'MySQL '; mysql>SELECT TRIM(TRAILING ' ' FROM ' MySQL '); //去后续' ',结果为' MySQL'; mysql>SELECT TRIM(BOTH ' ' FROM ' MySQL ');//两者均去,结果为'MySQL' 7、字符串替代函数 mysql>SELECT REPLACE('??MySQL???','?','*');//将字符串中的?改为 * 8、取子串函数 mysql>SELECT SUBSTRING('MySQL',1,2);//从第1位往后取2个,结果为My 9、字符串比较函数 '%'代表任意个字符, '_'代表任意一个字符 mysql>SELECT last_name FROM Name WHERE last_name LIKE 'L%'; //查找以'L'开头的last_name mysql>SELECT last_name FROM Name WHERE last_name LIKE '%1%%' ESCAPE '1'; //查找含有'%'的last_name 第七章 数值函数 1、CEIL 向上取正 mysql>SELECT CEIL(3.01);//结果为 4; 2、FLOOR 向下取整 mysql>SELECT FLOOR(3.99);//结果为 3; 3、DIV 整数取整 mysql>SELECT 3 DIV 4; //结果为 0;3/4 为 0.75; 4、MOD 取余数 等价于 % mysql>SELECT 5 MOD 2;//小数亦可 5、POWER 指幂函数 mysql>SELECT POWER(2,3);//结果为8 6、ROUND 四舍五入函数 mysql>SELECT ROUND(3.56,1);//保留小数点后1位,结果为3.6 7、TRUNCATE 非四舍五入 mysql>SELECT TRUNCATE(125.89,1)//保留小数点后1位,结果为125.8,不做四舍五入 第八章 日期时间函数 1、SELECT NOW(); 显示当前日期和时间 2、SELECT CURDATE(); 显示当前日期 3、SELECT CURTIME(); 显示当前时间 4、SELECT DATE_ADD('2014-3-12',INTERVAL 365 DAY); //得到2014-3-12加上365天的结果 DAY 可以换为 YEAR,WEEK,MONTH //若将365改为负数则为减去 5、SELECT DATEDIFF('2012-3-12','2011-3-12'); //求2012-3-12 与 2011-3-12 相差的天数 6、SELECT DATE_FORMAT('2012-3-12','%m/%d/%Y');//结果为03/12/2012; //%m,%d,%Y位置可以互换 第八章 密码函数 1、SELECT MD5('student'); //给字符串'student'加密 2、修改登录密码 mysql>SET PASSWARD = PASSWARD('%新密码%'); 第九章 自定义函数 1、创建实例 求两个数的平均值 mysql>CREATE FUNCTION f1(num1 INT, num2 INT)//参数 ->RETURNS FLOAT //返回值类型 ->RETURN (num1+num2)/2; 2、调用函数 mysql>SELECT f1(12,21); 3、mysql>DELIMITER % //将%替代';'作为结束语句 4、函数体包含多语句 mysql>CREATE FUNCTION f1(username VARCHAR(32)) ->RETURNS INT ->BEGIN 符合结构必须包含在BEGIN...END 中 ->INSERT user VALUES(username); ->RETURN LAST_INSERT_ID(); 返回最后插入记录的ID ->END// 5、mysql>DROP FUNCTION f1;//将函数f1删除 6、mysql>SHOW FUNCTION STATUSG 显示数据库中的函数信息 7、每个函数最多有一个返回值 第九章 存储过程 1、具体示例 mysql>DELIMITER % 第一步 mysql>CREATE PROCEDURE removeuser(IN id INT UNSIGNED) ->BEGIN ->DELETE FROM user WHERE user.ID = id; ->END% mysql>CALL removeuser(3); //将id为3的记录删除 CALL调用过程体 2、mysql>DROP PROCEDURE removeuser; //将过程体删除 3、存储体可带出多个返回值 mysql>DELIMITER % mysql>CREATE PROCEDURE removeuser(IN age INT,OUT des INT,OUT res INT)//OUT 定义的变量将返回值带出 ->BEGIN ->DELETE FROM users WHERE users.age = age; ->SELECT ROW_COUNT() INTO des; //ROW_COUNT 返回由于上句操作,变动的记录个数 ->SELECT COUNT(*) FROM users INTO res; ->EDN// mysql>DELIMITER ; mysql>CALL removeuser(21,@des,@res); //@不可少 mysql>SELECT @des,@res; //@不可少 4、实例 用存储过程访问表中前 几个 记录 DELIMITER % CREATE PROCEDURE tt(p INT UNSIGNED) BEGIN DECLARE n INT DEFAULT 0; DECLARE i INT DEFAULT 0; SELECT COUNT(*) INTO n FROM 销售主表; SET i = n DIV p; SELECT * FROM 销售主表 ORDER BY 订单金额 DESC LIMIT 0,i; END% CALL tt(2)%//查询前50%的记录 5、while语句范例 DELIMITER % CREATE PROCEDURE tt() BEGIN DECLARE x INT DEFAULT 0; WHILE x <= 5 DO SELECT x; SET x = x + 1; END WHILE; END% 6、if语句范例 DELIMITER % CREATE PROCEDURE tt(score FLOAT) BEGIN IF score > 90 THEN SELECT 'A' AS class; ELSEIF score <= 90 AND score >= 60 THEN SELECT 'B' AS class;//注意else与if之间无' ' ELSE SELECT 'C' AS class; END IF; END% 第十章 存储引擎 1、MyISAM 存储限制达256TB,支持索引、表级锁定、数据压缩 2、InnoDB 存储限制为64TB,支持事务和索引,行锁定