一、简介
RDBMS -- relational database management system
SQL -- structed query language 读音"ess-queue-ell"或"sequel" ★★
MYSQL -- 读音"my-ess-queue-ell",一般指整个MYSQL RDBMS
mysql -- 代表一个特定的客户机程序
MYSQL = server (服务器)+ mysqldump(转储) + mysqlimport(导入) + mysqladmin(查看服务器状态、管理任务)and so on,,且提供了客户机编程,总的来说MSQL = 服务器 + 客户端 ★★
默认规则 -- 关键字、函数名大写, 数据库、表、列小写!
二、简单用法
1.SETELCT NOW(), USER(), VERSION(), DATABASE(), UNIX_TIMESTAMP();
DATABASE() -- 显示当前使用的数据库
UNIX_TIMESTAMP() -- UNIX时间戳,即1970-01-01 00:00:00 到现在的秒数同linux下的time()
2.GRANT ALL ON dbname.* TO username@% IDENTIFIDE BY "initial-pssword"
简单的授权命令,至于@后面,可是loacalhost、制定的host等其他,基本格式是这样的
3.启动命令格式 -- mysql -u username dbname -p -h hostname -P port
放弃之前键入的命令 -- \c
退出可键入 -- quit; 或 exit;
使用某数据库 -- USE databasename;
4.创建表的基本格式:
CREATE TABLE sample
(
last_name VARCHAR(15) NOT NULL,
sex ENUM('F', 'M') NOT NULL, → 枚举类型,也可用CHAR(1)来代替,ENUM值也可以是多个字符
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, → 无需逗号隔开个属性
data DATE NOT NULL, → DATA 格式是YYYY-MM-DD
death DATE NULL
)
说明:
1)AUTO_INCREMENT → MYSQL一种特殊的属性,在创建一个新的记录时,若遗漏了student_id的值,MYSQL将自动生成一个大于此列中最大值得唯一ID插入 ★★
2)PRIMARY KEY → 为快速查找进行索引,但然后又众所周知的意思了,此处省略
3)也可以将PRIMARY KEY (student_id, sex)格式来设定主键
SHOW TABLES;
SHOW DATABASES;
DESCRIBE tablename;
5.插入信息
1)INSERT INTO student VALUES('name', 'sss'), ('name2', 'sss');
INSERT INTO student (col_name1, col_name2) VALUES(value1,value2), (value1-2, value2-2);
INSERT INTO student SET last_name='swf', firstname='sss'; (SET子句中未命名的则赋默认值) ,有的老版本MYSQL支持 ★★
2)shell下可通过
◆ mysqlimport批量进行处理 ↔ LOAD DATE INFILE 一样-- 具体的man下
◆ mysqlimport -u root qidian -p --local chapter.txt → 从本地chapter.txt中加载内容批处理
◆ mysql -u root -p databasename < chapter.txt 效果一样 ★★★
◆ cat inser_*.sql | mysql -u root -p databasename ★★★
6.检索信息
1)MYSQL中一般串的比较是不区分大小写的!
逻辑运算符→AND、OR、NOT,比较运算符只提一个<>或!=
2)NULL 值
◆ 进行NULL值检索时,不能用!=NULL等,只能用WHERE death IS NULL 或 IS NOT NULL ★★★
◆ MYSQL3.23及以后的版本有一个特殊的<=>,即WHERE death <=> NULL 或 NOT (death <=> NULL)
◆ 排序时,NULL 值默认是“最小的”,若ASC,则排第一行,若为DESC,则排最后
3)排序、LIMIT
◆ 若未指定,SELECT默认按升序显示
◆ MYSQL3.23可按照一个公式来排序查询结果 → ORDER BY RAND() LIMIT 1 即随机抽取一个记录
◆ LIMIT 也可根两个参数 → LIMIT 3,2 表示显示从第3行开始的后面2个记录
4)计算
◆ SELECT FORMAT(SQRT(2), 2); → FORMAT第二个参数表示显示的小数点后面的位数
◆ SELECT CONCAT(first, "###", last) AS alias FROM sample;
→ CONCAT将几个字符连接起来,AS 取得别名中如果有空格,则要用AS "alias_1 aliai_2"
5)日期函数
◆ YEAR()、MONTH()、DAYOFMONTH()、TO_DAYS()、DATE_ADD()、DATE_SUB()、CURRENT_DATE()
◆ SELECT name FROM sample WHERE MONTH(birth) = 3; 或 WHERE MONTHNAME(birth) = "March";
◆ SELECT name FROM sample WHERE MONTH(birth) = MONTH(CURRENT_DATE)
AND DAYOFMONTH(birth) = DAYOFMONTH(CURRENT_DATE) → 查询今天过生日的人
◆ SELECT FLOOR((TO_DAYS(death) - TO_DAYS(birth))/365) → 某人活了多少年,FLOOR截掉小数
◆ MYSQL3.22以来 可使用DATE_ADD、DATE_SUB
SELECT DATE_ADD("1970-1-1", INTERVAL 10 YEAR) → 得到1980-1-1
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 10 DAY)
6)模式匹配
◆ LIKE 或 NOT LIKE → 不区分大小写 ★★★
◆ 指定一个包含通配符的串 → _匹配任意单字符, %匹配任意字符序列(含空序列)★★
◆ 也支持基于正则表达式的模式匹配
7)生成汇总
◆ DISTINCT删除结果中的重复行 → SELECT DISTINCT stat FROM smaple;
◆ SELECT COUNT(DISTINCT name) → 查询不同名字的总数
◆ HAVING 类似于WHERE,但是在结果已经选出后才应用的,用来减少服务器实际送到客户端的结果 ★★
SELECT stat, COUNT(*) AS count FROM smaple GROUP BYstate HAVING count > 1 ORDER BY count;
7.变动
1)DELETE FROM tbl_name WHERE …… 而DELETE FROM tbl_name → 删除所有记录
2)UPDATE tbl_name SET name = "swf WHERE ……"
3)ALTER tbl_name → 改变表的结构
◆ ALTER TABLE tbl_name ADD member_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY;
4)ALTER TABLE tablename RENAME TO newname; → 修改表名
8.简化连接操作
1)利用选项文件存储参数 → 请参考相应资料
2)shell历史命令 → !my搜索历史命令中以my开头的最近的命令
shell alias命令 → 可在shell程序设置文件(如.bash_profile)中放置一个alias命
alias mysql_cmd='mysql -u root -p qidian'
3)脚本 → #! /bin/sh
exec mysql -u root -p qidian
9.MYSQL输入编辑命令快捷键
1)↑ ↓ ← → 分别对应CTRL+P N B F
2)CTRL+A 将光标移到行首,CTRL+E将光标移到行尾, CTRL+K删除光标到行尾的所有字符
CTRL+_撤销最后的更改,可以重复
10.以批方式运行MYSQL
1)shell下 mysql -u root -p qidian < chapter.sql > out_file
2)shell脚本范例
#! /bin/sh
if [ $# -ne 1]; then echo "Please specify one keyword"; exit; fi
mysql -t sample_db <<QUERY_INPUT → 关键字
SELECT last, first FROM member
WHERE interests LIKE "%$1%"
QUERY_INPUT