zoukankan      html  css  js  c++  java
  • MySQL基础学习

    1.练习服务器地址

    云服务器地址:39.106.41.11    student/gloryroad   端口:3306

    数据库装在的机器:是数据库服务器

    你想连接数据库服务器:

    a.需要一个客户端软件 (类似于C/S结构),图形界面的连接方式

         客户端:sqlyog    或者  安卓mysql有个自动的命令行客户端

    b.命令行的连接方式:  mysql -h172.20.43.87 -ustudent –pgloryroad

    本机数据库:

    (本机:127.0.0.1或localhost)

    mysql   root  密码:QingQing0919

    端口:3306

    2. 一台数据库上可以装多个数据库的实例吗?

    可以的,只是比较麻烦,装个多个不同的实例需要通过不同的端口去使用,只装一个的话默认端口就是3306.

    3. 数据库操作

    启动数据库

    service gloryroad START

    关闭数据库

    service gloryroad STOP

    重启数据库

    service gloryroad restart

    USE qing;  使用数据库

    CREATE TABLE demo(id INT(11)); 创建表

    CREATE TABLE NAME(id INT(11));

    SHOW TABLES; 查看表

    DROP TABLE demo; 删除表

    SHOW TABLES;

    CREATE USER 'stu'@'%' IDENTIFIED BY "Qing"  创建了一个数据库用户

    #stu是用户名,%是哪个ip段可以使用,Qing是该用户的密码

    CREATE USER 'gloryroad'@'localhost'IDENTIFIED BY "Qing2" 创建了一个本地使用的数据库用户

    FLUSH PRIVILEGES; 刷新,把权限刷新一下(一般创建了用户之后用)

    CREATE DATABASE wenqing;  创建数据库

    SHOW DATABASES wenqing;  查看数据库

    DROP DATABASE;  删除数据库

    相关操作命令:

    GRANT

    SELECT

    INSERT

    UPDATE

    DELETE

    CREATE

    DROP

    SELECT DATABASE(); 查询当前在使用哪些库

    SELECT USER(); 查询当前登录的哪个用户

    SELECT * FROM qing; 查询表

    DESC id; 降序查看id

    4. 创建表:

    CREATE TABLE book(

        id INT NOT NULL AUTO_INCREMENT, #非空,字段自增

        book_name VARCHAR(100) NOT NULL, #char不可变  varchar可变,存储实际长度,省空间但费时

        boook_author VARCHAR (40) NOT NULL,

        price INT(10) DEFAULT 0,#默认为0

        publish_date DATE,

        PRIMARY KEY(id) #使用id作为主键

        )ENGINE=INNODB DEFAULT CHARSET=utf8; #innodb只有它支持事务 表的编码是utf-8

    SHOW TABLES

    自己练习创建一个表:

    CREATE TABLE people(

           id INT NOT NULL AUTO_INCREMENT,

           NAME VARCHAR(20) NOT NULL,

           sex VARCHAR(4) NOT NULL,

           weight DECIMAL (5,2) DEFAULT 45,  decimal是小数,5,2表示 3位整数2位小数

           high INT(5) DEFAULT 160,

           birth DATE,

           PRIMARY KEY (id)

    ) ENGINE = INNODB DEFAULT CHARSET = utf8;

    SHOW TABLES;

    1. DROP TABLE book;删除表
    2. 插入数据

    USE people;

    INSERT INTO people(NAME,sex,weight,high,birth)

               VALUES("林治彭","男",75,173,"1983-10-19"),

               ("齐文清","女",43,153,"1992-10-04");

          

    SELECT * FROM people;  查看表数据

    5. 查表中对应字段

    USE people;

    SELECT id,NAME FROM people;

    6. 使用别名查询表中字段

    USE people;

    SELECT id 序号,NAME 姓名 FROM people;

     不影响原有数据库内容

    7.精确查询

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME = "齐文清";

    8. or 或 查询

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME = "齐文清" OR id = 1;

    9.and 与 查询  !非

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" AND id != 1;

    10. 升序、降序

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id ;(升序)

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id DESC;(降序)

    11. 查看限定条数

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id LIMIT 2;

    12. 查看指定条后面的一条

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME ="林治彭" ORDER BY id LIMIT 2,1;

     相当于查看的第三条(2,1表示查看第二条后面的一条)

    13. 模糊查询,用%

    USE people;

    SELECT id 序号,NAME 姓名 FROM people WHERE NAME LIKE "%林%";

    但是模糊查询比较耗费性能

    14. 统计查询处的结果条数,count函数

    USE people;

    SELECT COUNT(*) 总数 FROM people WHERE NAME LIKE "%林%";

    在一些大的数据量时用这个是非常耗费性能的,最后不要这么做,如果需要就在前端处理,前端可以做分布式,尽量不要用数据库做这个事情。

    15. 增删改查大练习

    创建表

    CREATE TABLE author(

           id INT NOT NULL AUTO_INCREMENT,

           author_name VARCHAR(100) NOT NULL,

           salary INT(10) DEFAULT 0,

           PRIMARY KEY(id)

    )ENGINE = INNODB DEFAULT CHARSET=utf8;

    SHOW TABLES

    16. 插入数据

    USE people;

    INSERT INTO people(NAME,sex,weight,high,birth)

           VALUES ("李老师","女",50,160,"1984-10-11"),

           ("吴老师","男",70,165,"1977-10-29");

    SELECT * FROM people;

    17. 子查询:两个表是关联的,通过一个语句可以查出两个表中的内容

    SELECT * FROM people WHERE NAME IN(SELECT author_name FROM author);

    DESC NAME;

    18. 内连接

    SELECT a.* FROM author a INNER JOIN people b

    ON a.`author_name` = b.`name`;

    a和b是利用了表别名,inner join实现内连接,使得两个表关联在一起。

    SELECT DISTINCT a.* FROM author a INNER JOIN people b

    ON a.`author_name` = b.`name`;

    dictinct是去重

    内连接是把两个表相同的全部做扫码,这样耗费性能。

    19. 左链接

    SELECT a.*,b.`name` FROM author a LEFT JOIN people b

    ON a.`author_name` = b.`name`;

    左连接的好处是把所有数据都显示出来,以左表为准,左表中数据存在即出现在结果里

    20. 右连接

    SELECT b.*,a.author_name FROM people b RIGHT JOIN author a

    ON b.`name`= a.`author_name`;

    21. 全连接

    不存在

    22. 分组

    SELECT COUNT(*) SUM,author_name FROM author GROUP BY author_name

    HAVING SUM >=1;

    把超过1个相同名字的老师筛选出来,group by分组

    sum统计个数,having条件

    23. 练习:把工资大于300000的筛选出来

    SELECT author_name,salary FROM author

    HAVING salary>=300000;

    24. 更新数据 update

    SELECT * FROM author;

    UPDATE author SET author_name = "齐老师"

    WHERE author_name = "林老师";

    SELECT * FROM author ;

    25. 删除表

    drop:删除的干干净净,把表结构也删除了

    trunct:把表中所有数据全删光,不删除表结构

    delete:直接删除表中数据,需要有where条件时可以用这个

    DELETE FROM author WHERE author_name = "吴老师";

    SELECT * FROM author;

    不加条件那就全部删除了

    drop author

    26. union和union all ,把两个表中的字段合成一个字段

    SELECT author_name FROM author UNION SELECT NAME FROM people;

    SELECT author_name FROM author UNION ALL SELECT NAME FROM people;

    27. 事物

    SET autocommit =0;

    BEGIN;

    DELETE FROM author;

    SELECT * FROM author;

    ROLLBACK; #回滚事物

    BEGIN; 开始一个事物

    DELETE FROM author;

    SELECT * FROM author;

    COMMIT;# 执行后全部生效,提交

    commit和rollback之间的就是事物

  • 相关阅读:
    三层架构(我了解并详细分析)
    define a class for a linked list and write a method to delete the nth node.
    无阻塞情况connect生产EINPROGRESS错
    辛星和你解读PHP递归
    Android -- Looper.prepare()和Looper.loop() —深度版
    Canvas翻转方法
    BP神经网络的基本原理
    muduo网络图书馆评测
    HBASE
    MySQL
  • 原文地址:https://www.cnblogs.com/qingqing-919/p/8352591.html
Copyright © 2011-2022 走看看