MySQL基础语句【学习笔记】
放在这里,以备后查。
1. 数据库, 数据库服务器, 数据库语言
数据库,是持久性数据的集合,供给定企业的应用程序系统使用,并且由一个数据库管理系统来管理;
数据库服务器,又称数据库管理系统,用来管理数据库(高效地存储、查询、更新数据库,并维护数据库的完整性状态);
数据库语言,是应用程序用来向数据库服务器发送命令并从中取出所需要数据的特定语言。
2. 系统变量
查询系统变量: SELECT @@系统变量名 , eg. SELECT @@DATADIR
显示所有系统变量: SHOW VARIABLES , SHOW VARIABLES LIKE 'pattern'
设置系统变量: SET @@GLOBAL(LOCAL,SESSION).varname=值 ;
(1) 数据库目录: DATADIR ; (2) 日志: LOG_WARNINGS
(3) 最大用户连接数: MAX_USER_CONNECTIONS ; (4) 版本: VERSION
3. 系统数据库和表
(1) MYSQL.USER : 存放数据库用户登陆信息的表。
(2) INFORMATION_SCHEMA : 存放目录数据的数据库
4. 查看数据库详细信息: HELP SHOW ;SHOW WARNINGS ; SHOW STATUS ;
5. mysql 基本语句:
(1) 创建和查看用户、权限、数据库
创建用户: CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'
创建数据库: CREATE DATABASE database_name ;
授予权限:GRANT 【操作权限,比如,select, update, delete, all】 ON database_name.table_name to 'username'@'host'
查看权限: SHOW GRANTS ; 查看数据库创建定义:SHOW CREATE DATABASE database_name ;
显示当前用户所拥有的所有数据库: show databases ; 选择要使用的数据库: USE database_name ;
显示当前数据中的所有表: show tables ;
(2) 创建表和表操作
创建表: CREATE TABLE table_name ( 属性名1 属性类型1 约束1,... 属性名n 属性类型n 约束n, PRIMARY KEY(属性名i,j,...,p)) ENGINE=引擎名 DEFAULT CHARACTER SET 字符集名 COLLATE 校对名
A. 约束: 是否允许为空值(NOT NULL, 默认允许空值);是否有默认值(DEFAULT 默认值)
B. 主键值: 若不想指定,则用 NULL 代替, 由系统自动生成相应值进行填充
C. 多个列作为主键: 使用逗号隔开的多个列名的列表
D. 引擎类型:InnoDB(可靠事务处理), MyISAM(性能高,支持全文搜索,但不支持事务处理), MEMORY(速度特别快)
E. 指明所使用字符集;可以对单个列进行指定。
查看表创建定义: SHOW CREATE TABLE 表名; 查看表的字段定义: desc table_name ;
重命名表: RENAME TABLE 旧表名 TO 新表名
更改表结构:
ALTER TABLE 表名 (ADD 列名 列名类型) [添加列] | (DROP COLUMN 列名) [删除已有列] |
(ADD CONSTRAINT 约束名 FOREIGN KEY (外键名) REFERENCES 外键所在表名 (外键所在表的相应主键名))[添加外键]
查看表创建定义: SHOW CREATE TABLE 表名; 查看表的字段定义: desc table_name ;
插入数据: INSERT INTO table_name values (数据1, 数据2,... 数据n) ; 插入数据必须与对应属性名的属性类型匹配
删除数据: DELETE FROM table_name WHERE CONDITIONS
更新数据: UPDATE table_name SET 属性名=新值 WHERE CONDITIONS
创建索引: ADD (UNIQUE) INDEX 索引名 ON 表名(属性名)
创建视图: CREATE VIEW 视图名(属性名i, ... 属性名j) AS SELECT 查询语句
(3) 删除操作
删除数据库: DROP DATABASE database_name ;
删除视图: DROP VIEW 视图名
删除表: DROP TABLE 表名
删除索引: DROP INDEX 索引名
6. 查询与过滤数据
表定义[见 mysql 必知必会]:
a. 客户表 customers: cust_id(PK), cust_name, cust_email, others
b. 供货商表: vendors: vend_id(PK), vend_name, vend_country, others
c. 产品表 products: prod_id(PK), vend_id(FK), prod_name, prod_price, prod_desc
d. 客户订单表 orders: order_num(PK), order_date, cust_id(FK)
e. 订单信息表 orderitems: (order_num, order_item)(PK), prod_id(FK), quantity, item_price
(1) 基本查询与过滤:
SELECT [DISTINCT] [OP1] FROM [OP2]
WHERE [COND_CLAUSE]
ORDER BY [ OP3] <DESC>
LIMIT offset, lineNum
---> OP1: 单个列名或列名表达式,或多个用逗号隔开的列名或列名表达式。
---> OP2:一个或多个表名,用逗号隔开 ;
---> OP3: 一个或多个列名,用逗号隔开;
---> ORDER BY: 对检索结果排序,按照指定列名顺序依次排序;默认升序排列;DESC 指明降序排列;
---> LIMIT offset, lineNum : 从第 offset 行 [下标从零数起] 开始的 lineNum 行; 若行数不足 lineNum, 则检索能够得到的最大行数。
---> COND_CLAUSE: 由一个或多个条件子句组成。
-----> 条件子句结构为 '表名.列名 操作符 值或值集'
-----> 空值查询: IS NULL;
-----> 集合操作符:IN (值的集合) ; 表示仅在括号中给定的值集中取值;
-----> 通配操作符:LIKE [BINARY] 'text' ; text 为通配符文本。
通配符: % 任意多个任意字符 ; _ 任意单个字符
-----> 正则表达式:REGEXP [BINARY] 'regexText' ; regexText 为正则表达式文本
正则表达式: . 匹配任意单个字符 ; OR | 或 ;范围匹配 [0-9], [a-zA-Z] ;
//c , // 转义符,比如匹配字符点号 //. ;
* 零个或多个 ; + 一个或多个 ; {n} 恰好 n 个 ;{n,} N>=n ; {n,m} n<=N<=m
^ 文本开始 ; $ 文本末尾
-----> 可以使用逻辑操作符 AND, OR 将多个条件子句连接起来,形成多重过滤条件。
AND 优先级高于 OR ; 为确保正确的次序,尽量多使用括号来表明优先级;
NOT 可对条件字句的结果取反(F->T, T->F)。
---> 关键字: BINARY 搜索区分大小写 ; DISTINCT 去除重复行
(2) 生成新字段: 上述查询语句中,[OP1] 还可以是任何合法的列名表达式:
A. 由多个列名及字符串拼接而成的字段。 例如 SELECT Concat(列名1, ' *** ', 列名2) FROM 表名.
B. 列名的四则运算。 例如 SELECT (prod_price * quantity) FROM items;
C. 列名的函数。 例如, SELECT Concat(YEAR(order_date), '/', Month(order_date)) FROM orders;
D. AS alias_name: 可以用来给新生成的字段命名。
(3) 分组数据: 可以在WHERE 字句后加入分组子句 ; WHERE 子句在分组前过滤数据, HAVING 子句在分组后过滤数据。
SELECT [OP1] FROM [OP2] [WHERE 子句] GROUP BY 一个或多个列名 HAVING 条件子句
(4) 子查询: 子查询可以用来替代任何有值或值集的地方,尤其是与 in 连用。例如
SELECT cust_name FROM customers WHERE cust_id IN
( SELECT cust_id FROM orders WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30') ;
(5) 表联结:
A. 基本的表联结: 主要是使用笛卡尔乘积和 WHERE 子句来进行。 例如,找出所有的产品名称及供货商名称:
SELECT prod_name , vend_name FROM products, vendors Where products.vend_id = vendors.vend_id; 或者
SELECT prod_name , vend_name FROM products INNER JOIN vendors on products.vend_id = vendors.vend_id;
B. 多个表联结: 方法不变,为了避免出错,可以先在文本文件把语句写好,再复制粘贴过去以检验。
例如,找出客户所下订单的信息:
SELECT cust_name, orders.order_num, prod_name, vend_name, quantity, prod_price, item_price*quantity AS order_price
FROM customers, vendors, orders, products, orderitems
WHERE products.prod_id = orderitems.prod_id
AND orderitems.order_num = orders.order_num
AND customers.cust_id = orders.cust_id
AND products.vend_id = vendors.vend_id;
技巧: 分三步进行: a. 在 SELECT 中在多个表中选择想要显示的列名或构造列名表达式;
b. 在 FROM 中列出所有涉及到的表名;
c. 根据表中的外键及WHERE相等子句条件建立联结。
C. 自联结: 在单个 SELECT中 多次引用和联结同一张表,需要使用表别名来消除歧义性。
例如,查询生产产品ID为 'DTNTR' 的供应商生产的其它产品:
SELECT p1.vend_id, p1.prod_id FROM products AS p1, products AS p2
WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR'
D. 外联结:在自然联结的基础上附加没有被关联的行(请自行查阅相关数据库理论书籍)
SQL: SELECT ... FROM 表名1 LEFT[RIGHT] OUTER JOIN 表名2 ON ...
(6) 组合查询: 将多个 SELECT 查询组合成单个查询结果
----> SQL : SELECT ... UNION [ALL] SELECT ... [ORDER BY DESC]
----> UNION ALL: 包含多个查询结果中重复出现的行;默认是不包含重复行的;
----> ORDER BY: 必须在最后一个 SELECT 语句之后,对整个组合查询的结果进行排序。
7. 数据库维护:
(1) 执行SQL文件: /. <filename> 或者 source <filename> ; mysql -u username -p database_name < xxx.sql
(2) 备份和恢复数据表: select * into outfile '/var/lib/mysql/user.bak' from tblname;
load data infile '/var/lib/mysql/user.bak' replace into table tblname ;
(3) 备份和恢复数据库或表:
mysqldump -uxtools -h127.0.0.1 -pxtool dbname tablename > /tmp/tbl.bak.sql
MySQL基础语句【学习笔记】的更多相关文章
- mysql基础操作学习笔记(一)
1前期准备: SQL语言包涵以下4个部分: (1)数据定义语言(DDL):包括DROP, CREATE, ALTER等语句 (2)数据操纵语言(DML):包括INSERT, UPDATE, DELET ...
- mysql基础操作学习笔记(2)----索引
为什么要创建索引? 在此本人也带着相同的疑问,能够解释的仅仅是:为了减少数据库查询时所需要的速度.如果正常查询和索引查询所需时间相差很多倍时我们自然是需要索引的了. 想要知道结果,只能等我学得 ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- mySQl数据库的学习笔记
mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...
- MySQL 基础语句
MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...
- MySQL基础语句与其在Python中的使用
一.MySQL基础语句 $ mysql -u root -p (有密码时) $ mysql -u root (无密码时) QUIT (or \q) 退出 查看当前所有数据库 show dat ...
- linux基础命令学习笔记(二)
linux基础命令学习笔记(二) 1.kill :终止进程 kill pid (唯一标示一个进程) kill -9 强制终止 kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...
- Objective-c基础知识学习笔记
Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
随机推荐
- 怎么下载tomcat的其他版本
下载地址: http://archive.apache.org/dist/tomcat/ 里面包含tomcat的各个版本,windows版本.linux版本,tomcat7.0.x等.
- 服务器报错 500,请确保 ASP.NET State Service(ASP.NET 状态服务)已启动
报错信息: 解决方案: 开启此服务
- 【Enterprise Architect 】
[Enterprise Architect ]Enterprise Architect 8 key {67SC0O95-SZPS-LIG2-YQ8Q-8D2N-KWTD-0W6R-TWDD-KT6RB ...
- 无法远程访问Mysql
1.故障状态 [root@server02 ~]# mysql -utuser -h192. -p Enter password: ERROR (HY000): Can't connect to My ...
- Nginx配置文件(nginx.conf)配置详解[转]
转自:http://blog.csdn.net/tjcyjd/article/details/50695922 重新学习,发觉这篇文章写得很详细就摘录了! Nginx的配置文件nginx.conf配置 ...
- C语言模拟ATM机界面
虽然是满屏的printf.printf.printf.printf......尴尬 但是一个小项目做下来还是能学习到很多的,有很多小的问题,不是亲自来敲一遍代码,是不会发现的.他的框架,每一个小函数功 ...
- Java.lang的研究(分析包含的重要类和接口)
Java.lang包是Java中使用最广泛的一个包,它包含很多定义的类和接口. java.lang包包括以下这些类: Boolean Byte Character Class ClassLoader ...
- python range函数与numpy arange函数
1.range()返回的是range object,而np.arange()返回的是numpy.ndarray() range尽可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向 ...
- 170721、springboot编程之注解(annotation)列表
(1)@SpringBootApplication 申明让spring boot自动给程序进行必要的配置,这个配置等同于: @Configuration ,@EnableAutoConfigurati ...
- Shell--基础知识
变量的定义: a=1 b=hello c="hello world !" d='hello "反启" !' e=`ls` (注意:这是反引号) 备注:=号左右 ...