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/

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

 
原文地址:https://www.cnblogs.com/libingbin/p/5973216.html