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

时间: 2024-12-05 08:54:16

MySQL基础语句【学习笔记】的相关文章

mysql基础命令学习笔记

这里不会涉及一些mysql数据库安装之类的知识,但是会将自己学习以及使用mysql一些最常用的mysql语句总结到本篇文章,作为自己的学习记录和笔记.基本的环境为CentOS 6.5 数据库为mysql5.6.30. 1.启动和停止Mysql服务 1.  /etc/init.d/mysql restar   #重启 2.  /etc/init.d/mysql stop     #停止 3.  /etc/init.d/mysql start    #启动 4.  /etc/init.d/mysql

蓝鸥Unity开发基础——If 语句学习笔记

蓝鸥Unity开发基础--If 语句学习笔记 本节内容:程序的三种结构,if语句,问号表达式 程序的三种结构 顺序结构:顺序执行语句 分支结构:通过进行判断,在多个语句块中选择某一个执行 循环结构:条件满足时,反复执行同一语句块 If语句 用if语句可以构成分支结构 它根据给定的条件进行判定,用来决定要执行某个程序段 一.if(条件表达式){语句1} using System; namespace Lesson11{    class MainClass    {        public s

黑马程序员_JAVA 基础加强学习笔记

一.面向对象 (一)继承  1.继承的好处: (1) 提高了代码的复用性. (2) 让类与类之间产生了关系,提供了另一个特征多态的前提. 注意: 子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();  如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数. 如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数. 2.final特点

java基础 异常学习笔记

1.异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序中断执行,造成不必要的损失,所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正确的执行. 2.一旦产生异常之后,异常之后的语句并不会执行,而是直接结束程序,并将错误报告给用户. 3.在计算机发展史有两大杀手:断电,被除数为0(结果为无穷大,则程序内容会被全部占满). 处理异常的格式: try{// 可能出现异常的语句} catch(异常类异常对象){//编写异常的处理语句} ca

Mysql(个人学习笔记20170321-20170328)

Mysql(个人学习笔记20170321-20170328) 数据库定义:按数据结构组织,存储,管理数据的仓库 常见数据库:Mysql,Oracle,Sql server 数据库由二维表组成,表格由若干记录,每条记录由若干字段组成 理解为Excel的话 列为字段,行为记录 设计数据库步骤 1,确定功能列表 2,确定可见数据参数类型 常用类型有 Int 整数型 Float 小数 Varchar(长度) char(长度) 字符串 (赋值需要单引号) 区别:varchar 长度可变,不足位数自动取消,

C++基础知识学习笔记

基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个对象对象=(数据结构+算法)  ,程序=(对象+对象+对象+--) 面向对象程序设计的程序员有两类:1.面向对象应用程序设计2.类库的设计 头文件:类的声明            ---类的外部接口       (成员函数在类声明中实现时,一般很简短,默认为内联函数)源文件:类的成员函数定义     -

MYSQL视图的学习笔记

MYSQL视图的学习笔记,学至Tarena金牌讲师何山,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表.视图就像一个窗口(数据展示的窗口),通过这个窗口,可以看到系统专门提供的数据(也可以查看到数据表的全部数据),使用视图就可以不用看到数据表中的所有数据,而是只想得到所需的数据. 在数据库中,只存放了视图的定义,并没有存放视图的数据,数据还是存储在原来的表里,视图的数据是依赖原来表中的

java 集合基础1 学习笔记

集合特点: 1.用于存储对象的容器. 2.集合的长度是可变的. 3.集合中不可以存储基本数据类型值. Collection接口常见方法: 1.添加 boolean add(obj); boolean addAll(Collection coll); 2.删除 boolean remove(obj); boolean removeAll(Collection coll); void clear();//清空集合 3.判断 boolean contains(obj); boolean contain

ASP.Net开发基础温故知新学习笔记

申明:本文是学习2014版ASP.Net视频教程的学习笔记,仅供本人复习之用,也没有发布到博客园首页. 一.一般处理程序基础 (1)表单提交注意点: ①GET通过URL,POST通过报文体: ②需在HTML中为表单元素设置name: ③元素id是给Dom用的,name才是提交给服务器用的: (2)请求处理响应模型: ①浏览器发出访问请求→②服务器处理访问请求并返回HTML→③浏览器解析HTML并显示页面 (3)GET与POST的区别:(★★★→重点) ①GET通过URL传值,而POST通过HTT

ARM基础知识学习笔记

/*****************数电知识*******************/ PN结(Positive-Negative) 三极管:BJT(双极结型三极管Bipolar Junction Transistor)               FET(场效应管Field Effect Transistor)          (单极结型) 1.MOSFET (金属氧化物半导体Metal Oxide Semiconductor FET)               2.JFET(结型Junct