zoukankan      html  css  js  c++  java
  • MYSQL

     

     

    MySQL

    MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

    数据储存方式:

     

     

    数据库服务器、数据库和表的关系:

     

    创建数据库:

     

     其中的中的为判断,判断数据库中是否存在相同的数据库,且这句可加可不加只要是带中括号的都是可加可不加,加上后,若存在则什么也不执行,若不存在,则直接创建,若不加的话,

    若数据库中存在一个相同的会报错,不存在照常创建。

    删除、查看数据库: 

    对数据库进行修改、备份、恢复:

     

     重点:需要了解并掌握。

     方式如下:

    演示恢复备份:

    create database tt;
    use tt;
    create table a(
    name varchar(20)
    );
    insert into a (name) values('aaaa');
    select *from a;
    ----看到a表有数据;----------

    对tt库做备份操作,启动一个window命令窗口,执行如下命令;
    mysqldump -uroot -p tt>d: t.sql

     

    演示恢复:
    1.先删除库
    drop database tt;
    2.在恢复tt库(1);
    只能恢复库里的数据,而不能直接恢复库:
    2.1因此要先将tt库创建出来:create database tt;
    恢复前:use tt;
    2.2再恢复库source d: t.sql;
    3.在恢复tt库(2);
    3.1因此要先将tt库创建出来:create database tt;
    3.2 恢复库 mysql -uroot -p999909 tt<d: t.sql

    创建表(基本语句)

     MYSQL的常用数据类型:

     修改表:

    练习:

    一些重要的练习操作示意:

    演示恢复备份:

    create database tt;
    use tt;
    create table a(
    name varchar(20)
    );
    insert into a (name) values('aaaa');
    select *from a;
    ----看到a表有数据;

    对tt库做备份操作,启动一个window命令窗口,执行如下命令;
    mysqldump -uroot -p tt>d: t.sql

     

    演示恢复:
    1.先删除库
    drop database tt;
    2.在恢复tt库(1);
    只能恢复库里的数据,而不能直接恢复库:
    2.1因此要先将tt库创建出来:create database tt;
    恢复前:use tt;
    2.2再恢复库source d: t.sql;
    3.在恢复tt库(2);
    3.1因此要先将tt库创建出来:create database tt;
    3.2 恢复库 mysql -uroot -p999909 tt<d: t.sql

    创建一个员工表:
    create table employee
    (
    id int,
    name varchar(40),
    sex char(4),
    birthday date,
    entry_data date,
    job varchar (40),
    sarary decimal(8,2),
    resume text
    );

    show tables; 查看库的所有表
    show create table employee; 查看表的创建细节;
    desc employee ;查看表的结构
    在上面的员工表的基本上增加一个image列。
    alter table employee add imag
    修改job列使其长度为60;
    alter table emploee modify job varchar(60);
    请删除性别这一列;
    alter table employee drop sex;
    表名改为user;
    修改表的名称:Rename table 表名 to 新表名

    rename table employee to user;
    请将表名改为utf-8
    修改表的字符集:alter table student character set 编码方式;
    alter table user character set utf8;
    列名name修改为username
    alter table user change column name username varchar ;

    INSERT语句:

    使用insert语句向表中插入三个员工的信息。
    rename table user to employee;
    插入数据的细节1
    第一种简化方法:不必写出前面的列名:
    insert into table employee (1,'aaa','1999-08-01','1999-02-01','bbb',90,'aaaa');
    第二种推荐方法:
    insert into table use wo employee(id,username,birthday,entry_date,job,salary,
    resume) values(1,'aaa','1999-08-01','1999-02-01','bbb',90,'aaaa');
    插入数据的细节2:
    插入的数据在mysql语句中都可以用‘’引起来,以便引起不必要的麻烦。
    插入数据的细节3:乱码问题:(插入中文数据)
    告诉MySQL客户端采用gb2312编码
    show variables like 'char%';
    set character_set_client=gb2312;
    insert into employee (id,username) values('3','张三');
    要想查看时不乱吗就要告诉MySQL输出结果是也要用gb2312
    set variables like 'char%';
    set character_set_results=gb2312;
    select * from employee;
    UPDATE语句:


    练习:
    将所有员工的薪水改为5000元。
    update employee set salary=5000;
    将姓名为ccc的员工的员工薪水修改为3000元;
    update employee set salary=3000 where username='bbb';
    请将姓名为‘bbb’的员工薪水修改为4000,job改为‘ccc’.
    update employee set salary=4000,job='ccc' where username='ccc';
    将bbb的薪水在原来的基础上增加1000元。
    update employee set salary=salary+1000 where username='ccc';

    DDELETE语句:

    使用delete语句删除表中的数据:如果不用where子句,将会删除表中的所有数据;
    delete 语句不能删除某一列的值(可以使用update)
    使用delete 语句仅删除记录,不删除表本身。如要删除,使用drop table 语句。
    同insert 和update语句一样,从一个表中删除记录将引起表的参照完整性问题,再修改数据库数据时,
    头脑中应该是中不要忘记这个潜在的问题。
    删除表中数据也可以使用TRUNCATE TABLE语句,他和delete有所不同参看MySQL文档。

     delete语句是一行一行的删除表中的数据。

    而truncate table,是将表摧毁并创建新的表单。

    练习:

    1.删除表中名为ccc的数据记录:

    delete from employee where username='ccc';

    2.删除表中所有记录:

    delete from employee;

    3.使用truncate 删除表中的记录:

    truncate table employee ;(摧毁表,重新建立表单)

    select 语句:

    小注1:select语句中的* 表示查询表单中的所有数据,若想查询具体数据,就将*换为想要的数据。

    小注2:在使用select语句时若有过滤条件就用where语句若要给所存数据排序就用order by语句。

    练习:

    1.查询表中所有学生的信息。

    select * from student;

    2.查询表中所有学生的姓名和对应的英语成绩。

    select name,english from student;

    3.过滤表中重复的英语数据.

    select distinct english from student;

    练习:

    1.在所有学生总分上加10分特长分。

    select  naem,(chinese+english+math)+10 from student ;

    2.统计每个学生的总分。

    select name,(chinese+english+math);

    3.使用别名表示学生分数。

    select  naem as 姓名,(chinese+english+math)+10 as 总分 from student ;

    select  naem  姓名,(chinese+english+math)+10  总分 from student ;

    练习:

    1.查询姓名为王五的学生成绩

    select * from student where name='王五';

    2.查询英语成绩大于90分的同学

    select * from student where english>90;

    3.查询总分大于200分的所有同学

     select * from student where (chinese+english+math)>200;

     

     练习:

    1.查询英语分数在80-90之间的同学

    select name from student where english>80 andenglish<90;

    select name from student where english between 80 and 90;

    2.查询数学分数为89,90,91的同学

    select name from student where math in(89,90,91);

    3.查询所有姓李的学生成绩。

    select *from student where name like '李%';

    3.1查询李姓且名字为两个子的学生成绩

    select * from student where name like '李_';

    4.查询数学分>80,语文分>80的同学。

    select * from student where math>80 and chinese>80 ;

     练习:

    1.对数学成绩排序后输出。

    select name ,math from student order by math;

    2.对总分排序后输出,然后再按从高到底的顺序输出。

    select name 姓名,(chinese+english+math ) 总分 from student order by(chinese+english+math) desc;

    3.对姓李的学生成绩排序输出。

    select *from student where name like '李%' order by (chinese+english+math) desc;

    select语句(6)学习前提:合计函数-count

    练习:

    1.统计一个班共有多少学生

    select count (name) from student ;

    1.1统计班里有多少学行数据

    select  count(8) from student ;

    2.统计数学成绩大于90的学生有多少个

    select count(*) from student where math>90;

    3.统计总分大于250分的人数有多少

    select count(*) from student where (chinese+english+math)>250;

    关于count函数的细节:

    count 只会统计有值的行。

    合计函数-SUM:

    小注:sum仅对数值起作用,否则会报错。

    小注:对多列求和,“,”号不能少。

     练习:

    1.统计一个班级数学总成绩

    select sum(math) from student ;

    2.统计一个班语文、数学、英语各科的总成绩

    select sum(chinese),sum(english),sum(math) from student;

    3.统计一个班语文、数学、英语的成绩总和

    select sum(chinese+english+math) from student;

    4.统计一个班语文成绩的平均分

    合计函数-AVG(平均值)

     

    练习:

    1.求一个班级数学的平均分

    select avg(chinese) from student;

    2.求一个班级总分的平均分

    合计函数-MAX/MIN

    练习:

    求班级最高分和最低分(数值范围在统计中特别有用)

    select max(chinese+math+english),min(chinese+math+english);

     SELECT 语句(6)

    小注:

    使用的案例:注意order为关键字,不可以使用为表名称,因此在此处使用orders。

     

     

     练习:

    1.对订单表中的商品归类后,显示每一类商品的总价

    select product, sum(price) from orders group by product;

    2.查询购买了几类商品,并且每类总价大于100的商品

     select product from orders group by product having sum(price)>100;

    各类常用的函数:

    小注:调用这些函数时可以采用select语句来调用。

    时间日期相关的函数:

    字符串相关的函数:

    数学相关的函数:

     

    定义表的约束:

    小注:一般来说,必须要有一列作为主键列,一般用id 列,且id列必须要加上一个主键约束,并且一个表只能有一个主键列。

    练习:

    定义主键约束:

    create table teacher(

      id int  primary key,

       name varchar(40)

    );

     定义主键自动增长:

    create table teacher(

      id int  primary key auto_increment,

       name varchar(40)

    );

     定义唯一(仅一个数据,没有重复数据)约束:unique

    create table teacher(

      id int  primary key auto_increment,

       name varchar(40) unique

    );

     定义非空约束:not null 

     

    create table teacher(

      id int  primary key auto_increment,

       name varchar(40) unique not null

    );

     定义外键约束:

    constraint ordersid_FKforeign key(orderside) reference orders(id),

    create table husband (

      id int primary key,

      name varchar(40) 

    );

    create table wife (

      id int primary key,

    name varchar(40) ,

    husband_id int ,

    consttain husband_id _FK foreign key(husband_id) reference husband(id)

    );

    最重要的课程:表的设计。

    原则:直接上来设计表,不必思考对象的方法等其他复杂东西。

    给多的一方加外键来描述数据之间的关系。

    当有一对多,或多对一的对象向数据库存东西时,给多的一方加外键来描述二者之间的关系。

    一对多或多对一的数据存储表设计方式(公司部门和部门工作人员):代码如下:

      create table department (

      id int primary key,

      name varchar(40)

    );

      create table employee(

      id int primary key,

      name varchar(40) ,

      salary decimal(8,2) ,

      department_id int,

      constraint department_id_FK foreign key(depatrtment_id) reference department(id)

    );

     当为多对多关系时:加中间表来描述。

    多对多对象的表的设计(老师和学生):代码如下:

    create table teacher (

      id int primary key,

       name varchar(40),

      salary decimal(8,2)

    );

    create table  student(

      id int,

      name varchar(40) 

    ) ;

    create table teacher_student  (

      teacher_id int,

      student_id int, 

      primary key(student_id,teacher_id ),

      constraint teacher_id_FK foreign key(teacher_id) reference teacher(id),

      constraint student_id_FK fornign key(student_id) references student(id)

    );

     

     一对一的表单设计原则(身份证与人的对应关系):

     一对一代码设计规范:

    create table person (

      id int primary key,

      name varchar(60)

    );

    create table idcard(

      id int primary key,

      name carchar(40),

      city varchar(40),

    constraint_id_FK foreign key(id) references person(id)

    );

  • 相关阅读:
    OneNote 2010 文字识别
    Windows 7 添加网络共享打印机
    logstash
    filebeat
    记elk打包时的问题
    elasticsearch.yml
    zabbix 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
    mac装brew
    snmp监控
    博科光纤交换机端口别名映射脚本
  • 原文地址:https://www.cnblogs.com/shuai9999/p/9042652.html
Copyright © 2011-2022 走看看