數據庫管理系統


數據庫:數據按一定的格式存放的倉庫。

端口:0-65535

一、為什么學習數據庫?

1、偽類方便查詢數據;
2、為了持久化保存數據。

二、數據庫相關概念:

1、DB(DataBase):數據庫;保存數據的容器。
2、DBMS:數據庫管理系統或者數據庫管理產品。常見的數據庫管理系統:MySQL、ORACAL、DB2、sql server
3、SQL:結構化查詢語句。

三、數據庫存儲數據的特點:

1、表是存放在庫里的;
2、數據是存放在表里的;
3、一個數據庫里面表名是惟一的;
4、數據庫里面列名稱之為字段;
5、表中數據是以行的形式存放。

四、MySQL服務的啟動和停止:

計算機(右鍵)-管理-服務-找到MySQL56-可以啟動和停止

五、MySQL服務的登錄和退出:

登錄:
  MySQL -U root -p
退出:
  quit或exit;

六、MySQL的語法規范和常見命令:

語法規范:
  1、關鍵字大寫,表名、字段名小寫;
  2、MySQL支持關鍵字小寫;
常見命令:
  查詢數據庫: show databases;
  指定操作數據庫: use 數據庫名;
  查看數據庫中有哪些表: show tables;
  查看表結構:desc表名;
  查看表數據庫:select * from 表名;

七、DDL語言(數據定義語言)

庫和表的管理:

創建數據庫:create database 庫名;
刪除數據庫:drop database 庫名;
創建表:注意:要建表,需要先用 use 數據庫
      創建表:create table 表名(
            字段名 數據庫類型;
            字段名 數據庫類型;
            字段名 數據庫類型;
            );
      刪除表:drop table 表名;

八、MySQL修改表:

1、修改表名:rename
    alter table 舊表名 rename 新表名;
2、修改字段的數據類型:MODIFY
    alter table 表名 MODIFY 字段名 字段類型;
3、修改字段名:change
    alter table 表名 change 舊字段名 新字段名 新數據類型;
4、添加字段:add first after
    alter table 表名 add 字段名 first;
    alter table 表名 add 字段名 字段類型 after 表中字段名;
eg:將字段firstname 添加到age字段之后
    alter table student add firstname varchar(5) after age;
    將firstname添加到第一列
alter table student add firstname varchar(5) first;
5、刪除字段:drop
      alter table 表名 drop 字段名;

DML語言(數據操縱語言)

刪除語句:
  刪除其中某一行數據:delelte from 表名 where name='字段名';
  同時刪除多行數據:delelte from 表名 where name in ('字段名','字段名');
 
插入語句:
  不指定字段插入:insert into 表名 values (字段數據,用逗號隔開);
  eg:insert into 表名 values (1,'lsii',56,'13512345678');
  指定字段插入:insert into 表名 (字段名) values (字段數據,用逗號隔開);
  eg:insert into student (name,age,stuphone) values ('lsii',56,'13512345678');
  同時插入多行數據:insert into 表名 values (字段數據),(字段數據)...,注意:字段數據間加括號用逗號隔開。
  eg:insert into student values
(2,'wangwu',46,'13612345678'),
(3,'sadfsa',34,'13412345678');
 
修改語句:update 表名 set 要修改的字段=數據 where 表中要修改的行其他字段=值;
  多個字段同時修改值的時候用逗號隔開,update student set id = 4,name='augus' where age=56;  

三大范式:

設計表的時候的規范
https://www.cnblogs.com/auguse/articles/11935686.html

 

常見約束:

1、主鍵:primary key

作用:DBMS為了方便查找數據庫設計的規則。

特點:(1)一張表里主鍵唯一的;

(2)主鍵可以用來唯一的標識一行數據,主鍵不能為空。

2、聯合主鍵:表中字段不能作為唯一標識每一行數據時,選取表中兩個或多個字段作為聯合主鍵。

特點:如果去掉聯合主鍵某個字段,剩下的字段任然可以構成聯合主鍵,那么說明之前的聯合主鍵是錯誤的。

在修改表時添加主鍵:alter table 表名 add primary key(字段名);

eg: alter table user add primary key(id);

刪除主鍵:alter table 表名 drop primary key;

創建表的時候設置主鍵:

  方式一:create table 表名(
        -> 字段名 字段類型 primary key,
        -> 字段名 字段類型,
        -> );
方式二:create table 表名(
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> ......,
        -> primary key(字段名)
                    -> );
創建聯合主鍵:create table 表名(
              -> 字段名 字段類型,
              -> 字段名 字段類型,
              -> ......,
              -> primary key(字段名,字段名)
              -> );

主鍵自增 AUTO_INCREMENT

通過auto_increment設置主鍵自增
特點:
  1、和主鍵配合使用;
  2、自增字段的數據類型是整數類型;
  3、自增數據初始值為1,每自增一行數據,自加1;
添加自增:create table 表名(
        -> 字段名 字段類型 primary key AUTO_INCREMENT,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> );
添加自增默認值:create table 表名(
        -> 字段名 字段類型 primary key AUTO_INCREMENT,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> )AUTO_INCREMENT=值;
刪除自增:alter table 表名 modify 字段名 字段類型 AUTO_INCREMENT;
修改表時添加主鍵自增:alter table 表名 change column 舊字段名 新字段名 字段類型 AUTO_INCREMENT;
修改表時指定初始值:alter table 表名 AUTO_INCREMENT=值;

MySQL5.6中文支持問題 DEFAULT CHARSET=GB2312;

查看創建表的sql語句:show create table 表名;

外鍵FOREIGN KEY() REFERENCES tb_dept1(id)

表間關系: 一對一
        一對多
        多對多
外鍵特點:外鍵關聯時主表要先於從表創建;
      外鍵字段的值必然在主表是一一對應的;
      外鍵可以為空,但是不為空的外鍵必然可以在主表中創建外鍵關系:
  CREATE TABLE stu_t (
id INT (5) PRIMARY KEY AUTO_INCREMENT,
sid INT (5),
NAME VARCHAR (10),
SUBJECT VARCHAR (15),
achievement VARCHAR (11),
CONSTRAINT fk_sid
FOREIGN KEY (sid) REFERENCES stu (id)
);ENGINE=InnoDB DEFAULT CHARSET=GB2312;

刪除外鍵約束:
  alter table 表名 drop FOREIGN KEY 外鍵名;
 
修改表時添加外鍵約束:
alter table 表名 add CONSTRAINT 外鍵名 FOREIGN KEY(sid) REFERENCES studentinfo(id)

唯一約束UNIQUE

特點:主鍵在一個表里只能有一個,但是唯一性約束可以多個;
    設置了唯一性約束的字段,表中有且只能有一個空值;
   
創建表時設置唯一性約束:
        create table 表名(
        -> 字段名 字段類型 primary key,
        -> 字段名 字段類型 unique,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> );
修改表時添加唯一性約束:
alter table 表名 add unique(name);
起別名:
alter table 表名 add CONSTRAINT 別名 unique(字段);
刪除唯一性約束:
alter table 表名 drop index name;

默認值DEFAULT 'Beijing'

特點:
  在插入數據時,如果不寫入就使用默認值,如果寫入就使用新值;
create table 表名(
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> 字段名 字段類型 DEFAULT '默認值',
        -> );
修改表時添加默認值:
alter table 表名 change 舊字段名 新字段名 字段類型 DEFAULT '默認值';

非空約束(NOT NULL)

特點:一張表中可以設置多個字段非空,主鍵默認非空;
創建表時設置非空:
        create table 表名(
        -> 字段名 字段類型 NOT NULL,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> 字段名 字段類型,
        -> );
修改表時添加非空:
alter table 表名 change 舊字段名 新字段名 字段類型 not null;

DQL數據查詢語句:查詢會產生一張虛擬表

   語法結構:select 字段名,字段名 from 表名 where 篩選過濾條件
    (注意:*代表表中所有字段,不建議使用,會影響查詢效率;)
    查詢表中所有數據庫:select * from 表名;
    指定字段查詢:select 字段名,字段名 from 表名;
    AS起別名:eg:select name AS 姓名,address AS 地址 FROM student;
    不用AS起別名:select name 姓名,address 地址 FROM student;
限制固定行數查詢:limit
    注意:limit0,2 逗號前表示從哪一行開始取值,第一行是0,逗號右邊取值多少行;
    select * from student limit 0,3;
distinct排除重復:
    select distinct 列名 from 表名;
     
     
條件查詢:eg: select * from student where 字段名=值;
  單條件查詢:= != < > <= >=
  多條件查詢:and or not
  select * from student where id>=2 and sex=‘女’;
  select * from student where id>=2 or sex=‘女’;
 
范圍選擇方式一:eg:select * from 表名 where (2010-birth)>18 and (2010-brith)<28;
方式二:SELECT 列 FROM 表 WHERE 條件 BETWEEN 下限AND 上限(上下限的位置不能顛倒)
eg:select * from 表名 where 2010-birth BETWEEN 18 and 28;
方式三:SELECT 列 FROM 表 WHERE 條件 NOT BETWEEN 下限AND 上限
eg:select * from 表名 where 2010-birth NOT BETWEEN 18 and 28;

集合操作:
1、or
select * from student where 列名=值 or 列名=值 or ...;
2、in
select * from student where 列名 in (值,值);
3、not in
select * from student where 列名 not in (值,值);

模糊查詢:_:一個字符、%:任意字符,可以是零個;
select * from student where 列名 like ‘值’;

查詢空行:
select * from student where 列名 is null;

常量列:
select 列名 as 別名,列名 as 別名名,新的值 as 新別名 from student;

排序:
  升序:ASC(從小到大)
  select * from 表名 where 篩選條件 order by 列名 ASC;
  降序:DESC(從大到小)
  select * from 表名 where 篩選條件 order by 列名 DESC;
多列排序:

聚合函數:

count:計數,返回行的數目;
  select count(列名) from 表名
max:最大值
  select stu_id as 學號,max(grade) as 成績 from 表名 where c_name='計算機';
min:最小值
  select stu_id as 學號,min(grade) as 成績 from 表名 where c_name='計算機';
sum:求和
  select stu_id as 學號,sum(grade) as 成績 from 表名 where c_name='計算機';
avg:平均值
  select stu_id as 學號,avg(grade) as 成績 from 表名 where c_name='計算機';

分組查詢:group by

select c_name,max(grade) from 表名 group by c_name;

多列分組:
  select stu_id,c_name,avg (grade) from 表名 group by c_name,stu_id;
 
having:對之前分組的結構進行過濾
select c_name,avg(grade) from 表名 group by c_name having avg(grader)>80;


WHERE子句:
從數據源中去掉不符合其搜索條件的數據

GROUP BY子句:
搜集數據行到各個組中,統計函數為各個組計算統計值,每個組輸出一行結果

HAVING子句:
從分組計算結果中進行過濾,去掉不符合其組搜索條件的各組數據行

子查詢:sql里面嵌套sql;

SELECT name FROM class WHERE id = (SELECT cid FROM students WHERE name = ‘xxxx’)  

in:后面可以賦多個值,用括號包裹;
SELECT * FROM student WHERE id in (SELECT stu_id FROM score WHERE c_name = ‘中文’) ;

exists子查詢:如果子查詢返回結果為真則執行父級sql,如果為假則父級sql執行結果為空;
SELECT * FROM student WHERE exists (SELECT stu_id FROM score WHERE c_name = ‘中文’) ;

any子句:取最小值與父級比較
all子句:取最大值與父級比較

union子句:合並表;
all 數據會重復
SELECT * FROM student_copy UNION all SELECT * FROM student;
不加all會去重
SELECT * FROM student_copy UNION SELECT * FROM student;

多表聯合查詢:

內連接:求兩表交集的部分;
  select * from 表1 INNER JOIN 表2 ON 表1.列名=表2.列名
eg:select * from a_table INNER JOIN b_table ON a_table.a_id=b_table.b_id;

左連接:LEFT JOIN
以左表為基准,展示出左表的全部數據和右表交集部分數據;
select * from a_table LEFT JOIN b_table ON a_table.a_id=b_table.b_id;
右連接:RIGHT JOIN
以右表為基准,展示出右表的全部數據和左表交集部分數據;
select * from a_table RIGHT JOIN b_table ON a_table.a_id=b_table.b_id;

視圖:

保存查詢結果,把查詢結果當做一張虛擬的表,依賴於原始表數據和結構,如果原表數據或者結構發生改變,視圖的數據和結構也會發生相應的改變

特點:

1、效率高;2、安全性,可以指定展示其中某幾列數據,隱藏敏感信息

創建視圖:view

語法結構:
    create view 視圖名 as 查詢的sql語句

創建視圖時指定字段名:
    create view 視圖名 (字段名,字段名)as 查詢語句;
創建多表視圖:(查詢語句中不能使用 * )
    create view 視圖名 as 聯合查詢語句
查看視圖結構:
    DESC 視圖名;
查看創建視圖的語句:
    show create view 視圖名;
修改視圖的語句:
    alter view 視圖名 as 新查詢sql語句;
修改視圖的數據:
    update 視圖名 set 字段名=新數據 where 條件
  eg:UPDATE view_show_stu set sname='吊炸天' WHERE sid=103;
刪除視圖:drop view
    drop view 視圖名;

存儲過程:多句sql同時執行,先編譯好存儲服務端,

特點:執行效率高、重復使用

臨時改變結束結束符合
delimiter //

創建存儲過程
CREATE PROCEDURE show_studnet()
BEGIN
SELECT * FROM student;
END//

調用存儲過程
CALL show_studnet()

查看存儲過程創建sql
SHOW CREATE PROCEDURE show_studnet

創建帶參數的存儲過程
  delimiter //
  CREATE PROCEDURE 存儲過程名(IN 新代字段 調用字段類型和值)
  BEGIN
  SELECT * FROM student WHERE 原表字段=新代字段;
  END//
  CALL show_studnet_un('原表中該行原數據')
eg:delimiter //
  CREATE PROCEDURE     show_studnet_un(IN name VARCHAR(30))
  BEGIN
  SELECT * FROM student WHERE sname=name;
  END//

調用
CALL show_studnet_un('原表中該行原數據')

刪除存儲過程
drop PROCEDURE show_studnet_un  

數據庫的備份:

備份表:
mysqldump -u root -p 數據庫名 表名>備份存儲路徑://存儲名.sql
備份指定庫:
mysqldump -uroot -p test woniutest>C:\student.sql

#備份數據庫中某個表
mysqldump -uroot -p test student>C:\student.sql

備份單個數據庫
mysqldump -u root -p 庫名>C:\student.sql

同時備份多個庫
mysqldump -u root -p --databases 庫名 庫名>C:\student.sql

#導出數據庫信息
查看secure-file-priv當前的值是
show variables like '%secure%';

如果導出失敗:
  則需要添加secure_file_priv
   
  SELECT * FROM student INTO OUTFILE 'C://Pcode/person.txt';
回復數據庫
mysql -u root -p < C:\all.sql

備份所有數據庫
mysqldump -u root -p --all-databases > C:\all.sql

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM