• mysql知识初篇(一)


    mysql介绍
    (1) mysql数据库是瑞典AB开发。
    (2) mysql--> sun --> oracle。
    (3) mysql数据库的特点。
    1. 开源。
    2. 免费。
    3. 跨平台(windows/linux/unix/苹果)。
    4. 处理并发性(13000个)/安全/稳定。
    5. 该数据库 轻(对资源要求不高)安装文件 37.7M。而且
    对cpu/内存要求都不高

    基本语法:
    在dos下输入:
    mysql -u 用户名 -p 密码
    特别说明 -p 后面的密码不要有空格 /使用该命令的时候,需
    要配置一下环境变量
    2. mysql数据库也提供图形化界面来登录以及操作。
    3. 如何在mysql中创建数据库
    基本语法:
    create database mydb1 ;
    --创建一个mydb1的数据库
    create database mydb2 character set utf8 ; --创建一个
    使用utf-8字符集的mydb2的数据库
    create database mydb3 character set utf8 collate
    utf8_general_ci

    如何查看,创建数据库的指令
    show create database 数据库名;
    显示数据库
    指令: show database ;
    查看创建数据库的指令
    drop database uuu ; ----删除数据库
    如何使用某个数据库:
    use mydb1 ----use 数据库名
    -------如何创建一个数据表
    create table users(
    id int , ---学号
    name varcahr(30) ---名字
    )

    如何备份数据库和回复数据库:
    ------ 该指令,需要在dos控制台下直接执行。
    mysqldump -u root -p密码 数据名 > 存放路径+文件名.sql。
    举例子:
    mysqldump -u root -p123 myshop > D:myshop.sql
    数据库的恢复;
    mysql> source d:/myshop.sql

    恢复数据库:
    1.创建一个数据库mydb2,但是这个数据库目前是空
    2.mysql控制台,使用source备份文件路径、
    mysql分页技术:
    select * from 表名 limit start(从第几条取出),取出几条
    .创建表
    基本语法:
    create table 表名(
    列名 列的数据类型 ,
    ....
    ){
    //后面可以设置字符集
    character 字符集名称 collate 校对规则
    }
    案列:
    创建一张用户表
    create table users(
    id int ,
    name varchar(64),
    pwd varchar(64),
    birthday date
    )

    mysql的数据类型:

    数值型:
    1. bit(M) m默认为1 最大64 ---最大能存储八字节的数
    -----这部分是整型
    2. tinyint signed/unsigned 取值范围为: 这是对于有符号
    -128-127,对于无符号而言,取值范围为: 0-255,其实说明白
    了就是占一个字节。
    3.smallint 占两个字节也分为有符号和无符号两种。
    4.mediumint 占3字节也分为有符号和无符号两种。
    5. int 占4字节 分有符号和无符号
    6. bigint 占8字节 分有符号和无符号两种。

    7. float 占4字节来表示
    格式: Float(m,d)[unsigned]
    m: 表示位数 ,d 表示小数点有几位
    8. double 占8个字节
    其用法类似float,只是表示的范围更大,也是定长。
    9. numeric( m ,d )
    用于表示小数,或者整数。
    10.decimal(m ,d)属于变长。
    对于文本和二进制类型:
    常用的有:
    (1)char(m) m范围是0-255,定长
    eg: char(20)如果你存放,'abc' ,实际在表中的存在形
    式为:‘abc【17个空格】’
    小知识:
    mysql自带的client默认支持utf8码,所有我们在添加中文的
    时候,需要设置让client支持gbk.
    *show variables like '%char%'* //显示关于字符的设置参

    (2)varchar(m)
    m表示大小 范围 0-65535 变长
    varchar(20)如果你存放 'abc'字串,实际在表中存在形式‘abc’

    建 议: 如果表的某列长度固定,比如 产品编号,学号,而且
    在255内,我们应当使用char,如果长度不能取得,或者长度大于
    255,小于65535,则使用varchar。
    (3)text
    该类型,可以表示更大的字串、
    (4)日期类型:
    1. date (日期:年-月-日)
    对于date只保留 年-月-日
    2. datetime
    对于datetime。保存 年月日,时分秒
    3. timestamp
    邮戳: 该类型可以保存 年-月-日 : 时分秒
    它和datetime最大的区别是,当你upda某条记录的时候,该列
    值,会自动更新。
    -------- 建议: 如果不知道该不该用timestamp,就不要用
    *修改新的列
    alter table 表名 add 列名 数据类型
    ----修改列(列的类型和大小)
    alter table 表名 modify 列名 新的数据类型
    ----删除某列
    alter table 表名 drop 列名
    0. 在上面的员工表的基本上增加一个image列
    1. 修改job列,使其长度为60
    2. 删除sex列
    3. 表名改为user
    4. 修改表的字符集为utf8
    5. 列名name修改为username
    alter table user change column name username varchar(20);
    使用insert语句向表中插入数据。
    1、insert into 表名 [列名...] values(值...);
    2、update 表名 set 列名=表达式... where 条件
    说明:如果where 后面没有条件,则相当于对整个表进行操作。
    3、delete from 表名 where 条件,
    注意: 如果不使用where子句,将删除表中所有数据。
    所有要小心使用
    注意事项:
    1. Delete语句不能删除某一列(可使用 Update)
    2.使用delete语句仅删除记录,不删除表本身。如果删除表
    ,使用(drop语句)
    3.同insert和update一样,从一个表中删除记录将引起其它
    表的参照完整性问题,在修改数据库数据时,头脑中应该始终不
    要忘记这个潜在的问题。
    4.删除表中数据也可使用Truncate table语句,它和delete
    有所不同、
    ---truncate table 表名 ,可以删除表的记录,速度快,但
    不能回滚。
    4. 在mysql中事务的一个特殊说明:

    (1). mysql控制台是默认自动提交事务(dml)
    (2). 如果我们要在控制台使用事务,应该这样
    首先这样设置: set autocommit=false;
    设置一个保存点: savapoint AA;
    回滚: rollback to AA;
    5. select 语句
    select 列名....from 表名 where 条件
    注意事项:
    * select 指定查询乃邪恶列的数据
    * column指定列名。
    * 号代表查询所有列
    select * from 表名。
    * from 指定查询那张表
    * Distinct可选,指显示结果时,是否剔除重要数据。
    select distinct * from book ;
    ---使用where子句,进行过滤查询。
    ---like语句中,%代表0个或者多个任意字符,_代表一个字符。
    使用order by子句排序查询结果,子句应位于select语句的结尾。
    select column1,column2,column3..from table order by
    column asc|desc ;
    ASC: 升序 Desc 降序;
    count语句,统计
    统计一个班级共有多少学生
    select count(*) from student where grade>90 ;
    合计函数 sum
    sum函数返回满足where条件的行的和
    1. 统计一个班级数学总成绩?
    select sum(math) from student;
    2. 统计一个班级语文,英语,数学各科的总成绩
    select sum(math),sum(english),sum(chinese) from student;
    3.统计一个班级语文,英语,数学的成绩总和。
    select sum(math+english+chinese) from student;
    4.统计一个班级语文成绩平均分
    select sum(chinese)/count(*) from student ;
    注意:
    1. sum仅对数值起作用。否则会报错。
    avg的用法:
    1. 求一个班级数学平均分:
    select avg(math) from student ;
    2. 求一个班级总分平均分
    select avg(math+english+chinese) from student;
    合计函数---MAX/MIN
    i. 求班级最高分合最低分(数值范围在统计中特别有用)
    select max(english+math+chinese) from student;
    select语句(6)
    1. ---使用group by 子句对列进行分组
    1. select [列名] from 表名 group by 列名 ;
    2. ---使用having子句过滤
    select [列名] from 表名 group by 列名 having ...
    (1). 对订单表中商品归类后,显示每一类商品的总价
    select product ,sum(price) from goods group by product;
    注意: Having 和where 均可实现过滤,但在having可以使
    用合计函数,having通常跟在group by后,它作用于组:
    group by...having....order by ...
    请查询出,两个小时内,发布的消息:
    select * from message where data_add(publishdate,interval
    2 hour)>=now();
    特别说明:
    date_add(日期/date/datetime/timestamp , interval 数
    type);
    特殊用法:
    1. 把一张表中的Name属性的第一个字母大写,其他全部小写,
    怎么办?
    select UCASE(SUBSTRING(LCASE('simth'),)) from dual ;
    //首先把‘smith’的首字母取出
    ucase(substring('smith',1,1));
    //把‘smith’去掉首字母后,余下的部分取出转成小写
    l、case(substring(substring('smith',2,length('smith')-1));
    //最后拼凑
    select
    concat(ucase(substring('smith',1,1))lcase(substring
    ('smith',2,length('smith')-1))) from dual ;
    对于mysql的常见约束
    (1).primary key
    特点:主键是用于唯一标识一条记录的约束,一张表,最多
    只能有一个主键,主键不能为null,也不能重复。
    create table user1 (id int primary key,name varchar(32));
    (2).auto_increment 可以自增长。
    举例:
    create table user2(id int primary key auto_increment,
    name varchar(32));
    (3).unique ( 唯一约束 )
    特点:表的某列的值,不能重复,可以为null
    create table user3(
    id int unque,
    name varchar(32)
    );
    (4)not null (非空)
    mysql 的表的列,默认情况下可以为null,如果不允许某列为
    空,则可以使用not null说明
    create table user5(
    id int primary key ,
    name varchar(32) not null
    );
    (5)外键 foregn key
    从理论上说明,我们先建立主表,再建立从表
    --部门表
    create table dept(
    id int primary key ,
    name varchar(32),);
    insert into dept value(1,'财务部');
    ---雇员表
    create table emp(
    id int primary key,
    name varchar(32),
    )
    deptid int reference dept(id);
    //上面的建立外键的写法是错误的
    应该这样(表级定义)
    create table emp(
    id int primary key ,
    name varchar(32),
    depid int ,
    constraint emp_fk foreign key(deptid) references dept(id);
    )
    小结外键:
    (1).外键只能指向 主表的主键列 ,或者 unique
    (2).外键的数据类型和它指向的列的数据类型一样
    (3).外键的值,要么为空要么是指向的那列中存在的值。
    (4).外键可以指向本表的主键列,或者unique

    产品分类:
    create table producttye(
    id int primary key ,
    catagory varcahr(32),
    parentId int ,
    constraint type_fk foreign key(paranetid) references
    producttype(id);
    )
    insert into value(1,'张三',2);
    * check
    create table user7(age int check(age>12));
    补充讲解mysql分页查询:
    返回第四条----第七条记录
    select * from student limit 3,4
    基本语法:
    select * from 表名 where 条件 .... limit从第几条取,取出几条,从第几条取,这里mysql从0开始编号;
    * 安装语文成绩排序,查询出第3名到第5名
    select * from student order by chinese desc limit 2,3 扩展,分页:pageNow ,pageSize
    select * from 表名 where 条件[group by....having...order by...]limit(pageNow-1)*pageSize;
    pageSize;

  • 相关阅读:
    关于通胀,交易手续费和加密货币的货币政策
    私有链和联盟链的机会与挑战
    耶鲁大学公开课:博弈论第九节(笔记)
    区块链匿名技术
    区块链对比数据库
    硬盘 分区 格式化 和挂载
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
    Nginx实战系列之功能篇----后端节点健康检查
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4226021.html
Copyright © 2020-2023  润新知