• Sql与MySQL简单入门


      作为过来人,给“新司机”一点建议:运维时需要搭建的生产环境,需尽量保持与测试环境一致;但搭建环境时,又苦于找不到合适的版本怎么办?不用怕,我是一个体贴的人,管杀也管埋(该链接为MySQL 各个历史版本下载的链接:http://downloads.mysql.com/archives/community/)。
     
    1.MySQL
        [1]数据库简介
            - DataBase
            - 存储数据的仓库
            - 关系型数据库
            - 关系型数据库中保存全都是表格(Table)
            - 数据库的有点:
                1.可以保存大量的信息
                2.有较好的查询性能
     
            - 常见数据库:
                - MySQL --> 甲骨文
                - DB2 --> IBM
                - Oracle --> 甲骨文
                - SQL Server --> 微软
     
        [2]SQL(Structured Query Language)简介
            - 结构查询语言
            - SQL就是一门来操作数据库的语言
            - SQL的国际化标准是由ISO组织来定义的
                大部分厂商都对SQL标准进行了实现,而各个厂商又在SQL标准上进行了扩展,
                    数据库厂商自己扩展的功能,我们称为方言。
            - SQL的基本语法:
                1.SQL是大小写不敏感的,但是我们要求关键字要大写。
                2.SQL语句要求以;结尾(主要指在命令行窗口)
                3.SQL中的命名规范,单词之间使用下划线连接
     
        [3]数据库操作
            > 基本操作
                - 登录:
                    mysql -u用户名 -p密码
                - 退出:
                    quit/exit
                - 显示所有数据库:
                    SHOW DATABASES;
                - 使用数据库:
                    USE 数据库名;
                - 创建数据库:
                    CREATE DATABASE 数据库名;
                - 显示所有表:
                    SHOW TABLES;
                - 查看表中的数据:
                    SELECT * FROM 表名;
                - 删除数据库
                    DROP DATABASE 数据库名;
     
            > 表操作:
                - 创建表
                    CREATE TABLE 表名(
                        列名 列类型,
                        列名 列类型,
                        ...
                        列名 列类型
                    );
     
                    例子:
                        CREATE TABLE t_stu(
                            name VARCHAR(50)
                        );
     
                - 查看表结构
                    DESC 表名;
     
                - 删除表
                    DROP TABLE 表名;
     
     
            > 常用数据类型
                - 字符串
                    CHAR
                        - 定长字符串,char的长度是固定的
                            比如:CHAR(10),长度永远为10
                                如果内容的长度不够10,则自动在字符串后边补空格
                            char型数据在保存时会自动去掉后边的空格
                        - 一般我们使用char型来保存一些长度固定的数据,身份证号
                        - CHAR的最大长度是255   
     
                    VARCHAR
                        - 可变长度的字符串
                        - 最大长度65535
     
                - 数值
                    INT
                        - 整型
                        - 创建int类型也可以指定长度
                        - int(11),默认长度也是11,所以在创建int型的不用指定长度
     
                    DOUBLE
                        - 浮点型
                        - 表示浮点数
                        - 声明double可以指定一个长度
                            double(5,2) --> 表示数字长度是5位,其中有两位小数
     
                    DECIMAL
                        - 浮点类型
                        - 十进制精确计算的浮点类型
                        - DECIMAL使用方式和DOUBLE类似,也是可以声明一个长度 DECIMAL(6,2)
                        - 一般涉及到钱的数据时我们需要使用
     
                - 时间
                    DATE
                        - 只保存日期
                        - 2016-1-9
                    TIME
                        - 只保存时间
                        - 11:21:00
                    DATETIME
                        - 同时保存时间和日期
                        2016-1-9 11:21:00
                    TIMESTAMP
                        - 保存时间戳
                        - 时间戳值:1970-1-1 0:0:0 到当前时间的一个毫秒数
                        - 时间戳默认在数据被修改后自动更新
     
            - 创建一个学生表
                int id
                String name
                Date birth
                String gender
     
                CREATE TABLE t_stu(
                    id INT,
                    name VARCHAR(50),
                    birth DATE,
                    gender CHAR(2)
                );
     
     
     
            > 数据库的操作主要就是对表中数据的增删改查(CRUD)
     
            > 数据的修改
                - 插入数据
                    > INSERT INTO 表名 (列名1,列名2,列名3, ... 列名N) VALUES(列值1,列值2,列值3 ... 列值N);
                        - 例子,我们向t_stu表中插入一个学生信息
                            id为1,name为sunwukong,birth为1980-8-8,性别为male
                        - INSERT INTO t_stu (id, name, birth, gender) VALUES(1,'sunwukong','1980-8-8','male')
                        - 在mysql中操作字符串时一定要使用单引号'
                            INSERT INTO t_stu (id, name, birth) VALUES(1,'sunwukong','1980-8-8');
     
                    > INSERT INTO 表名 VALUES(列值1,列值2,列值3 ... 列值N);
                        - 如果表名后边不写列名,则values中的值,应该按照创建表时顺序来写
                        INSERT INTO t_stu VALUES(3,'zhubajie','1970-7-1','male');
     
     
                - 修改数据
                    > UPDATE 表名 SET 列名1=列值1,列名2=列值2, ... 列名N=列值N [WHERE 条件];
                    > 例子:
                        UPDATE t_stu SET gender='male'
                        这种不加条件的update语句,会修改表中的所有数据。
                            如果只希望修改部分数据,则需要在语句后边添加上条件。
     
                    > 例子2
                        UPDATE t_stu SET gender='怪蜀黍' WHERE id=4;
                         - 在WHERE关键字后边可以附加条件,这样语句只会对符合条件的数据生效
                         - SET之后的=号,代表赋值
                         - WHERE之后的=号,代表判断
                         - 大部分逻辑运算符都可以在SQL中使用
     
                    > 例子3
                        UPDATE t_stu SET gender='猪' WHERE id=3 AND name='zhubajie';
                        UPDATE t_stu SET gender='男' WHERE id=3 OR id=4;
                        - AND表示并列,AND前后的条件必须同时满足,才会执行
                        - OR表示或者,OR前后的条件只要满足一个就好执行。
     
     
                - 删除数据
                    > DELETE FROM 表名 [WHERE 条件];
                    > 例子1:
                        DELETE FROM t_stu;
                        - 不带条件的删除,会删除表中的所有数据(慎用)
     
                    > 例子2:
                        DELETE FROM t_stu WHERE id=3;
                        - 删除id为3的学生信息
     
                - 清空表
                    > TRUNCATE TABLE 表名;
                    > 清空表时干了两件事:
                        1.删除整个表
                        2.创建一个新表
     
     
            > 数据的查询
                - 查询表中的所有列
                    SELECT * FROM 表名 [WHERE 条件];
                    * 代表查找全部的列
                - null比较特殊,不能用=判断,使用IS NULL
     
                - 查询表中的指定列
                    SELECT 列名1 , 列名2 , ... 列名N FROM 表名 [WHERE 条件];
                    SELECT empno , ename , job , mgr , hiredate , sal , comm , deptno FROM emp;
                    - 真正开发时,数据库表的列数往往是很多的,所以向SELECT * FROM emp这种语句,开发中用的不多。
     
     
                - 使用别名
                    SELECT 列名1 AS 别名1 , 列名2 AS 别名2 , ... 列名N AS 别名N FROM 表名 [WHERE 条件];
     
                    - 例子:我们可以在列名后跟着一个AS关键字,然后设置别名
                    SELECT empno AS 员工号 , ename AS 姓名 , job AS 职位 , mgr AS 上级 , hiredate AS 入职日期 , sal AS 工资 , comm AS 提成 , deptno AS 部门编号 FROM emp;
     
                    SELECT 列名1 别名1 , 列名2 别名2 , ... 列名N 别名N FROM 表名 [WHERE 条件];
                    - 例子:也可以不使用AS关键字,直接在列名后加一个空格,然后加别名
                    SELECT empno 员工号 , ename 姓名 , job 职位 , mgr 上级 , hiredate 入职日期 , sal 工资 , comm 提成 , deptno 部门编号 FROM emp;
     
                - 排序
                    > 升序
                        SELECT * FROM 表名 ORDER BY 列名 ASC;
                        例子:
                            SELECT * FROM emp ORDER BY sal ASC;
     
                    > 降序
                        SELECT * FROM 表名 ORDER BY 列名 DESC;
                        例子:
                            SELECT * FROM emp ORDER BY sal DESC;
     
            > 函数(做一些计算)
                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;
        [4]约束
            - 约束就是为表中的内容添加限制条件
            > 主键(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)
     
                - 可以被外键关联的列,一定是主键   
                - 注意:含外码的关系称为参照关系。
     
                - 一对多 1-N
                    例子:部门与员工
                     - 一个部门可以有多个员工,一个员工只能属于一个部门
                     - 一对多的关系我们一般是通过在多的一方来保存一的一方主键
                    #一对多的关系
                    #创建一个dept表
                    CREATE TABLE dept (
     
                        id INT PRIMARY KEY AUTO_INCREMENT,
                        dept_name VARCHAR(50)
     
                    )
     
                    #创建一个员工表
                    CREATE TABLE emp(
                        id INT PRIMARY KEY AUTO_INCREMENT,
                        emp_name VARCHAR(50),
                        dept_id INT,
                        FOREIGN KEY (dept_id) REFERENCES dept(id)
                    )
     
                - 一对一 1-1
                    > 夫妻的关系就是一对一的关系
                    > 一个丈夫只能有一个妻子,一个妻子只有一个丈夫
     
                    #一对一关系
                    #创建一个husband表
                    CREATE TABLE husband(
                        id INT PRIMARY KEY,
                        hname VARCHAR(50)
                    )
     
                    #创建一个wife
                    CREATE TABLE wife(
                        id INT PRIMARY KEY,
                        wname VARCHAR(50),
                        FOREIGN KEY (id) REFERENCES husband(id)
                    )
     
                    #插入一个husband
                    INSERT INTO husband VALUES(1,'武大郎');
     
                    INSERT INTO husband VALUE(1,'西门庆');
     
                    #插入一个wife
                    INSERT INTO wife VALUES(1,'潘金莲');
     
                - 多对多 N-N
                    > 老师和学生
                    - 一个老师可以有多个学生
                    - 一个学生可以有多个老师
                    - 多对多的关系我们一般都是以创建一个中间表的形式来映射
                    - 例子:
                    #多对多的关系
                    #创建一个tea
                    CREATE TABLE tea(
                        id INT PRIMARY KEY AUTO_INCREMENT,
                        tname VARCHAR(50)
                    )
     
                    #创建一个学生
                    CREATE TABLE stu(
                        id INT PRIMARY KEY AUTO_INCREMENT,
                        sname VARCHAR(50)
                    )
     
                    #创建一个中间表
                    CREATE TABLE tea_stu(
                        tea_id INT,
                        stu_id INT,
                        FOREIGN KEY (tea_id) REFERENCES tea(id),
                        FOREIGN KEY (stu_id) REFERENCES stu(id)
                    )
     
                    #插入几个老师
                    INSERT INTO tea VALUES(NULL,'张三丰');
                    INSERT INTO tea VALUES(NULL,'陈近南');
                    INSERT INTO tea VALUES(NULL,'扫地僧');
     
                    #插入几个学生
                    INSERT INTO stu VALUES(NULL,'张无忌');
                    INSERT INTO stu VALUES(NULL,'韦小宝');
                    INSERT INTO stu VALUES(NULL,'乔峰');
                    INSERT INTO stu VALUES(NULL,'杨过');
     
     

    转载请注明出处!

    http://www.cnblogs.com/libingbin/

    感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。

     
  • 相关阅读:
    VTK二维图像的三维显示
    VtkTransform 和 SetPosition的区别
    Qt QList 遍历元素
    Qt QList详解
    QT QList介绍及应用
    Qt 生成随机区间浮点数 generateRand
    Qt qsrand qrand 产生随机数的两只方法
    Qt QStringLiteral
    Qt QMap简单用法
    Qt 遍历QMap
  • 原文地址:https://www.cnblogs.com/libingbin/p/5973216.html
Copyright © 2020-2023  润新知