比CRUD多零星,MySQL基础运用

GoogleEarth截图

基本操作

  • MySQL的首要文件
    1.  MySQL安装目录\bin\
      mysqld.exe

      •  MySQL的服务器程序,它必须启动数据库才能健康使用
    2.  MySQL安装目录\bin\
      mysql.exe

      •  MySQL的客户端程序,用来操作MySQL数据库
    3.  MySQL安装目录\ my.ini
      •  MySQL数据库的部署文件
  • 登录:mysql -u用户名 -p密码
  • 退出:quit或exit

  • 基本SQL语法
    1.  SQL语句可以写成单行或者多行,以分行结尾。
    2.  MySQL中不区分轻重缓急写,不过提议重要字大写。
  • SQL语句

    1. 数码定义语言DDL(Data Definition
      Language)
    2. 数量操作语言DML(data manipulation
      language)
    3. 数据控制语言DCL(Data Control
      Language)
    4. 多少查询语言DQL(Data
      QueryLanguage)
    • 普遍语句:

      1. 登录:mysql –u用户名 –p密码
        1. 图片 1
      2. 退出:quit或exit

        1. 图片 2
      3. 翻看数据库的编码音讯:show variables
        like ‘char%’;

        1. 图片 3
      4. 体现所有数据库:show
        databases;

        1. 图片 4
      5. 走访数据库:use 数据库名;
        1. 图片 5
      6. 翻开所有的表:show
        tables;

        1. 图片 6
      7. 成立数据库:CREATE DATABASE [IF NOT
        EXISTS] 数据库名 [CHARSET=utf8]

        1. 图片 7

        2. 图片 8

 

        8.刨除数据库:DROP
DATABASE [IF EXISTS] 数据库名

        图片 9

        图片 10

      • 创建表

        • 语法:
        • CREATE TABLE [IF NOT EXISTS] 表名

          (

          列名 类型,

          列名 类型,

          其他选项

          )

        • 图片 11

      • 查看表结构:DESC 表名;

        • 图片 12
      • 删除表:DROP TABLE [IF EXISTS] 表名
        • 图片 13
        • 图片 14
      • 重命名表:RENAME TABLE 旧名 TO 新名;
        • 图片 15
      • 插入数据
        •  INSERT INTO 表名 (列名1,列名2,列名3…) VALUES(值1,值2,值3);
        • 图片 16
        •  INSERT INTO 表名
          VALUES(值1,值2,值3);
        • 图片 17
      • 修改数据
        • UPDATE 表名 SET 列名1=值1,列名2=值2… WHERE
        • 图片 18
      • 剔除数据
        • DELETE FROM 表名
          WHERE…
        • 图片 19
      • 清空表中的数据
        • TRUNCATE [TABLE] 表名;
        • 图片 20
        • 图片 21
      • 查询表

        • SELECT * FROM 表名
          WHERE…;
        1. 图片 22
        2. 图片 23
        • SELECT 列名1 别名1 , 列名2 别名2 … FROM 表名
          WHERE…
        1. 图片 24
        • SELECT * FROM 表名
          WHERE … LIMIT 索引 ,
          长度
        1. 图片 25
    •  函数(做一些计量)
                  1.COUNT
                      – 用来对查询到多少开展计数的。
                      – 例子1:    
                          SELECT
      COUNT(*) FROM emp;
                          – COUNT(*) 总计所有数据的行数
                      – 例子2:
                          SELECT COUNT(列名) FROM
      emp;
                          – 总结当前列不为null的数目标条数
                      – 列子3:
                          SELECT COUNT(1) FROM
      emp;
                          – 和CONUT(1)和CONUT(*)一样
                  2.MAX
                      – 获取六个值中的最大值
                      – 例子:
                          SELECT MAX(sal) FROM
      emp;
                  3.MIN
                      – 获取五个值中的最小值
                      – 例子:
                        
       SELECT MIN(sal) FROM emp;
                  4.AVG
                      – 六个值取平均值
                      – 例子:
                        
       SELECT AVG(sal) FROM emp;
                  5.SUM
                      – 五个值得求和:
                      – 例子:
                          SELECT SUM(sal) FROM
      emp;

    • 约束
              – 约束就是为表中的始末添加限制条件
              > 主键(PRIMARY KEY)
                  –
      就是一条数据的绝无仅有标识,通过主键可以高速的搜寻到数量。
                  
                  特点:
                      – 唯一
                      – 非空
                      – 可以被引用
                      
                  – 创造主键:
                      CREATE TABLE t_user(
                          id INT PRIMARY KEY,
                          `name` VARCHAR(50)
                      );
              
              > 主键自增(AUTO_INCREMENT)
                  – 主键自增指的是主键自动生成并且自动抬高
                  –
      注意:自增主键只适用于int型主键,字符串主键不可能动用。
                  – 创设形式:
                      CREATE TABLE t_user2(
                          id INT PRIMARY KEY AUTO_INCREMENT,
                          uname VARCHAR(50)
                      )
              
              > 非空(NOT NULL)
                  CREATE TABLE test_tb(
                      username VARCHAR(50) NOT NULL
                  )
              > 唯一(UNIQUE)
                  CREATE TABLE test_tb(
                      username VARCHAR(50) UNIQUE
                  )
              
              > 外键(FOREIGN KEY)
                  –
      外键关联指的是将一个表中的列和另一个表的主键进行关联。
                      FOREIGN KEY (列名) REFERENCES
      引用表的表名(引用列的列名)
                      FOREIGN
      KEY (dept_id) REFERENCES dept(id)
                      
                  – 可以被外键关联的列,一定是主键
    • 图片 26图片 27

       1 > 夫妻的关系就是一对一的关系
       2                 > 一个丈夫只能有一个妻子,一个妻子只有一个丈夫
       3                 
       4                 #一对一关系
       5                 #创建一个husband表
       6                 CREATE TABLE husband(
       7                     id INT PRIMARY KEY,
       8                     hname VARCHAR(50)
       9                 )
      10 
      11                 #创建一个wife
      12                 CREATE TABLE wife(
      13                     id INT PRIMARY KEY,
      14                     wname VARCHAR(50),
      15                     FOREIGN KEY (id) REFERENCES husband(id)
      16                 )
      17 
      18                 #插入一个husband
      19                 INSERT INTO husband VALUES(1,'武大郎');
      20 
      21                 INSERT INTO husband VALUE(1,'西门庆');
      22 
      23                 #插入一个wife
      24                 INSERT INTO wife VALUES(1,'潘金莲');
      

      示例:一对一

    • 图片 28图片 29

       1 例子:部门与员工
       2                  - 一个部门可以有多个员工,一个员工只能属于一个部门
       3                  - 一对多的关系我们一般是通过在多的一方来保存一的一方主键
       4                 #一对多的关系
       5                 #创建一个dept表
       6                 CREATE TABLE dept (
       7                     
       8                     id INT PRIMARY KEY AUTO_INCREMENT,
       9                     dept_name VARCHAR(50)
      10 
      11                 )
      12 
      13                 #创建一个员工表
      14                 CREATE TABLE emp(
      15                     id INT PRIMARY KEY AUTO_INCREMENT,
      16                     emp_name VARCHAR(50),
      17                     dept_id INT,
      18                     FOREIGN KEY (dept_id) REFERENCES dept(id)
      19                 )
      

      示例:1对N

      图片 30图片 31

       1 > 老师和学生
       2                 - 一个老师可以有多个学生
       3                 - 一个学生可以有多个老师
       4                 - 多对多的关系我们一般都是以创建一个中间表的形式来映射
       5                 - 例子:
       6                 #多对多的关系
       7                 #创建一个tea
       8                 CREATE TABLE tea(
       9                     id INT PRIMARY KEY AUTO_INCREMENT,
      10                     tname VARCHAR(50)
      11                 )
      12 
      13                 #创建一个学生
      14                 CREATE TABLE stu(
      15                     id INT PRIMARY KEY AUTO_INCREMENT,
      16                     sname VARCHAR(50)
      17                 )
      18 
      19                 #创建一个中间表
      20                 CREATE TABLE tea_stu(
      21                     tea_id INT,
      22                     stu_id INT,
      23                     FOREIGN KEY (tea_id) REFERENCES tea(id),
      24                     FOREIGN KEY (stu_id) REFERENCES stu(id)
      25                 )
      26 
      27 
      28                 #插入几个老师
      29                 INSERT INTO tea VALUES(NULL,'张三丰');
      30                 INSERT INTO tea VALUES(NULL,'陈近南');
      31                 INSERT INTO tea VALUES(NULL,'扫地僧');
      32 
      33                 #插入几个学生
      34                 INSERT INTO stu VALUES(NULL,'张无忌');
      35                 INSERT INTO stu VALUES(NULL,'韦小宝');
      36                 INSERT INTO stu VALUES(NULL,'乔峰');
      37                 INSERT INTO stu VALUES(NULL,'杨过');
      

      示例:多对多

      图片 32图片 33

      1 SELECT SUM(score),id
      2         FROM stu 
      3         WHERE id > 2
      4         GROUP BY snum
      5         HAVING SUM(score) > 90
      6         ORDER BY id ASC
      7         LIMIT 1,2;
      

      单表查询

      图片 34图片 35

       1 纵向连接(union ,union all)
       2         
       3         select name from stu1
       4         UNION all
       5         select name from stu2
       6         
       7         注意:union会对数据进行过滤,保证数据唯一,而union all不会对数据进行过滤!
       8         
       9         横向连接
      10             join on来完成横向连接
      11             inner join :只会显示满足条件的数据!
      12                 select * from person p
      13                 inner join orders o
      14                 on p.id = o.oid
      15                 
      16             left on:又称为:left out on:左外连接会将左表中所有的数据都显示出来!
      17                 select * from person p
      18                 left join orders o
      19                 on p.id = o.oid
      

      多表纵连

       

这是MySQL连串笔记的首先有的,本体系笔记希望能按照笔者自己攻读MySQL技术的阅历来记录,制止纯粹依据内容一块一块总结,也就是不同于一般按内容分配章节的图书的协会,有一个坦荡的开卷曲线。内容相比丰硕的技艺点会遵照专题在六个学习笔记中渐渐深刻。

普遍数据类型

这一部分的标题叫比CRUD多一丁点儿,比起最基础的w3c的SQL教程之外,只多一些的增加,满意应付从纯粹阅读入门资料到可以上手成功一个简易的做事的需求。

字符串

数据类型

说明

CHAR

1~255个字符的定长串,它的长度必须在创建时指定,否则MySQL假定为CHAR(1)

VARCHAR

可变长度,最多不超过255字节,如在创建时指定VARCHAR(n),则可存储0~n个字符的变长串

TINYTEXT

同TEXT,最大长度为255字节

MEDUIMTEXT

同TEXT,最大长度为16K

TEXT

最大长度为64K的变长文本

LONGTEXT

同Text,最大长度为4GB(纯文本,一般不会到4G)

其次篇的基本点内容是基础SQL语句,会基于自身工作中的经验,每个语句多介绍一些实际上开发中相比较普遍的用法。

数值

数据类型

说明

int[(m)]

有符号值:-2147683648 到2147683647(- 2^31 到2^31- 1)

无符号值:0到4294967295(0 到2^32 – 1)

double[(m, d)]

最小非零值:±2.2250738585072014e – 308

decimal (m, d)

可变;其值的范围依赖于m 和d

SQL是一种编程语言

SQL是Structure Query Language的简写。SQL并不只是用来跟数据库,而是一种完备编程语言,在各个编程语言名次榜上也都是压倒一切。SQL语言的野史和C语言一样长,从1970年Codd大学生将数据库领域日趋发扬光大至今近半个世纪,已经可以算是编程语言中的老人了。笔者以为伴随着关周到据库(RDBMS)暴发的SQL语言随着软件底层技术的日趋成熟,软件应用日益渗透到生活一切,软件开发教育也愈发普及(比如前段时间有四川省一度将Python语言列入高考),将来或者控制SQL语言的工程师会远远多于领悟C语言的工程师。

同其他语言类似,SQL有正规社团出具的正规化,但不同的数据库也有友好的不比的实现。可类比为各样语言有投机的正式,也有两样的编译器(或解释器等)的贯彻,相信做C++开发的都会被微软的VC编译器和GNU社团的GCC编译器的细微不同而抑郁的经验。这多少个题目在SQL语言领域应该是更大一些,不同的数据库SQL实现有不小的分别,但主题的看SQL语言可以分成三类:

  • DML(Data Manipulation
    Language):数据操纵语句,用户增删查改数据库记录,包括insert, select,
    update, delete,也就是大家著作标题里面常说CRUD(create read update
    delete)时候指代的那五个语句。可能入门学习时候一般说的SQL就是指这序列型的。本篇基础SQL语句骨子里也只会介绍此类。

  • DDL(Data Definition
    Language):数据定义语言,定义数据库、数据表、列、索引等。包括create,
    drop, alter等。

  • DCL(Data Control
    Language):数据控制语句,用于控制不同数量的走访权限,配置密码等。暴扣grant,
    revoke。

正文下来分别介绍DML中的INSERT,SELECT,UPDATE,DELETE

时间

数据类型

说明

DATE

1000-01-01——9999-12-31

TIME

-838:59:59——838:59:59

DATETIME

1000-01-01 00:00:00——9999-12-31 23:59:59

TIMESTAMP

19700101080001——20380119111407

INSERT语句

最简单易行的样式如下:

insert into table_name(id, cardno, `name`, `desc`) values('1', 100001, "good", "good boy");  

率先个括号里是列名,第二个括号里是对应顺序的值。

四次插入多条数据:

insert into table_name(id, cardno, `name`, `desc`) values('1', 100001, "good", "good boy"),('2', 100002, "bad", "bad girl"); 

二进制

数据类型

说明

TITYBLOB

最大长度为255字节

BLOB

最大长度为64KB

MEDIUMBLOB

最大长度为16MB

LONGBLOB

最大长度为4GB

多少个常见Tip

顺便说多少个常见的小题目,在上头的写法里冒出的:

  • 表名和列名可以动用“`做转移符,用途是当列名和表名为desc,select这种SQL的重大字和保留字时候必须接纳,否则是会报语法错误的。
  • 关于保留字和要害字不同,比如select是重中之重字,desc是保留字实际可看手册。实际上人脑也不会记得这一个首要字,所以在应用时候就全都使用转义就好了。学海无涯,每种技术的缩写、特例等等不以为奇,笔者的习惯是记念一种相比通用和平安的用法,始终去行使即可。因为不少技术点的有余方法也是一项技艺提高的野史由来促成的,并不是说都记着冒尖主意会有现实的面貌。假诺表自己创制时候,推荐的做法就仍旧要过五遍上述链接中的保留字,直接不要采取这么些词为好,毕竟这多少个选名字的年华在建表做设计阶段总的时间比起来并不会占据多少比例。笔者遭受的一对ORM库之类对那些重点字或者并不是处理的十全十美,所以并非是一级。
  • 不停字符型,其实所有插入内容其实都足以用'引起来。用'不用"还有一个好用的地点是当输入字符串里面有双引号"时候,可以免于写一流转义。
  • 表通常会有自增ID,其实被设置为自增的id也是足以在insert和update时候指定的,只是当不指定值时候才会自增。

INSERT INTO … SELECT 用法:

这是很常用的技能,当进行数量导入时候会遇见插入的多寡需要从另一个表中获取,可以选择insert into ... select的写法。

比如有供应商和买主两张表,有局部列内容是重合的,就如下写法

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;

但只顾,在statement-based的一起中,这种话语是并不安全的。类似的用法还有
INSERT … ON DUPLICATE KEY UPDATE , INSERT
IGNORE。可以看手册中的详细介绍

SELECT语句

最基础的不再赘述,SELECT用法的情节最充裕,后续会专门开一个题。那里说多少个常见的Tips。

关于NULL

第一是专注NULL,建表应该制止用NULL值,所有列都可以赋予一个默认值。因为NULL在SELECT、索引、总计函数等很多场合都会有局部令人Surprise的现象,后续可能会单独写一篇有关NULL的博客。

查找NULL时候用IS NULL,
IS NOT NULL,假使NULL值需要更换,需要用好关于NULL的多少个函数IFNULL(),
ISNULL(), COALESCE()

  • IFNULL(exp,value)能够用在言辞中代替exp的地点,表示当exp不为NULL时候使用value中的值替代。
  • ISNULL(exp) 做逻辑判断
  • COALESCE(....)函数是个多值函数,意思是回去这三个参数中按顺序首个非NULL的值。

ANY和ALL

在各样操作符号如>,<,=后使用ANY和ALL可以代表任意一个和享有的意趣。

比如说查询比任意Alert表中id大的Account表值:

select id from Account where id > ANY (select id from Alert);

例如查询比自己的id还大的(\_结果当然是未曾)

select id from Account where id > ALL (select id from Account);

GROUP BY

GROUP
BY的为主用法相比较常见,但总括函数除了count,sum等还有多少个常用的聚合函数(Aggregate
Function)。

连天函数 group_concat会将分组内的值组装为一个逗号分隔的数组

select ag.id, ag.name, group_concat(a.id) as resource_ids from AccountGroup ag left join AccountGroup_Account aga on ag.id=aga.account_group_id left join Account a on aga.account_id=a.id group by ag.id;

回去会是类似

+----+------------------------------------+--------------+
| id | name                               | resource_ids |
+----+------------------------------------+--------------+
|  1 | admin                              | 1,2,3        |
+----+------------------------------------+--------------+

count函数可以加distinct表示去重

SELECT COUNT(DISTINCT results) FROM student;

更多可以看手册

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图