mysql

作者: xiongsirui | 来源:发表于2016-08-15 01:33 被阅读28次

    一、JSTL中的EL函数
    字符串操作有关
    二、MVC+三层架构
    三、用户的注册和登陆案例:必须做
    注册:校验:填充模型:类型转换;回显。
    登陆:
    SQL简介:
    Structeured Query Language
    作用:是一种定义、操作、管理关系数据库的句法。大多数关系数据库都支持
    结构化查询语句的工业标准由ANSI维护。
    二、SQL语句的组成
    *DQL:数据查询语言
    *DML:数据操作语言
    *DDL:数据定义语言
    DCL:数据控制语言
    TPL:事务处理语言
    CCL:指针控制语言
    三、常用数据库
    Oracle
    DB2
    *MySQL:Linux
    四、MySQL的安装与配置


    image.png

    验证是否安装配置成功:
    MySQL -u root -p

    总结:Java类和表结构对应的。
    java对象和表中的一条记录
    五、DDL:数据定义语言
    作用:用于描述数据库中要存储的现实世界实体的语言。即创建数据库和表的结构。
    常用关键字:CREATE ALTER DROP TRUNCATE

    -----------------------------库操作
    显示所有的数据库
    SHOW DATABASES;
    创建一个名称为mydb1的数据库。
    CREATE DATABASE mydb1;
    查看数据库的创建细节,可以看到使用的字符集。
    SHOW CREATE DATABASE mydb1;
    创建一个使用gbk字符集的mydb2数据库。
    CREATE DATABASE mydb2 CHARACTER SET gbk;
    创建一个使用gbk字符集,并带校对规则的mydb3数据库。
    CREATE DATABASE mydb3 CHARACTER SET gbk COLLATE gbk_chinese_ci;
    删除前面创建的mydb3数据库
    DROP DATABASE mydb3;
    查看服务器中的数据库,并把mydb2的字符集修改为utf8;
    ALTER DATABASE mydb2 CHARACTER SET utf8;
    

    显示当前的数据库
    SELECT DATABASES();
    常用数据类型
    BIT(M)位类型。M指定位数,默认值1,范围1-64
    TINYINT带符号的范围是-128到127.无符号0到255.
    BOOL使用0或1表示真或假
    2的16次方
    创建一个员工表:
    CREATE TABLE employee{
    id int,
    name vachar(100),
    gender varchar(10),
    birthday date,
    entry_date date,
    job varchar(100),
    salary float(8,2),
    resume text
    };
    查看库中的所有表格
    SHOW TABLES;
    查看表的结构
    DESC employee;
    在上面员工表的基本上增加一个image列。
    ALTER TABLE employee ADD image blob;
    修改job列,使其长度为60。
    ALTER TABLE employee MODIFY job varchar(60);
    删除image列。
    ALTER TABLE employee DROP image;
    表名改为user。
    RENAME TABLE employee TO user;
    修改表的字符集为utf8
    ALTER TABLE user CHARACTER SET utf8;
    大小问题:MySQL在window系统下不区分大小写的。
    在其他系统严格区分大小写。

    DML:数据操作语言
    作用:用于向数据库表中插入、删除、修改数据
    常用关键字:INSERT UPDATE DELETE
    特别注意:MySQL,字符串或日期要包含在单引号中。
    空值:NULL
    使用insert语句向表中插入三个员工的信息。
    INSERT INTO user (id,username,gender,birthday,entry_date,job,salary,resume) VALUES (3,'杜小文','male','1935-12-02','2014-09-16','CTO',100000,'杜总');
    插入中文数据:
    mysql> SHOW VARIABLES LIKE 'character%';
    +--------------------------+------------
    -----------+
    | Variable_name | Value
    |
    +--------------------------+------------
    -----------+
    | character_set_client | utf8 *客户端使用的编码
    |
    | character_set_connection | utf8 数据库连接时使用的编码
    |
    | character_set_database | utf8 数据库用的编码
    |
    | character_set_results | utf8 *查询结果集用的编码
    |
    | character_set_server | utf8 服务器使用的编码
    |
    | character_set_system | utf8 系统使用的编码
    告知服务器客户端使用的编码:
    SET character_set_client=gbk;
    将所有员工薪水修改为5000元。
    将姓名为’zxn’的员工薪水修改为3000元。
    将姓名为’lyx’的员工薪水修改为4000元,job改为ccc。
    UPDATE user SET salary=4000,job='OOO' WHERE username='lyx';
    将杜小文的薪水在原有基础上增加1000元。
    UPDATE user SET salary=salary+1000 WHERE username='杜小文';
    删除表中所有记录。
    DELETE FROM user;(一条一条的删除)
    使用truncate删除表中记录
    TRUNCATE TABLE user;(摧毁整张表格,重新建立表结构)
    七、DQL:数据查询语言
    DQL:Data Query Language
    作用:查询数据,返回结果集。
    常用关键字:
    SELECT
    查询表中所有学生的姓名和对应的英语成绩。
    SELECT name,english FROM student;
    过滤表中重复数据。
    SELECT DISTINCT english FROM student;
    过滤表中重复数据。
    SELECT DISTINCT english FROM student;

    在所有学生数学分数上加10分特长分。
    SELECT name,math+10 FROM student;
    统计每个学生的总分。
    SELECT name,chinese+english+math FROM student;
    使用别名表示学生分数
    SELECT name AS 姓名,chinese+english+math 总分 FROM student;

    查询姓名为王五的学生成绩
    SELECT * FROM student WHERE name='王五';
    查询英语成绩大于90分的同学
    SELECT * FROM student WHERE english>90;
    查询总分大于200分的所有同学
    SELECT * FROM student WHERE (chinese+english+math)>200;

    查询英语分数在 80-90之间的同学。
    SELECT * FROM student WHERE english BETWEEN 80 AND 90;
    查询数学分数为89,90,91的同学。
    SELECT * FROM student WHERE math IN (89,90,91);
    查询所有姓李的学生成绩。
    SELECT * FROM student WHERE name LIKE '李%';
    查询数学分>80,语文分>80的同学。
    SELECT * FROM student WHERE math>80 AND chinese>80;

    对数学成绩排序后输出。
    SELECT name,math FROM student ORDER by math;
    对总分排序后输出,然后再按从高到低的顺序输出
    SELECT name AS 姓名,chinese+english+math 总分 FROM student ORDER BY 总分 DESC;
    对姓李的学生成绩排序输出
    SELECT * FROM student WHERE name LIKE '李%' ORDER BY chinese;

    八、数据完整性(很重要)
    数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错误。
    1、实体(行)完整性
    规定表的一行(即每一条记录)在表中是唯一的实体。
    通过定义主键约束来实现。
    主键:PRIMARY KEY
    特点:不能为null,且唯一。
    主键:
    逻辑主键:比如ID,不代表实际的业务意义,只是用来标识一条记录
    业务主键:比如username作为主键。

    方式一:
        CREATE TABLE t1(
            id int PRIMARY KEY,
            name varchar(100)
        );
        方式二:可以定义联合主键
        CREATE TABLE t2(
            id int,
            name varchar(100),
            PRIMARY KEY(id)
        );
    方式三:(推荐)
        CREATE TABLE t3(
            id int,
            name varchar(100)
        );
        ALTER TABLE t3 ADD PRIMARY KEY (id);
    

    自动增长的主键:(Oracle没有的)
    CREATE TABLE t4(
    id int PRIMARY KEY AUTO_INCREMENT,
    name varchar(100)
    );
    2、域(列)完整性
    指数据库的列必须符合某种特定的数据类型或约束
    数据类型
    长度
    非空约束:NOT NULL
    唯一约束:UNIQUE
    CREATE TABLE t5(
    username varchar(100) NOT NULL UNIQUE,
    gender varchar(100) NOT NULL,
    phonenum varchar(100) UNIQUE
    );
    3、参考完整性:多表,外键约束
    多表设计:
    一对多

    image.png
    CREATE TABLE customers(
    id int,
    name varchar(100),
    address varchar(255),
    PRIMARY KEY(id)
    );
    CREATE TABLE orders(
    id int PRIMARY KEY,
    order_num varchar(100),
    price float(8,2),
    status int,
    customer_id int,
    CONSTRAINT customer_id_fk FOREIGN KEY(customer_id) REFERENCES customers(id)
    );
    类和数据库表结构对应,对象和数据库表中的记录对应。
    类的设计有方向
    public class Customer{
    private int id;
    private String name;
    private String address;
    private List<Order> orders = new ArrayList<Order>();
    }
    public class Order{
    private int id;
    private String orderNum;
    private float price;
    private int status;
    private Customer customer;
    }
    多对多
    CREATE TABLE teachers(
    id int PRIMARY KEY,
    name varchar(100),
    salary float(8,2)
    );
    CREATE TABLE students(
    id int PRIMARY KEY,
    name varchar(100),
    grade varchar(100)
    );
    CREATE TABLE teacher_student(
    t_id int,
    s_id int,
    PRIMARY KEY(t_id,s_id),
    CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id),
    CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id)
    );
            类如何设计:
            public class Teacher{//多对多
                private int id;
                private String name;
                private float salary;
                private List<Student> students;
            }
            public class Student{
                private int id;
                private String name;
                private String grade;
                private List<Teacher> teachers;
            }
    

    一对一
    按外键关联,按主键关联(实际开发基本不用)
    九、多表查询
    a、交叉链接:
    SELECT * FROM customers,orders;
    b、内连接:
    SELECT * FROM customers c,orders o WHERE c.id=o.customer_id;
    c、外连接:
    查询所有的客户信息,同时把对应的订单查询出来。
    左外:返回符合链接条件的记录,同时返回左表中不满足链接条件的剩余记录
    SELECT * FROM customers c LEFT OUTER JOIN orders o ON c.id=o.customer_id;
    右外:
    SELECT * FROM customers c RIGHT JOIN orders o ON c.id=o.customer_id;
    2、几个简单的子查询
    嵌套查询,子查询的语句放到小括号之内。 ID=1的这个老师教过哪些学员(语句的查询形式:多条SQL语句)
    SELECT s_id FROM teacher_student WHERE t_id=1;
    SELECT * FROM students WHERE id IN (1,2);
    子查询:
    SELECT * FROM students WHERE id IN (SELECT s_id FROM teacher_student WHERE t_id=1);
    十、分组统计
    统计一个班级共有多少学生?
    SELECT COUNT() FROM student;
    统计数学成绩大于90的学生有多少个?
    SELECT COUNT(
    ) FROM student WHERE math>90;
    统计总分大于250的人数有多少?
    SELECT COUNT(*) FROM student WHERE (chinese+english+math)>250;

    统计一个班级数学总成绩?
    SELECT SUM(math) FROM student;
    统计一个班级语文、英语、数学各科的总成绩
    SELECT SUM(chinese),SUM(english),SUM(math) FROM student;
    统计一个班级语文、英语、数学的成绩总和
    SELECT SUM(chinese+english+math) FROM student;
    统计一个班级语文成绩平均分
    SELECT SUM(chinese)/COUNT(*) FROM student;

    求一个班级数学平均分?
    SELECT AVG(math) FROM student;//不会包含为null
    求一个班级总分平均分
    SELECT AVG(chinese+english+math) FROM student;
    注意:可以使用` 反引号把关键字包含起来,当做普通字符串对待。
    对订单表中商品归类后,显示每一类商品的总价
    SELECT product,SUM(price) FROM t_order GROUP BY product;
    查询购买了几类商品,并且每类总价大于100的商品
    SELECT product,SUM(price) FROM t_order GROUP BY product HAVING SUM(price)>100;
    十一、MySQL备份与恢复
    备份:
    c:/>mysqldump -h localhost -u root -p mydb1>d:/mydb1.sql

    恢复:
    先创建数据库名,并选择数据库
    方式一:mysql>SOURCE d:/mydb1.sql;
    方式二:c:/>mysql -u root -p test<d:/mydb1.sql

    相关文章

      网友评论

          本文标题:mysql

          本文链接:https://www.haomeiwen.com/subject/xjiysttx.html