1. 程式人生 > >mysql 資料庫 基礎整理

mysql 資料庫 基礎整理

1、 mysql 基本使用命令

  1. 啟動mysql伺服器

    1. windows中啟動伺服器
      net start mysql;
      關閉:net stop mysql;

    2. Linux啟動伺服器,預設開啟的
      service mysql start;
      關閉:service mysql stop;

  2. 進入mysql
    命令:mysql -u 使用者名稱 -p
    然後輸入密碼即可進入, 如果看到 mysql> 則成功進入

  3. **window與Linux的資料庫命令一致

  4. 檢視資料庫的版本
    select version();

  5. select now();

  6. 退出
    exit 或者 quit

2 庫的操作

  1. 展示所有的資料庫
    show databases;
    展示所有的已經存在的資料庫
    mysql預設會有管理自己的庫,表,使用者,配置的資料庫

  2. 建立一個數據庫
    格式:create database 資料庫名 charset=“utf8”;
    例:create database school charset=“utf8”;

  3. 刪除一個數據庫
    格式:drop database 資料庫名;
    例:drop database school;

  4. 使用某個倉庫
    格式:use 資料庫名;

  5. 檢視當前使用的資料庫
    格式:select database();

3 表的操作

  1. 查詢當前庫中的所有表
    格式:show tables;

  2. 建立一個表
    格式:create table 表名(欄位名 欄位描述,欄位名n 欄位描述,…)
    例:create table student(id int primary key auto_increment,name varchar(20) not null,age int default 17,address varchar(20),sex bit default 1);
    auto_increment:自增

  3. 查看錶的結構
    格式1:desc 表名;
    格式2:show create table student;

  4. 刪除一個表
    格式:drop table 表名;
    例:drop table student;

  5. 修改表

    1. 修改表名
      格式:rename table 舊錶名 to 新表名;
      例:rename table student to students;

    2. 修改表結構
      格式:alter table 表名 add|drop|change;

      1. 新增一個新的欄位
        格式:alter table 表名 add 欄位名 欄位描述;
        例:alter table students add phonenum varchar(20);
      2. 刪除一個欄位
        格式:alter table 表名 drop 欄位名;
        例:alter table students drop phonenum;
      3. 修改一個欄位
        格式:alter table 表名 change 要修改的欄位名 新的欄位名 新的欄位描述;
        例:alter table students change phonenum phone varchar(20);
    3. 開發過程中儘量不要修改已經有資料的欄位,設計表的時候儘量涉及一些預留欄位

4 資料的操作

  1. 增加資料

    1. 插入一條資料
      格式: insert into 表名 values(對應的值1,對應的值2,對應的值n)
      例:insert into students values(0,“三胖”,19,“濟南”,1,12345);
      注意:插入的值要與表對應欄位一一對應如果是自動增長的資料型別,將該值設定為 0即會自動的增長
    2. 缺少值插入
      格式: insert into 表名(欄位1,欄位2,欄位n,…) values(欄位1對應的值,欄位2對應的值,欄位n對應的值,…);
      例:insert into students(name, age, sex) values (“四胖”,13,0);
    3. 插入多條資料
      格式: insert into 表名 values(對應的值1,對應的值2,對應的值n),(對應的值1,對應的值2,對應的值n) ,(對應的值1,對應的值2,對應的值n) …;
      例:insert into students values(0,“五胖”,10,“青島”,1,12345),(0,“六胖”,15,“槐蔭”,0,12345);
  2. 刪除資料
    格式: delete from 表名 where 條件
    例:delete from students where id=2;
    delete from students where name=“四胖”;

  3. 修改資料
    格式: update 表名 set 欄位名 = 值1,欄位名2 = 值2 where 條件
    例:update students set name = “五五胖”,address=“中國” where id=3;

  4. 查詢資料的表中的所有資料
    查詢所有資料 格式: select * from 表名;
    例:select * from student;

5 查詢語句

  1. 格式1: select 欄位名1,欄位名n,… from 表名 where 查詢條件
    格式2: select 欄位名1 as 別名,欄位名n,… from 表名 where 查詢條件

    1. select表示查詢
    2. select後面是查詢結果要顯示的欄位名
      例:select name, age from students;
    3. *表示顯示所有欄位的資料
    4. from 後面是表名,表示從那個表中查詢
    5. where 條件 表示以某個條件進行篩選
    6. 如果沒有where條件,表示查詢所有
    7. 欄位名1 as 別名 可以給顯示的欄位名取個別名,方便檢視
      需求:展示所有學生的姓名和年齡
      select name as “姓名”, age as “年齡” from students;
      查詢所有: select * from 表名
  2. 查詢條件 表示式

    1. 比較運算子
      .> 大於
      < 小於
      .>= 大於等於
      <= 小於等於
      = 等於
      != 不等於
      1. 需求: 查詢班上大於15歲的學生 ?
        select * from students where age>15;
      2. 查詢班上小於等於15歲的學生 ?
        select * from students where age<=15;
      3. 查詢班上不等於15歲的學生 ?
        select * from students where age!=15;
    2. 邏輯運算子
      且 and
      或 or
      非 not
      1. 需求: 查詢班上大於10歲且小於20歲的學生 ?
        select * from students where age>10 and age<20;
      2. 需求: 查詢班上除了中國的學生
        select * from students where not address=“中國”;
    3. 模糊運算子
      格式: … where 欄位名 like ‘字串’
      任意字元: % 任意多個任意字元
      _ 一個任意字元
      1. 需求: 查詢姓五的同學?
        select * from students where name like"五%";
      2. 查詢姓五的同學,且只有2個字?
        select * from students where name like"五_";
      3. 查詢名字中包含 五 字的同學
        select * from students where name like"%五%";
    4. 範圍運算子
      1. 格式:格式1: … where 欄位名 in (值1,值2,值3)
        是否等於 () 中的某一個值
      2. 格式:… where 欄位名 between 值1 and 值2
        需求: 查詢出住在 槐蔭 或者 青島 或者… 的同學 ?
        select * from students where address in (“槐蔭”,“青島”);
    5. 空值判斷
      1. 格式1: … where 欄位名 is null;
        需求:將address為空的所有資料篩選出來?
        select * from students where address is null;
      2. 格式2: … where 欄位名 is not null;
        需求:將address不為空的所有資料篩選出來?
        select * from students where address is not null;
    6. 運算子的優先順序
      1. 以上運算子可以綜合使用
      2. 加上()
  3. 聚合函式

    1. count(*) 統計查詢結果的數量
    2. max(欄位名) 統計某個欄位的最大值
    3. min(欄位名) 統計某個欄位的最小值
    4. avg(欄位名)
    5. sum(欄位名) 統計某個欄位的總和
      格式: select 聚合函式 from 表名 where 條件
      需求: 查詢該表總共有多少學生
      select count(*) from students;
      需求: 獲取學生的最大年齡?
      select max(age) from students;
      需求: 統計年齡的平均值 ?
      select avg(age) from students;
  4. 分組 group by
    格式: select … from 表名 where 條件 group by 欄位名
    **統計某個欄位有多少種值
    需求: 檢視有多少種地址 ?
    select address from students group by address;
    需求:查詢每個地址有多少人?
    select address,count() from students group by address;
    需求: 再查詢出槐蔭有多少人 ?
    select address,count(
    ) from students group by address having address=“槐蔭”;

    having 條件 表示在某個結果集上繼續篩選

    注意: where 與having 後面都是跟一個條件表示查詢,
    但是where是先篩選, having是在where的結果後再篩選

  5. 排序 order by
    格式: select … from 表名 where 條件 order by 欄位名 排序規則;(預設升序)
    需求:查詢所有學生,並按年齡排序
    select * from student order by age desc;
    降序:desc
    升序:asc

6 表的設計(表的關係)

  1. 一對一關係
    場景: 學生 1—檔案表 1

  2. 一對多關係
    場景: 班級 1 ----學生 多

  3. 多對多關係
    場景: 學生 多 — 課程 多
    注意:需要第3張表來維護關係

7 一對一案例
**在一對多的案例上的外健上加上唯一性的約束即可 unique

8 一對多關係

  1. 設計表

    1. 班級表
      create table classes(classid int primary key auto_increment,classneme varchar(20));
    2. 學生表
      create table stu(students int primary key auto_increment,stuname varchar(20) not null,classid int,foreign key(classid) references classes(classid));
      外來鍵格式:foreign key(外來鍵欄位名) references 表名(關聯欄位名)
      classid是外健,需要關聯班級表的classid主鍵
  2. 插入資料

    1. 班級表
      insert into classes values(0,“py01”),(0,“py02”),(0,“py03”),(0,“java01”),(0,“java02”),(0,“h501”),(0,“ui01”),(0,“h502”),(0,“ui02”);
    2. 學生表
      insert into stu values(0,“張三”,4);
      insert into stu values(0,“李四”,1);
      insert into stu values(0,“王五”,1);
      insert into stu values(0,“趙六”,2);
      insert into stu values(0,“田七”,1);
      注:如果關聯的外健的值在關聯的表中不存在,則無法插入
      insert into stu values(0,“胖八”,11);
  3. 查詢資料

    1. 檢視所有的學生姓名及其所在的班級:
      例:select stu.stuname,classes.classneme from stu,classes where stu.classid=classes.classid;
      注:表名.欄位名 可以指定到對應表中的欄位,再多表聯合的時候使用
    2. 展示py01班的所有學生
      select stu.stuname,classes.classneme from stu,classes where stu.classid=classes.classid and classes.classid=1;
    3. 展示所有學生的所有資訊
      select stu.,classes. from stu,classes where stu.classid=classes.classid ;
  4. 連線關係查詢

    1. 內連線 inner join
    2. 左外連線 left join 或 left out join
    3. 右外連線 right join 或 right out join
      select stu.stuname,classes.classname from classes left join stu on stu.classid=classes.classid and classes.classid=1;
    4. 格式:select … from 表1 inner/left/right join 表2 on 條件;

9 多對多

  1. 設計表

    1. 學生表
      create table student3(studentid int primary key auto_increment,stuname varchar(20) not null);
    2. 課程表
      create table courses(courses int primary key auto_increment,coursesname varchar(20));
    3. 學生-課程 表即選修課表
      create table elective(studentid int,
      coursesid int,
      primary key(studentid,coursesid),
      foreign key(studentid) references student3(studentid),
      foreign key(coursesid) references courses(courses));
  2. 插入資料
    插入學生
    insert into student3 values(0,“張三”);
    insert into student3 values(0,“李四”);
    insert into student3 values(0,“王五”);
    insert into student3 values(0,“趙六”);
    insert into student3 values(0,“田七”);
    插入課程
    insert into courses values(0,“python”);
    insert into courses values(0,“java”);
    insert into courses values(0,“h5”);
    insert into courses values(0,“ui”);
    插入選修課資料
    insert into elective values(1,1);
    insert into elective values(1,2);
    insert into elective values(1,4);
    insert into elective values(3,1);
    insert into elective values(3,4);
    注意:如果關聯了外健,而外健的值在關聯的表中不存在,則無法成功插入

  3. 查詢資料
    select student3.,courses. from student3,courses,elective where student3.studentid=elective.studentid and courses.courses=elective.coursesid;