您的位置:金沙游乐场85155 > 大数据库 > mysql数据库

mysql数据库

发布时间:2019-10-02 09:53编辑:大数据库浏览(173)

    mysql数据库基础知识

    mysql笔记

    什么是数据库

    数据库顾名思义,就是用来存储数据的工具,用一个比例形象的例子来比喻,就是Excel,一个Excel文件就可以看成是一个数据库。

    一,补充

    关系型数据库

    就是以行与列构成的二维数据表的形式,用来存储数据的,并且将多张数据表存储在一个单元中的存储形式,就称为关系型数据库。

    cd ;dos窗口查看文件夹,盘与盘之间不需要cd

    数据表

    由行与列构成的二维结构的存储数据的表格。

    has a;生命周期,拥有,自己的

    记录

    就是数据表中行,一横行数据我们就称为一条数据记录。

    通常而言,每条数据记录都有一个ID号,我们可以把这个id理解成是excel中的行号,用来对每条记录进行区分与标记。

    use e;使用,传进来的

    主键

    很多时候我们将id称为主键,主键这是指这张表的排列顺序的依据。

    and;和

    字段

    数据字段,就是数据表中的列。

    每一个字段都需要指定一个名称,用来说明该列数据的作用,就叫作字段名。

    is e;是

    常用的数据库的类型

    Mysql 性能强悍,可以免费使用。

    MSSQL server 微软公司的数据库软件,通常用于搭配微软体系的编程语言。

    Access是office的办公套件之一。

    Oracel 性能非强悍,也非常昂贵。

    byte ;+127——-128;127+1取返=-128;

    安装与使用mysql

    安装mysql的方式很多,我们使用phpstudy这个软件来安装php + mysql的运行环境。安装之后,我们就拥有了mysql的服务。而且还有两款mysql客户端。

     

    Mysql分为客户端与服务端。服务端仅仅用于对软件程序提供数据通信,普通用户无法直接看到其中的数据内容。

     

    客户端用来将服务端的数据,以用户可以理解的方式展示在其界面上。

     

    ip

    phpMyAdmin

    phpMyAdmin是最常用的mysql客户端,它是基于php语言的。

    在桌面右下角的phpstudy图标上右击弹出菜单中选择phpMyAdmin就可以启动进入了。启动之后,需要输入用户与密码进行登陆,默认的用户名密码都是root。

     

    本机ip;127.0.0.1

    新建数据库

    1、 要指定数据库的名称。

    2、 通常选择utf8_unicode_ci字符集,在只有中文的情况下,可以选择gbk_chinese_ic或gb2312_chinese_ci 。

     

    mysql --version;命令窗口查询mysql版本(管理员运行命令窗口)

    新建数据表

    1、 选中数据库之后,点击右侧的“新建数据表”,填写“数据表名”。

    2、 指定数据表的字段,也就是列。在指定字段的过程中我们要对字段添加字段名、数据类型、数据长度、是否是主键、是否自增。(多数情况下,主键是名为id的整数类型,而且是自增的。)

    3、 为字段指定这一列的数据类型。

    二,mysql基础

    自增auto_increment

    自增字段中通常存放的是整数类型的数据,用于表示数据库中的记录的序号。

    自增字段的值不需要手动输入,其中的编号是自动产生的,每当向这表里面添加一条新记录的时候,自增字段会自动取出上一行字段值,然后加一,作为新记录的主键值。(主键绝对不会发生重复,即使上一条记录被删除了)。

    1,数据库;

    如何设置一个字段为自增

    1、在创建表或在修改字段结构的时候,设置字段的数据类型为int,然后选中auto_increment上的勾。

    2、当插入一条数据时,不要手动填写主键字段。

    3、主键生成的数字绝对不会重复,即使记录被删除。

    1,储存数据以及数据结构的厂库。(db);

    如何设置主键

    1、在创建表或在修改字段结构的时候,在主键字段的”索引”下拉菜单中选择“primary”。(一张表只允许设置一个主键,通常它是int自增的。)

     

    2,数据库是独立;

    小练习:

    1、 新建一个产品product数据库

    2、 在数据库中添加产品product表,并建立字段pId (主键)、pName(产品名称)、pModel(产品型号)、pPrice(产品价格)

    3、 添加5条产品信息

    4、 在数据库中再添加一个产品入库表(saveInLib),并建立字段:sid(主键)、pName(产品名称)、saveInTime(入库时间)、saveInCount(入库数量)。

    5、 添加5条产品入库记录。

     

    2,数据库是用来管理,查询,储存数据的;

    mySQL中的数据类型

    在mySQL中每个字段,都必须明确它存放的数据的类型,一旦指定了类型,该字段(列)中的数据都必须符合这个类型的范围,否则就会引起错误。

     

    并且字符等类型需要指定内容的最大长度。

     

    1,实体;表名,按照对象来划分

    int整数类型

    只能存放整数

    2,属性;字段

    varchar字符类型

    可以存储任一字符,包括符号、数字、字母,但是他们都会被当成字符为处理。

    3,数据库种类;关系型,非关系型,层次型,网状型

    Date日期

    用于存储日期和时间

    3,编码设置;

    数值类型

    TinyInt 非常小的整数存储格式,1字节(8位的二进制数),它的取值范围是:不带符号时0 ~ 255,带正负号时-128 ~ 127

    SmallInt 小整数,2字节,不带符号时0~65535,带正负号时-32768~32767

    MediumInt 中等整数,3字节,不带符号时0~16777215,带正负号时-8388608 ~ 8388607

    Int 标准整数,4字节,不带符号时0 ~ 4294967295 ,带正负号时-2147483648 ~ 2147483647

    BigInt 大整数,8字节,不带符号时0~18446744073709551615

     

    Float 单精度浮点数,4字节,最小值,正负1.175494351E-58(1.175494351*10-58)最大值,正负3.102823466E+38(3.102823466E*1038)

    Double 双精度浮点数,8字节,最小值,正负2.22507385072014E-308,最大值:正负1.17976931348623157E+308。

     

    Decimal 以字符串形式存储浮点数。它的取值范围不是固定的,取决于用户指定的长度。

    gbk;中日韩语言

    数值类型的字段可以设置的参数:

    gb1312;中文

    unsigned属性

    “整理”菜单中的unsigned选项,代表无符号,代表这一字段中的数值不能为负数,因为无符号就是代表没有正负号。如果“整理”菜单留空,什么都不选的话,就是代表有符号,可以为正数也可以为负数。

    utf8;大型编码;

    unsigned zerofill属性

    当数据的宽度小于类型的最大宽度时,则在数据前面自动填充0

    4,默认引擎;

    auto_increment

    自增

    INNODB;默认的

    默认à定义

    这个选项代表,填充数据时如果该字段为空值时,所使用的默认值。

    数据表的引擎一般都要设成INNODB

    字符串数据类型

    字符类型可以存储任何值,甚至是二进制形式的图像、声音、视频。

    CHAR[M] 代表M字节的字符。

    varChar 常用的字符存储格式,使用时需要指定最大内容长度。

    5,常用的一些数据库

    存储大容量的文本

    TinyBlob ,blob,TinyText,text

    前两个是代表二进制字符串,后两个是代表非二进制字符串,都可以存储大量的文本信息。

    MediumBlob,MediumText

    LongBlob,LongText

    sqlserver ,access是微软的数据库

    枚举类型

    ENUM / SET 类型

    设置其默认值为(‘值1’, ‘值2’, ‘值3’,…),由用户指定多个可选值,字段中的值必须是其中之一,最多只能有65535个可选值。

     

    oracle,mysql,java都是oracle公司的

    日期时间类型

    Date 1000-01-01 ~ 9999-12-31

    TIME -838:59:59~838:59:59

    DateTime 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

    TimeStmp 1970-01-01 00:00:00 到2037年的之间的某一个时刻

    Year 存储1901~2155年的一个年份。

     

    dbz 是IMB公司的

    小练习:

    1、 创建一张员工数据表,employee,包含字段:eId(标准整数,主键、自增)、姓名eName(varchar,50)、年龄eAge(tinyInt,无符号)、工号eNum(smallInt,不足的位数用0填充)、学历(枚举:初中~研究生)、性别(枚举:男,女)、出生日期(DateTime)、基本工资(Float,默认:1300)、自我介绍text。然后输入五名员工的信息。

     

     

    T-SQL语言基础之增删改查

    sybase 是sybase公司的;

    SQL语句

    是一门专门用于数据库操作的语言,SQL语句的语法不仅仅适用于mysql数据库,同时也适用于几乎所有的主流数据库。当然不同公司出口的数据库在语法细节上还是有些差异。

     

    三,DDL;数据定义语句;设计语句

    select语句

    查询语句,专门用于在数据表中按照用户指定的条件进行查询。

    1,基本命令

    简要语法描述:

    SELECT <字段1,字段2,字段3…..> FROM <数据表名> [WHERE 筛选条件]

    其中字段部分代表你想要从这张数据表中查询哪些字段(列),如果要查询所有字段,可以 * 号表示。

    示例:

    SELECT pName FROM product
    
    //从产品表中查询所有产品名称
    
    SELECT pName,pPrice FROM product
    
    //从产品表中查询所有产品名称和价格
    
    SELECT * FROM product
    
    //从产品表中查询中所有产品的字段
    
    SELECT pName,pPrice-30 FROM product
    
    //在查询时给所有产品减30元
    
    SELECT pName as '产品名',pPrice as '价格' FROM product
    
    //在查询时修改结果集中的字段名
    
    SELECT 3.1415926 *12 *12
    
    //用select语句来进行数学运算
    

     

    1,登录;mysql -h localhost -uroot -p

    where子句

    定义一个查询条件,然后在查询过程中用这个条件来筛选符合条件的记录。

     

    SELECT * FROM product WHERE pPrice >=1000
    
    查询价格大于等于1000的产品
    
    SELECT * FROM product WHERE pPrice <>3000
    
    SELECT * FROM product WHERE pPrice !=3000
    
    查询价格不等于3000的产品
    
    SELECT * FROM product WHERE pName = '中兴z954'
    

     

    查询产品名称是中兴z954的产品信息(在mysql中双引号与单引号都表示字符串,但是推荐使用单引号,因为我们将来要学习的mssql server 中字符串用单引号表示)

    2,退出;exit

    逻辑与and

    SELECT * FROM product
    WHERE pPrice <800 AND pId >6 AND pName ='Nokia v998'
    

     

    3,查看当前时间日期;select now();

    逻辑或or

    SELECT * FROM product
    
    WHERE pPrice <800 OR pId >6
    

     

    4,当前日期;select curdate();

    逻辑非not

    SELECT * FROM product
    
    WHERE not pName = '中兴z954'
    

     

     

    5,当前时间;select curtime();

    insert插入数据

    向指定的数据表的指定字段插入一条记录。

    6,打印版本信息;select version();

    语法:

    INSERT INTO 表名(字段1,字段2,字段3,……) values(值1,值2,值3,….)

    其中,字段的位置与值的位置必须一一对应。

    7,查看当前用户;select user();

    示例:

    INSERT INTO userinfo(uName,uPhone,uIDCard)
    
    VALUES('江小白','010-89562321','5001234567814541X')
    

     

    向数据表中插入一条用户信息

     

    INSERT INTO userinfo(uName) VALUES('张小强')

    插入一条用户信息,但是只有姓名,其他字段自动留空或使用默认值(如果其中某个字段设置为不允许为null,而没有默认值的话,就必须要给这个字段赋值了)。

     

    INSERT INTO userinfo VALUES
    
    (3,'王小虎','010-89562321','5001234567814541X')
    

     

    可以省略字段名,但是所有的字段都必须按照顺序来依次赋值。包含主键ID(要按照顺序来填写主键值)

     

    一次性插入多条语句

    insert into student(sName,sAge,sSex,sPhone)
    
    values('小黑',20,'女','010-89562314'),
    
    ('小强',20,'男','020-89562314'),
    
    ('小红',20,'女','021-89562314'),
    
    ('小黄',20,'男','019-89562314'),
    
    ('小李',20,'女','022-89562314')
    

     

     

    8,启动mysql后台服务(管理员运行命令窗口);

    Update修改数据

    根据指定的条件确定需要修改的行,然后修改指定字段的数据。

    net start mysql;

    语法:

    update 数据表名 set 字段1=值1,字段2=值2,……..WHERE 条件

    虽然where是一个可选参数,但是通常情况下都需要写where条件,如果不写就是修改整张表的所有行。

    9,关闭mysql后台服务(管理员运行命令窗口);

    示例:

    UPDATE userinfo SET uName = '江老怪' WHERE uid = 1
    

     

    修改第1条记录的姓名为江老怪

    UPDATE userinfo SET uName = '江老怪'
    

     

    修改所有行的用户名为江老怪

    UPDATE userinfo
    
    SET uName = '小二黑',uPhone='111111',uIDCard='11111111' WHERE uid = 3
    

     

     

    net stop mysql;

    delete删除

    根据条件删除指定的记录

    2,操作库

    语法:

    delete from 表名 where 条件

    虽然where是一个可选参数,但是通常情况下都需要写where条件,如果不写就是删除整张表的所有行。

    1,查看数据库;show databases;

    示例:

    DELETE FROM userinfo WHERE uid = 2
    

     

     

    2,创建数据库;create database 库名 字符集;

    小练习:

    1、 记忆背诵增删改查指定的语法。

    2、 手动新建一个数据库product,在其中新建数据表product,这个表中的字段:pid(主键)、pName(产品名)、pModel(型号)、pIntro(简介)、pFrom(产地)、pPrice(价格) 。

    3、 用insert语句添加10条不同的产品数据

    4、 查询

    a) 查询所有产品数据

    b) 查询所有产品的产品名和价格

    c) 查询所有价格在2000以上的产品

    d) 查询所有产品为重庆并且价格大于3000的产品

    e) 查询所有产地不是重庆的产品

    5、 将第5条记录的产品号修改为T1000

    6、 删除所有价格小于5元的产品。

     

    将第三题之后的sql语句复制到一个word文档中,然后组长检查组员,班长检查组长。

    3、5、6每题20分。

    第4题中的每个小题8分共40分

     

    命令行与高级查询

    3;删除数据库;drop database 库名;

    Mysql命令行

    1、 在phpstudy的右键菜单中,mysql工具 à mysql命令行

    2、 弹出的命令框中提示”enter password”,输入默认密码root

    3、 如果看到”you mysql connection”就说明你登陆成功了。

    4、 在命令行中,每一条指令都必须以分号;结束,否则系统会认为你这条指令还没有完成,始终要求你继续输入。

     

    3,修改数据库密码账户登录密码

    查看数据库列表

    show Databases

    1,用SET PASSWORD命令

    金沙游乐场85155,选择数据库use

    set password for 用户名@localhost = password('新密码'); 

    格式:

    use 数据库名

    选定指定数据库为当前默认被操作的数据库。

    在使用操作数据表中的数据之前,必须要选定一个当前数据库。

     

    2,用mysqladmin

    罗列出当前数据库中的数据表

    show tables

    mysqladmin -u用户名 -p旧密码 password 新密码 

    罗列出数据表中的字段

    格式:show columns from 表名

    Describe 数据表名

     

    3,用UPDATE直接编辑user表

    数据库与数据操作

    mysql> use mysql; 

    创建一个新的数据库

    命令格式:create database 数据库名

    mysql> update user set password=password('123') where

    在当前数据库中创建数据表

    注意,在创建之前必须选择当前数据库。

    格式:create table 表名(字段1 数据类型,字段2 数据类型,……)

    示例:

    create table stdInfo(
    
    sName varchar(20),
    
    sAge int,
    
    sSex varchar(5)
    
    );
    

     

    user='root' and host='localhost'; 

    创建包含自增主键的数据表

    示例:创建客户表:

    create table customers(
    
     id int not null auto_increment,
    
     name varchar(20) not null,
    
     age int not null,
    
     address varchar(100) not null default 'empty',
    
     primary key(id)
    
    );
    

     

    说明:

    not null 代表该字段不允许出现空值,就是说当你使用insert语句插入数据记录的时候,必须向这个字段赋值,否则数据操作将发生错误。

    auto_increment 自增

    Default 默认值

    Primary key 指定数据表的主键

    mysql> flush privileges; 

    删除数据表

    格式:drop table 数据表名

    4,在忘记root密码的时候,可以这样

    删除数据库

    格式:drop database 数据库名

    (1), 关闭正在运行的MySQL服务。 

    更改表结构:增加字段

    添加一个字段

    alter table student add sScore float null;
    

     

    其中:

    add 代表增加一列

    Null 代表这个字段允许空值。

    student 是数据表名

    sScore 是新增的字段名,后面是数据类型。

    (2), 打开DOS窗口,转到mysqlbin目录。 

    更改表结构:删除字段

    alter table student drop column sScore;
    

     

    其中:

    drop column 代表删除字段操作

    sScore 要被删除的字段名

    student 是表名

    (3),输入mysqld --skip-grant-tables 回车。

    重命名数据表

    rename table student to sInfo;
    

     

    注意:to前面是修改前的原表名,to后面是修改后的新表名。

    --skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。 

    更改表结构:添加自增主键

    alter table product
    
     add pid int
    
     not null
    
     primary key
    
     auto_increment
    
     first;
    

     

    其中

    primary key 设置新字段为主键

    first 将新字段放在其他字段的前面,处于第一位。

     

    (4),再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),

    小练习:

    请同学把所有SQL都写到一个SQL文件中,按“班级-姓名(可以是拼音).SQL”的方式保存

    某学校的学生管理数据库中有学生表(T_STUDENT)、班级表(T_CLASS),表结构及存储的数据如下表所示:

    学生表(T_STUDENT):

    STU_ID

    (int, 主键,学号)

    STU_NAME

    (nvarchar(10),姓名)

    STU_AGE

    (int,年龄)

    STU_CID

    (int,外键,班级号)

    1

    张三

    18

    1

    2

    钱四

    16

    2

    3

    王玲

    17

    3

    5

    李飞

    19

    4

    9

    赵四

    18

    5

    10

    李可

    20

    6

    11

    张飞

    18

    7

    12

    周瑜

    16

    8

    13

    王亮

    17

    7

    14

    董庆

    19

    1

    15

    赵龙

    18

    2

    16

    李丽

    20

    3

    班级表(T_CLASS):

    CLS_ID

    (int, 主键, 班级号)

    CLS_JOB

    (nvarchar(50), 专业名)

    CLS_DEPART

    (nvarchar(50), 系名)

    CLS_DATE

    (int, 入学年份)

    1

    软件

    计算机

    2013

    2

    微电子

    计算机

    2013

    3

    无机化学

    化学

    2014

    4

    高分子化学

    化学

    2012

    5

    统计数学

    数学

    2015

    6

    现代语言

    中文

    2016

    7

    国际贸易

    经济

    2013

    8

    国际金融

    经济

    2014

     

    用 SQL 语言完成以下功能

    1. 建库、建表,要求添加主键
    2. 插入指定的数据
    3. 找出所有年龄小于19岁的学生学号、姓名、年龄。
    4. 学生张三转到化学系 111 班,请更新相关的表。
    5. 删除班级表的主键这一列。
    6. 将学生表改名为T_STD
    7. 为班级表添加字段CLS_COUNT人数字段
    8. 为班级表添加主键。
    9. 删除班级表

     

     

    mysql_4_聚合函数

    转到mysqlbin目录。 

    mysql数据库的备份与恢复

    (5),输入mysql回车,如果成功,将出现MySQL提示符 >。 

    备份

    在phpmyAdmin中使用“导出”功能将数据表的结构与数据保存为一个.sql文件(保存格式选择SQL)

    (6),连接权限数据库: use mysql; 。 

    恢复

    在phpmyAdmin中点击“导入”,选择.sql文件的路径(格式选择SQL),点击执行。

     

    (7), 改密码:update user set password=password("123") where user="root";

    mysql中的聚合函数

    就是对指定字段中的一列数据进行统计和运算的函数。

    (别忘了最后加分号) 。 

    GROUP BY分组

    在指定字段中将数据内容重复的记录,聚合为一组。剔除重复的值。

    示例:

    SELECT * FROM student GROUP BY sSex
    
    SELECT sName FROM student GROUP BY sAge
    

     

    (8), 刷新权限(必须步骤):flush privileges; 。 

    COUNT 统计个数

    用于统计(按条件)查询出聚合后的记录或查询的结果一共有多少条。示例:

    SELECT COUNT(*) FROM student //统计表中一共有多少条记录
    
    SELECT COUNT(1) FROM student //同上,性能更强。
    
    SELECT COUNT(1) FROM student WHERE sAge>17 //统计符合条件的记录总数
    
    SELECT COUNT(1),sSex FROM student GROUP BY sSex
    
    //将GROUP BY与COUNT两个函数结合起来使用,按性别进行分组统计。
    

     

    (9), 退出 quit。 

    AVG求平均值

    格式:AVG(字段名)

    对指定的字段中(一列中) 的数据值进行求平均值的运算。

    SELECT AVG(sAge) FROM student
    
    SELECT AVG(sScore) FROM student WHERE sAge<=18
    
    SELECT AVG(sScore),sSex FROM student GROUP BY sSex
    

     

     

    (10), 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

    GROUP_CONCAT分组连接

    将一张表中的多行记录中的指定的字段值,连接成一个字符串。每个值之间以逗号进行分隔。通常用于得到聚合后的每个分组中包谷的成员。

    SELECT GROUP_CONCAT( sName ) FROM student
    
    //连接所有学生的姓名
    
    SELECT GROUP_CONCAT( sName ) FROM student WHERE sAge>18
    
    //连接所有18岁以上的学生姓名
    
    SELECT GROUP_CONCAT(sName),sSex FROM student GROUP BY sSex
    
    //得到所有男生和女生的名单
    

     

     

    四,DML;数据操作语句;增删改

    ORDER BY排序

    按照指定的字段的值的大小的次序,来排列查询的结果。

    SELECT * FROM student ORDER BY sScore
    
    //通过成绩来排列学生。默认为升序(从小到大)
    
    SELECT * FROM student ORDER BY sScore DESC
    
    //通过成绩来排列学生。添加DESC就是降序(从大到小)
    

     

     

    1,表的增删改查

    最大值最小值MAX()、MIN()

    在查询结果中的指定字段中找到最大的值或最小的值。

    SELECT MAX(sScore) FROM student
    
    //得到成绩最高分数
    
    SELECT MIN(sScore),sSex FROM student GROUP BY sSex
    
    //分别得到男生和女生最低分
    

     

     

    1,进入库;

    求和sum()

    在查询结果中对指定字段的值求和。

    SELECT SUM(sSCore) FROM student
    
    //全班总分
    
    SELECT SUM(sSCore),sSex FROM student GROUP BY sSex
    
    //查看男生总分和女生总分
    

     

     

    use 库名称;

    小练习:

    1、用Create指令创建一个产品销售记录数据表,包含字段:产品名、销售地区、销售数量、销售金额。(10分)

    2、假设本公司出售的产品只有三种,销售地区也只有三个。用insert语句插入十条产品销售记录。(产品与销售地区肯定有重复值。)(15分)

    3、统计每种产品的销售总额(10分)

    4、统计每种产品的平均销售额。(10分)

    5、统计每种产品的销售总数量。(10分)

    6、在每个地区销售的每种产品的名称,连接成一个以逗号分隔的字符串。(15分)

    7、同时统计每种产品的最大销售额。(10分)

    8、统计产品在每个地区的最低销售额。(10分)

    9、得到总销售额。(10分)

     

     

     

     

     

     

     

    mysql_高级查询

    2,创建表;

    数据过滤通配符

    通配符,就是指能够通用的匹配其他字符的符号。

    create table student(表结构 类型,表结构 类型);

    %通配符

    %代表任意个数的任一字符,它通常是用在select语句中与LIKE关键配合使用的。

    5,删除表;

    示例:

    SELECT * FROM student WHERE sName LIKE '王%'
    

     

    查找所有姓王的学生

    LIKE关键字在这里代表模糊查询,不是像=那样必须完全匹配。

     

    SELECT * FROM student WHERE sName LIKE '%五'
    

     

    查找以“五”字结尾的数据

     

    SELECT * FROM student WHERE sName LIKE '%老%'
    

     

    查找中间包含“老”字的字符。

    注意:即使数据的开头或结尾为空,依然可以匹配到数据,因为%不但代表任意个数的任意字符,它同样也可以代表没有字符。

    drop table 表名称

    注意事项:

    1、%不但代表任意个数的任意字符,它也可以空字符。

    2、数据尾部的空格可能会干扰通配符的搜索,比如:现有数据’abc  ’,如果它最后有一个或多个空格的话,则 %abc将不会查找到该数据,因为后面多余的空格也是字符。解决方法是前后都加上%。

    3、%不能匹配null值。

     

    6,修改表名称;

    _(下划线)通配符

    _ 通配符的作用与%类似,但是它只能匹配单个任意字符。

     

    alter table 表名称 rename 新表名称;

    示例:

    SELECT * FROM student WHERE sName LIKE '小_'
    
    SELECT * FROM student WHERE sName LIKE '小__'
    

     

    查找以“小”开头的之后任意两个字符的数据,而且必须是两个字。

     

    注意:下划线与%不同的是前者不匹配字符,必须得有一个字符才能匹配。

     

    SELECT * FROM student WHERE sName LIKE '_老_'
    

     

     

    7,查看表;

    SELECT 查询中的关键字

    show tables;

    in关键字

    在一个集合中进行匹配,只要数据与集合中的任意一项相同,就以为数据满足条件。

     

    SELECT * FROM student WHERE sAddress IN('北京','西安','天津','山东')
    

     

    查找地址是 北京,西安,天津 或 山东的学生信息

     

    9,查看新增表的正规写法;

    limit关键字

    limite后面需要跟两个数字,代表从指定的记录开始(使用数据记录在物理上的次序而不是ID),查找多少条记录出来。

    show create table 表名称;

    注意:

    1、 次序是从0开始的,也就是说第一条记录的序号是0

    2、 这里的序号不等于ID,它仅仅是代表排列次序。

    3、 LIMIT关键字是mysql所独有的,比如:mssql和Oracle中就没有Limit关键字。

     

    SELECT * FROM student LIMIT 3,2
    

     

    从第4条记录开始,获取之后的两条记录。

     

    2,字段增删改;

    join关键字 – 链表

    join关键字用于在数据库中同时查询多张存在关联关系的数据表。

     

    1,添加字段;

    as关键字

    用于对字段段取一个别名

    SELECT sName as '姓名',sAge as '年龄',sAddress as '地址' FROM student
    

     

     

    alter table 字段名称 add 定义列;

    多表查询

    2,修改字段;

    内连接

    就是指仅仅查询两张表中有关联关系的数据,而没有关联关系的数据是不会被查询出来的。

     

     
       

     

    alter table 表名称 change 旧字段名称 新字段名 类型;

    方式一:select同时from多张多

    在select的from语句后同时写入多张表的名字,然后在where条件语句中写入多表之间的连接条件。

     

    示例:

    SELECT * FROM student,score WHERE student.sid = score.sid
    

     

    注意:内连接之中,要分主表和附表,附表只是用于对主表所缺少的内容进行补充,比如上例中,主表是学生成绩,student学生只是在补充主表中缺少的学生姓名等数据。

    SELECT
    
    student.sName as '姓名',
    
       student.sAge as '年龄',
    
       score.sProject as '科目',
    
       score.score+10 as '成绩',
    
       score.sid as '编号'
    
    FROM student,score
    
    WHERE student.sid = score.sid
    

     

     

    在多表查询的时候,为了避免由于字段名重复而产生错误,我们可以在字段名前面加上表名,以示区分。

     

    3, 删除字段;

    方法二:inner join

    使用inner join同样可以完成上例中的功能,而且主表与附表、连接条件一目了然。INNER JOIN子句的前面是主表,后面是附表,ON后面是表连接的条件。

     

    SELECT
    
       student.sName as '姓名',
    
       student.sAge as '年龄',
    
       score.sProject as '科目',
    
       score.score as '成绩',
    
       score.sid as '编号'
    
    FROM score INNER JOIN student
    
    ON score.sid = student.sid
    

     

     

    注意:省略INNER直接写JOIN关键字,也是内部连接。

     

    alter table 表名称 字段名;

    左连接

    在两张表联合查询的时候,我要显示主表中包括没有关联关系的数据在内的所有数据。

     

    SELECT * FROM score
    
    LEFT JOIN student
    
    ON score.sid = student.sid
    

     

     
       

     

    4,查看字段结构;

    右连接

    查询附表(JOIN关键字之后的表)中包含没有关联关系的数据在内的所有数据。

    SELECT * FROM score
    
    RIGHT JOIN student
    
    ON score.sid = student.sid
    

     

    desc 表名称;

    多张表连接

    示例:

    SELECT * FROM score
    
    INNER JOIN student ON score.sid = student.sid
    
    INNER JOIN class ON student.cid = class.cid
    

     

    3,添加数据;

    通过关键字IN来进行关联查询

    查询所有数学成绩在60分以上的学生的信息。

    Select * from student where
    
    sid in
    
    (
    
        SELECT sid FROM score
    
        WHERE score >60 And sProject = '数学'
    
    )
    

     

    IN在此处表示,sid必须与()内的查询结果之一相等。

     

    1,增加对应数据;

    insert into 表名称(字段1,字段2........)values('j138',"红瓦寺".......)选择插入某些列;

    2,增加某行数据

    insert into classes values(null,'j139',"红瓦寺") 插入所有列,自增粘以null占位

    3,增加全部数据

    INSERT INTO t_student VALUES

    (1,'张三',20,'男'),

    (2,'李四',25,'男'),

    (3,'王五',19,'女')

    4, 拷贝数据

    从classes表中查询所有的class_name 插入到className表中的(class_name)字段

    insert into 新表名(新字段名) select 旧字段名 from 旧表名

    insert into className(class_name) select class_name from classes

    4,修改数据;

    1,修改某行的数据

    update 表名称 ste 字段名,字段名=值 where id;

    UPDATE 表名 SET 列1=新值1,列2=新值2 WHERE 过滤条件

    2,修改某列的某个数据

    UPDATE classes set class_name=null where class_id=3

    '' 和null 一样吗?? 严格意义不一样

    5,删除数据;

    1,删除一行数据

    delete form 表名称 where id;

    2,删除年龄在18-20

    DELETE FROM t_student WHERE 年龄 BETWEEN 18 AND 20

    delete from student where age>=18 and age<=20

    6,注意

    1,t_表示表名;字段 英文 field

    2,f_表示字段名;表格 英文 table

    3,pk_表示主键;主键约束 primary key

    4,fk_表示外键;外键格式 foreign key;

    5,外键名规则;FK_本表名_与之关联的表的名字

    6,有主从表的时候数据插入先插主表,在插从表;有外键的是主表

    7,sql语句中也可以用true和flas,true表示1一般代表男,flas表示0一般代表女,是int型

    五,DCL;数据控制语句;控制

    1,索引

    1,创建索引;

    create index 索引名称 on 表名称(列名称,列名称.......);一个表可以有多个索引;

    2,删除索引;

    alter table student drop index 索引名称;

    3,特点;数据的更新和索引的更新是同步的

    普通索引可以加到多列上

    4,索引的缺点;

    数据与索引的更新是同步的,如果全部数据都有索引就会降低效率;

    索引是以文件形式存在的,索引过多文件会很大;

    2,数据库的数据完整性;

    保证每行所代表的实体能互相区别,不能存两条一抹一样的

    1,主键约束(primary key)非空不能重复;一个表只能有一个主键一个主键可以有多个列

    2,唯一约束(unique)指定的列非空的不能重复

    3,非空约束(not null)指定的列不能为空;

    4,指定数据(default)指定的数据可以更改;

    5,指定有效数据(check(第一个数据 or 第二个数据格式(健名=值)))

    不是第一个数据必须是第二个数据,不能有第三个数据出现

    (在mysql中无效,支持创建但没有功能)

    6,auto_increment;主键自增长;

    3,外键

    1,创建一个表,在表中外键字段与上一个关系表绑定

    class_id int,

    CONSTRAINT 外键名 FOREIGN key(要把外键给那个字段的字段名)

    REFERENCES 关系表的表民(主键)

    CONSTRAINT FK_student_classId FOREIGN key(class_id)

    REFERENCES classes(class_id)

    2,怎么给已存在的表添加外键约束

    1,添加要连的键

    alter table 表名 add 字段 类型

    alter table test add class_id int

    2,添加CONSTRAINT

    alter table 表名 add CONSTRAINT 外键名

    FOREIGN key(要把外键给那个字段的字段名)REFERENCES 关系表的表民(主键)

    alter table test add CONSTRAINT FK_TEST_CLASSID

    FOREIGN key(class_id) REFERENCES classes(class_id)

    3,删除外键

    alter table 表名 drop FOREIGN key 外键名

    alter table test drop FOREIGN key FK_TEST_CLASSID

    4,外键命名规则

    1,一对一唯一外键关联,一对一必须保证外键唯一性,加唯一性约束

    增;主键在谁身上就先增加谁;

    删;外键在谁身上就先删谁;

    2,一对多外键必须设计在多方身上

    增;先增主表后增从表

    删;先删从表在删主表

    3,多对多,需要新建中间表来保存对应关系表,外键咋中间关系表身上

    增;先增两表,在增中间表

    删;先删中间表,再删两表

    4,注意

    1,一个外键对应一个主键,外键和外键约束是分开的,

    2,外键必须链接主键(many2one)

    3,联合主键写法;一个表只能有一个主键,但一个组键可以有多个列

    primark(第一个主键,第二个主键);

    4,主键的特性

    主键非空唯一,

    主键不能被修改,

    主键不能为不存在,

    不能被业务操作

    六,DQL;数据查询语句;查

    1,where 条件;

    1,比较符号;

    >,< ,>=, <= ,!=,(<>也表示不等于)

    2,逻辑比较

    and 并且

    or 或者

    between 下线 and 上线

    like 模式 格式;

    like “_”下划线代表单个字符

    like“1%2%3” 代表任意字符123处都可以添加关键字

    in() 只取()中的字符;(1,2,3)只能取123

    not in() 不取()中的;not;非的意思

    2,排序(order by),asc;代表升序,desc;代表降序

    order by 排序的列 asc // 永远写在最后整个查询的最后

    limit 1,3;limit 起始位置,截取长度。

    3,分组

    在where后边加group by 按什么类型分组与count联合使用

    selsct count(*) from 表名 group by 分组的类型,按什么分组;

    分组后也能过滤用having分组后再来筛选,where写在分组前,having写在分组后

    分组后只能与与分组相关的结果级打印;

    4,mysql聚合函数

    1,sun();求和;

    select sun(all 求哪一列的和) from 表名称

    2,avg(); 平均值;

    select avg(all 求哪一列的平均值) from 表名称

    3,max();最大值;

    select max(all 求哪一列的最大值) from 表名称

    4,min();最小值;

    select min(all 求哪一列的最小值) from 表名称

    5,concat();字符串拼接,一般很少在mysql上使用

    concat(要拼接的数据);

    6,注意

    all;表示非空,也是mysql默认值

    *;表示全部

    distinct;表示所有非空不重复的值

    5,单表查询

    select 列 from 表 where ID=数据 order by pk_playerid desc;

    order by 列 desc;排序 desc降序,asc升序

    6,子查询

    1,在select后边添加子查询

    select ( select 列名 from表1) from 表1 ;

    只能查一列,多行;不常用,效率低

    2,在from后边添加子查询

    select 某列 from ( select 列名 from表1) ;

    把查出来的结果当成一张表,再查这张表的数据;不常用,效率低

    3,在where后边添加子查询

    select 列 from 表 where 列=(select 列 from 表1 where 列=数据) ;

    只能查单行单列,用in时可以查单列多行,有 in 就有 not in

    select 列 from 表 where 列=all (select 列 from 表1 where 列=数据);

    需要和子查询的结果和某列的结果逐一比较后相等则打印

    select 列 from 表 where 列=any (select 列 from 表1where 列=数据);

    只要满足一个就可以打印,不能等于它本身

    select 列 from 表 where exsits (select 列 from 表1where 列=数据);

    如果数据存在则打印,不能等于它本身; not exsits;相反,如果数据不存在则打印

    4,子查询,要消耗更长的执行时间,当数据量增加时,执行时间会急剧加长,

    7,链接查询查,

    1,两张表的数据;通过多张表共有的字段查找多张表共有的并集,

    共有字段必须要两个表中都有才能找到

    select * from 表名1,表名2 where 外键ID=主键ID and 某一行条的件;

    2,三张表查询例子

    select  a.uid,a.uname,a.upsw

     from table1 a,table2 b, table3 c 

    where a.sems_role_rid=b.rid and a.udeptid=c.deptid

    8,外链接查询,

    1,查两张表的数据;select * from 表1 left join 表2 on 外键ID=主键ID where 列="数据"

    2,三张表查询例子(left join 表 on 外键拼接)

    select * from t_team

    left join t_player on pk_teamid=fk_teamid

    left join t_group on pk_teamid=fk_groupid

    where f_teamName="法国队"

    9,注意

    1,is;是“是”的意思(is null)=是空

    2,as;取别名;mysq中as可以被省略

    3,not;非空

    4,select;投影,投影后做的操作都不会改变物理数据;

    5,select * from 表名

    *代表列的字段名名多个用“,”隔开,直接用*表示查询全部;

    一般很少用*因为效率低;

    6,distinct;去掉重复位置,去重后不能和其他数据一起显示,

    七,数据库类型;

    1,整数

    tinyint;1个字节;存放128-127范围的整数;有符号

    比如: 年纪

    smalint; 2个字节;存放-32000到 +32000范围的整数;

    比如: 年纪,数量

    int ;4个字节,存放-2000000000 到 +2000000000 范围的整数;

    例如: 距离

    bigint;8个字节;储存不能用smalint 或 int描述的超大整数。

    例如: 科学/数学数据

    2,浮点

    afloat;4字节 单精度浮点型数据 存储小数数据

    例如:测量,温度

    double;8字节 双精度浮点型数据 需要双精度存储的小数数据

    例如:科学数据

    decimal(m,b);用户自定义精度的浮点型数据 (m长度,b精度)以特别高的精度存储小数数据.

    3,字符

    char(位数);固定长度的字符串 特定字符串长度(高达255字 符)

    存储通常包含预定义字符串的变量 例如: 定期航线,国家或邮编

    varchar(位数); 具有最大限制的可变长度的字符串 变量;

    实际字符串长度 (高达 255 字 符) 例如:名字,密码,短文标签

    text; 没有最大长度限制的可变长度Variable; (存放65535个字符)

    存储大型文本数据

    MEDIUMBLOB;(存放2的24次方个字符);

    enumcvall(a,b,c.......);列枚举-限定有限值

    4,时间

    year;1字节;格式YYYY;范围1901-2155

    date;3字节;格式YYYY-MM-DD;范围1000-01-9999-12-31

    timestamp;4字节;

    5,二进制大数据,二进制大对象

    1,TINYBLOB;255字节;0-255字节;

    2,BLOB;5k;0-65k;

    3,medfumblob;16m;0-16m;

    4,longblob;4g;0-4g;

    八,关系数据库的几种设计范式介绍

    1、第一范式(1NF)

    1,在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,

    不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)

    是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,

    即实体中的某个属性不能有多个值或者不能有重复的属性。

    2,如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,

    新实体与原实体之间为一对多关系。在第一范式(1NF)

    中表的每一行只包含一个实例的信息。

    2、第二范式(2NF)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,

    即满足第二范式(2NF)必须先满足第一范式(1NF)。

    第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。

    为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

    3、第三范式(3NF)

    满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)

    要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

    本文由金沙游乐场85155发布于大数据库,转载请注明出处:mysql数据库

    关键词: