zoukankan      html  css  js  c++  java
  • mysql学习笔记一 —— 数据的增删改查

    1、连接mysql

    mysql 直接回车(是以root身份,密码空,登陆的是本机localhost)
    [root@www mysql]# mysql -uroot -p123 -S /var/lib/mysql/mysql.sock

    2、设置root用户密码并登陆
    [root@www mysql]# /usr/bin/mysqladmin -u root password '123'
    再登陆:
    [root@www mysql]# mysql -u root -p123 -h localhost
    -u 指定以哪个用户的身份登陆mysql
    -p 指定密码(没有空格)
    -h 指定登陆哪台主机上的mysql

    3、安全设置(加固)
    [root@www mysql]# mysql_secure_installation

    4、配置文件
    ibdata1 InnoDB存储引擎的系统表空间,存放这innodb表的数据、回滚段
    ib_logfile0
    ib_logfile1 innodb日志文件组
    mysql 数据库,库名叫mysql(权限库)
    mysql.sock mysql的socket文件,用于本机用户登陆mysql

    /etc/my.cnf 配置文件

    [mysqld]
    datadir=/var/lib/mysql //mysql数据存放目录
    socket=/var/lib/mysql/mysql.sock //socket文件路径
    user=mysql
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0 //软连接支持与否
    character_set_server=utf8

    [mysqld_safe] //跟启动有关
    log-error=/var/log/mysqld.log //错误日志
    pid-file=/var/run/mysqld/mysqld.pid //pid文件
    character_set_database=utf8

    [mysql]
    default-character-set=utf8

    5、库的管理
    创建数据库
    文件系统:
    cd /var/lib/mysql
    mkdir DB1
    chown mysql.mysql DB1
    SQL:
    mysql> create database DB2;


    删除数据库

    文件系统:
    rm -rf DB2
    SQL:
    mysql> drop database DB1;


    查询数据库(查询有哪些数据库)
    mysql> show databases;

    使用数据库:
    mysql> use DB1;
    Database changed
    mysql> select database(); //查看当前在哪个库中
    +------------+
    | database() |
    +------------+
    | DB1 |
    +------------+
    1 row in set (0.00 sec)


    6、表的管理
    mysql数据库系统软件,提供数据库服务,主要用来存放数据:
    库-->表-->字段和记录

    6.1 增加表

    id name xingbie aihao

    枚举()
    mysql> create table T1(id int(11),name char(50),xingbie enum('M','F'),aihao set('AV','nv','nan','linux'));

    mysql> create table chengji (id int not null auto_increment primary key,class int,name char(30),yuwen int,shuxue int,yingyu int);

    not null:表示该列不能为空
    auto_increment:自动增加
    primary_key:主键索引

    id,name,xingbie,aihao 创建的表中的各个列(字段)
    int,char,enum,set 列的数据类型
    int 整数类型,整型(整数,数字)
    char 字符串(字母,汉字)
    ENUM 枚举,从给定的选项中选择一个
    set 类似enum,从给定的选项汇总选择多个

    6.2 删除表
    mysql> drop table t1;

    删除表的数据

    mysql> delete from t1;


    6.3 修改表
    增加列
    删除列
    修改列名
    修改列数据类型

    增加列:
    增加一个email列
    mysql> alter table T1 add email char(50);

    增加到指定列后面

    mysql> alter table T1 add email char(50) after id;

    增加到第一列

    mysql> alter table T1 add email char(50) first;


    删除列:
    删除email列
    mysql> alter table T1 drop email;


    修改列名
    把xingbie列改成gender
    mysql> alter table T1 change xingbie gender enum('M','F'); //change既可以修改列名,也可以列类型


    修改列类型:
    把name列的类型char(50)改为char(30)
    mysql> alter table T1 modify name char(30);


    修改表名:
    mysql> rename table T1 to T2;

    复制表:

    法一:mysql> create table T2 (select id,name,number from T1);    //不能添加主键、索引等信息

    法二:mysql> create table T2 like T1;      mysql> insert into T2 (select * from T1);

    6.4 查询表(查看有哪些表)
    mysql> show tables;
    mysql> desc T1;
    +---------+------------------------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+------------------------------+------+-----+---------+-------+
    | id | int(11) | YES | | NULL | |
    | name | char(50) | YES | | NULL | |
    | xingbie | enum('M','F') | YES | | NULL | |
    | aihao | set('AV','nv','nan','linux') | YES | | NULL | |
    +---------+------------------------------+------+-----+---------+-------+
    4 rows in set (0.03 sec)

    7、 数据管理
    7.1 增加数据
    7.2 删除数据
    7.3 修改数据
    7.4 查询数据


    增加数据
    显示表结构:
    mysql> desc T1;
    字段(列名) 列数据类型 是否允许为空 是否是索引键 默认为null 额外描述
    +---------+------------------------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +---------+------------------------------+------+-----+---------+-------+
    | id | int(11) | YES | | NULL | |
    | name | char(50) | YES | | NULL | |
    | xingbie | enum('M','F') | YES | | NULL | |
    | aihao | set('AV','nv','nan','linux') | YES | | NULL | |
    +---------+------------------------------+------+-----+---------+-------+
    4 rows in set (0.03 sec)

    插入数据:
    mysql> insert into T1 values (1,"xiaoli",'F','nan,av');
    Query OK, 1 row affected (0.01 sec)

    mysql> insert into T1 values (2,"xiaoming",'M','nv,av'),(3,"laowang",'M','nv');

    mysql>insert into chengji(class,name,yuwen,shuxue,yingyu) values (1,"danny",100,65,80),(2,"tom",100,59,80),(2,"jeck",88,60,22),(4,"hans",90,86,95);

    删除数据,删除某一条记录
    select 条件查询
    mysql> select * from T2 where id=1;

    从T2表中删除id为4的行:
    mysql> delete from T2 where id=4;

    将表中内容全部删除:
    mysql> delete from T2; //在一个事物中,支持回滚
    mysql> truncate T1; //不支持回滚

    修改数据
    update修改表中数据

    修改表中数据:update table set xx=xxx where xx=xxx;
    update user set password=password("1234");
    修改chengji表中id为1的行中shuxue列值为100
    mysql> update chengji set shuxue=100 where id=1;

    查询数据:
    mysql> select * from chengji;     *表示表中所有字段

    mysql> select * from chengji where name="danny";

    mysql> select yuwen from chengji where name="danny";  //从chengji表中查询danny的语文成绩是多少

    数学运算 + - * / %(取模)
    mysql> select 1+1;
    +-----+
    | 1+1 |
    +-----+
    | 2 |
    +-----+
    1 row in set (0.01 sec)

    mysql> select class,name,yuwen+shuxue+yingyu as zongfen from chengji;


    比较运算 > < >= <= = !=

    select 3>2; 比较结果:对,错 真1,假0

    mysql> select 3>2;
    +-----+
    | 3>2 |
    +-----+
    | 1 |
    +-----+

    mysql> select * from chengji where yuwen>=60; //chengji表中检索出yuwen成绩及格学员所有信息

    mysql> select class,name,yuwen from chengji where yuwen>=60; //检索chengji表中yuwen成绩及格的学院班级、姓名和语文成绩

    逻辑运算
    与 && 并且,条件为必要条件,都需要被满足
    或 || 非必要条件,满足其中之一
    非 not 表示否定,取反。真加上not后为假;假加上not后为真。

    mysql> select 3>2 && 5<3;
    +------------+
    | 3>2 && 5<3 |
    +------------+
    | 0 |
    +------------+
    1 row in set (0.00 sec)

    mysql> select 3>2 || 5<3;
    +------------+
    | 3>2 || 5<3 |
    +------------+
    | 1 |
    +------------+
    1 row in set (0.00 sec)

    mysql> select not 3>2;
    +---------+
    | not 3>2 |
    +---------+
    | 0 |
    +---------+
    1 row in set (0.00 sec)

    检索语数外都及格的学生的班级、姓名和语数外的成绩
    mysql> select class,name,yuwen,shuxue,yingyu from chengji where yuwen>=60 && shuxue>=60 && yingyu>=60;


    排序 order by:通过 通过哪个字段来排序
    mysql> select * from chengji order by yuwen; //通过yuwen字段排序,默认为升序排序

    desc 降序排序
    mysql> select class,name,yuwen+shuxue+yingyu as zongfen from chengji order by zongfen desc;


    限制 limit
    看一下总分前三名的信息
    mysql> select class,name,yuwen+shuxue+yingyu as zongfen from chengji order by zongfen desc limit 3;


    分组 group by:通过某个字段来分组
    统计每个班中的人数
    mysql> select class,count(class) from chengji group by class;
    count() 函数,计数函数,这里通过class字段计数

    检索区间 between...and...

    mysql> select class,name from chengji where yuwen between 80 and 90;
    +-------+-------------+
    | class | name |
    +-------+-------------+
    | 2 | shijinbao |
    | 4 | yangguangyu |
    +-------+-------------+
    2 rows in set (0.01 sec)


    常用函数
    user() 查看当前用户是谁
    database() 查看当前所属库
    version() mysql的版本
    now() 系统时间
    sum() 求和函数
    avg() 平均数
    max() 最大值
    min() 最小值
    count() 统计数量,计数

    例:

    mysql> select user();
    +----------------+
    | user() |
    +----------------+
    | root@localhost |
    +----------------+
    1 row in set (0.00 sec)

    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 5.1.73 |
    +-----------+
    1 row in set (0.01 sec)

    mysql> select now();
    +---------------------+
    | now() |
    +---------------------+
    | 2017-08-14 15:14:11 |
    +---------------------+
    1 row in set (0.02 sec)


    mysql> select count(*) from chengji;
    +----------+
    | count(*) |
    +----------+
    | 6 |
    +----------+
    1 row in set (0.00 sec)

    mysql> select sum(yuwen) from chengji;
    +------------+
    | sum(yuwen) |
    +------------+
    | 433 |
    +------------+
    1 row in set (0.01 sec)

    mysql> select avg(yuwen) from chengji;
    +------------+
    | avg(yuwen) |
    +------------+
    | 72.1667 |
    +------------+
    1 row in set (0.01 sec)


    mysql> select max(yingyu) from chengji;
    +-------------+
    | max(yingyu) |
    +-------------+
    | 95 |
    +-------------+
    1 row in set (0.00 sec)

    mysql> select min(yingyu) from chengji;
    +-------------+
    | min(yingyu) |
    +-------------+
    | 22 |
    +-------------+
    1 row in set (0.00 sec)


    8、数据类型

    数值类型
    占用磁盘空间
    tinyint 1字节即8位 -256~256
    int 4字节即32位 -42亿~42亿 11 11111111111
    bigint 8字节即64位

    DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
    | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
    | DECIMAL

    float 浮点数,单精度
    double 浮点数,双精度

    decimal(M,D)工资 decimal(10,0) 10表示最多10位,小数点后面有0位
    decimal(10,2) 最多10位数,小数点2位

    mysql> create table gongzi(name char(20),salary decimal(7,2));
    Query OK, 0 rows affected (0.02 sec)

    mysql> insert into gongzi values("gebi",24567.99),("laowang",22222.22);


    时间类型
    DATE
    | TIME
    | TIMESTAMP
    | DATETIME
    | YEAR

    mysql> create table tt1 (d date,t time,dt datetime,ts timestamp,y year);
    Query OK, 0 rows affected (0.02 sec)
    mysql> insert into tt1 values(now(),now(),now(),now(),now());
    mysql> select * from tt1;
    +------------+----------+---------------------+---------------------+------+
    | d | t | dt | ts | y |
    +------------+----------+---------------------+---------------------+------+
    | 2017-08-14 | 15:31:39 | 2017-08-14 15:31:39 | 2017-08-14 15:31:39 | 2017 |
    +------------+----------+---------------------+---------------------+------+
    1 row in set (0.01 sec)


    字符串类型
    char name char(30) xiaoming
    varchar name varchar(30) xiaoming
    从节省磁盘空间上来看,varchar好!但是使用varchar会消耗cpu计算能力,导致性能低,虽然用char占用的磁盘空间多,但是不消耗cpu,而且存放字段都是固定长度,读取速度快,性能好。所以对于字符串的数据类型,多用char。用牺牲磁盘空间来换取性能。

    存文本:
    text 纯文本
    blob 文本+图片 二进制

    枚举 在给定的选项中选择一个
    set 在给定的选项中可以选择多个

    总结:

    库:
    create database
    drop
    use
    show

    表:(增删改查)
    create table
    drop
    alter table
    增加列 add
    删除列 drop
    该列名 change
    该列类型 modify
    修改表名:rename table T1 to T2;
    show tables

    数据:(增删改查)
    增加 insert into table values(.....)
    delete from ... truncate
    update t1 set =
    select

    补充笔记:

    查看mysql数据当前状态等:(常用于mysql资源监控)
    mysql -e "show status" | grep xxx 
    mysql -uzabbix -p123 -e "show full processlist" //查看当前连接用户
    show engines //查询数据库引擎类

    myisam表:读写速度块。

    InnoDB表,支持事物,支持回滚、数据完整性。

  • 相关阅读:
    AcWing 递归实现指数型枚举 dfs
    蓝桥杯 不同单词个数统计 map
    蓝桥杯 士兵排队问题 拓扑排序
    蓝桥杯 数字黑洞 模拟
    蓝桥杯 身份证排序 排序
    蓝桥杯 质因数2 分解质因数
    ubuntu开发机初始化
    axios封装
    vue组件
    django配置跨域并开发测试接口
  • 原文地址:https://www.cnblogs.com/dannylinux/p/8026895.html
Copyright © 2011-2022 走看看