數據庫的基礎知識
1.數據庫(Database,DB)
按照數據結構來組織、存儲和管理數據的倉庫,其本身可看作電子化的文件櫃,用戶可以對文件中的數據進行增加、刪除、修改、查找等操作
2.數據庫管理系統(DBMS)
數據庫
數據庫管理系統
關係型數據庫:MySQL、oracle(oracale),MSSQL、Access、excel,(mysofeware)DB2(IBM);SQLLite(輕型數據庫/嵌入式)
非關係型數據庫(NO-SQL):nongoDB、Hbase、Cassandra.......
SQL:結構化查詢語言
數據庫應用程序
3.數據庫服務器(應用程序)
硬件---》安裝操作系統(OS:LInux,Windows)---》安裝數據庫管理系統
4.常用術語
表
記錄:行
字段/屬性:列
5.Mysql的安裝和配置
目錄結構
bin---可執行文件
lib---庫文件
data---日誌文件和數據庫
Smple DataBase---樣本數據庫
share---共享文件
include---頭文件
my.ini(配置文件):
Mysql正常安裝,my.ini存放在windows目錄下
內容:
[client];port:3306 ---》客戶端的端口
[Mysql]default-character-set-gbk:默認字符集(字符編碼)
端口、文件路徑、數據路徑、默認字符集、數據庫存儲引擎、最大連接數(max-contections-512)
[Mysql] default-storage-engin-MyISAM:數據庫存儲引擎
MyISAM
INNOBD
安裝:官網下載,安裝 默認端口:3306 用戶名:root;密碼:自定義
6.SQL(Structurd Query Language):結構化查詢語言
關係型數據庫語言
一種數據庫查詢語言和程序設計語言
增刪改查
7.sql語言組成
數據定義語言(DDL):數據庫
數據操作語言(DML):表操作
數據查詢語言(DQL):表查詢
數據控制語言(DCL):事務、存儲過程等
8.Windows下啓動Mysql服務:
驗證是否啓動:telnet -an---3306端口是否是LISTENING
使用相關命令登錄:dos命令---mysql -h hostname -u useername -p
登錄成功出現myslq>
登錄失敗如何解決
相關命令:help \h 幫助; \s:查看數據庫信息; show database:查看所有數據庫; user test:或者\u #切換數據庫
9.數據類型
整數類型5種:TINYINT(1個字節)、SMALLINT(2)、MEDIUMINT(3)、INT(4)、BIGINT(8)
浮點數類型和定點數類型:FLOAT(4個字節)、DOUBLE(4)、DECIMAL(M,D)(M+2)(精確,幾乎沒有誤差):高精度/定點數據類型
日期與時間類型:
YEAR(1)、---YYYY
DATE(4)---YYYY-MM-DD
current_date/now()---獲取當前系統日期
TIME(3)---
---HH:MM:SS
current_time/now()---輸入當前系統時間
(最優)DATETIME(8)(到9999年)、
---YYYY-MM-DD HH:MM:SS
NOW---獲取當前系統時間和日期
TIMESTAMP(時間戳1970年-2038年)
CURRENT_TIMESTAMP/NULL/無任何輸入 ----> x系統會輸入當前系統時間
----同DATATIME
字符串與二進制類型
char(最大長度)---固定長度字符串:不管存入幾位都佔最大長度
varchar()---可變長度:存幾位佔幾位,可擴展,但位數只顯示到最大長度
binany---固定長度二進制數據---圖片/文本(數據長度不足,數據後面用\0補齊)
varbinany---可變長度二進制數據---圖片/文本
text類型(大文本數據)---文章內容、評論
tinytext
text
mediumtext
longext
BLOB(二進制類型)(二進制大數據)---圖片/PDF文檔等
tinyblob
blob
mediumblob
longblob
ENUM(枚舉類型)(只能存儲一個枚舉字符串值)----ENUM(’值1‘,’值2‘,’值3‘。。。’值n‘):只能取一個(注意:Mysql中存入的是枚舉列舉中的順序編號,而不是列表中的值)
SET---字符串對象,可以有零或多個值---與ENUM相同
BIT(M)類型(二進制類型)---數據長度小於M,左邊用0補齊
10.數據表的基本操作(CRUD)
1.創建
創建數據表:create 表名(字段名1 類型,字段名2 類型,字段名3 類型)
2.查看數據表
1.使用show create table 表名---查看具體某一個表
2.使用show tables;----查看所有表
3.末尾加\G(G必須大寫);---使顯示美觀
4.DESCRIBE/desc 表名
NULL--該列是否可以存儲NULL值
Key----該列是否已經編制索引
Default---是否有默認值
Extra---獲取給定列附加信息(備註)
3.刪除
---drop table 表名;
4.修改
修改表名稱---alter table 舊錶名 rename (to) 新表名
添加字段名(數據無損)---alter table 表名 add 字段名 數據類型(first/after);
修改字段名(無損)---alter table 表名 change 舊字段名 新字段名 數據類型;(數據類型必須與原數據類型相同)
修改字段屬性(數據類型)(數據有問題)---alter table 表名 notify 字段名 字段屬性;
修改字段排列順序(無損)
1.字段位於表開頭---alter table 表名 modify 字段名 字段屬性 first;
2.字段位於表末尾---alter table 表名 modify 字段名 字段屬性 after;
3.交換---1。字段位於表開頭---alter table 表名 notify 字段名 字段屬性 after 字段名;
刪除字段名稱(有損)---alter table 表名 drop 字段名;
注意:備份後再進行操作
5.表的約束
- 創建目的:針對字段進行限制,保證數據的正確性和唯一性
- 約束條件:PRIMARY KEY,FOREING KEY,NOT NULL,UNIQUE,DEFAULT。
5.1 主鍵約束(PRIMARY KEY)例如:身份證—它可以唯一表示表中的記錄
- 1.單字段主鍵 格式:字段名 數據類型 PRIMARY KEY
- 2.多字段主鍵(組合主鍵)格式:字段名 數據類型 PRIMARY KEY(字段名1,字段名2,字段名3…字段名n)
- 注意:一個表中主鍵只有一個,且滿足了非空NOT NULL,不重複UNIQUE
5.2 非空約束 格式:字段名 數據類型 NOT NULL(一個表中可以定義多個非空約束)
5.3 唯一約束 格式:字段名 數據類型 UNIQUE 驗證是否可以爲空?可以
- 默認約束 格式:字段名 數據類型 DEFAULT 默認值—默認爲0
- 自動增加(AUTO_INCREMENT):字段名 字段類型 AUTO_INCREMENT—一般配合主鍵使用—約束條件:整數類型—跳數1,可以自定義
6.索引(列值排序後的結構)
6.1 作用
- 提高表中數據查詢速度
6.2 概念
普通索引
唯一性索引
全文索引(數據量大)
單列索引
多列索引
空間索引
6.3 創建方式及語法
- 1.創建表的時候創建:
create table 表名 (字段名 數據類型[完整性約束條件] 字段名 數據類型[完整性約束條件] . . . 字段名 數據類型 [[uinique|fulltaxt|spatial] index|key [別名] (字段名1[(長度)] [asc|desc]]
- 注: asc升序
- 2.使用CREATE INDEX語句在已存在的表上創建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 ON 表名 (字段名 [(長度)] [ASC|DESC]);
- 3.使用ALTER TABLE語句在已存在的表上穿件索引(修改)
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 (字段名 [(長度)] [ASC|DESC])
- 4.刪除索引
方法一:
ALTER TABLE 表名 DROP INDEX 索引名(必須是空表,先刪除一下表內容delete from 表名)
方法二:
DROP INDEX 索引名 on 表名----查看:show create table 表名
7.表記錄操作
- 7.1 添加數據(記錄)
- 格式一:insert into 表名[(字段名1,字段名2,。。。)] values(值1,值2,。。。)
- 注意:字段名可以省略不寫,但value值必須表中都寫;如果需要添加某個特定的值,在前面表名後寫上相應的字段名
- 格式二:insert into 表名 set 字段名1=值1[,字段名2=值2,。。。字段名n=值n] 例:insert into t1 id=1,name=‘qwe’;
- 7.2 記錄刪除
- delete from 表名 刪除所有記錄
- delete from 表名 where 字段名1=值1 and|or 字段名n=n值 刪除一或幾條
- 記錄查詢
- select * from 表名
(約束知識點)建表流程:
- 例: 創建一個數據庫book—設計一個學生信息表(定義約束,創建2個索引,添加20條以上記錄)
- 操作流程如下:
-
dos命令中打開數據庫bin目錄:
-
1.登錄:
D:\phpStudy\MySQL\bin>mysql -uroot -proot
-
2.創建數據庫:
mysql>create database book;
-
3.查看數據庫:
mysq>show databases;
-
4.使用數據庫:
use book;
-
5.創建表(約束)
-
mysql> create table student;
-
id int(10) primary key auto_increment,
-
name varchar(20) not null,
-
age int(6) unique,
-
score float default 60,
-
grade int foreing);
-
6.創建索引:
mysql> create index stu_id on student (id asc);
-
mysql> create fulltext index index_name on student(name);
-
7.查看已創建的表:
mysql> show create table student\G;
-
8.添加記錄:
mysql> insert into student values(1,'aaa',18,61,1)
-
mysql> desc student;
查看錶 -
mysql> insert into student(id) values(3);
-
mysql> insert into student(id,name,age,score) values(5,'ddd',24,78);
-
mysql> insert into student set id=11,name='kkk',age=42;score=66;
-
mysql> insert into student(id,grade) values(18,207);
-
9.查看生成的表:
mysql> select * from student;
輸出結果如下所示:
-
- 結果:
`±—±-----±-----±------±------+
| id | name | age | score | grade |
±—±-----±-----±------±------+
| 1 | aaa | 18 | 61 | 1 |
| 3 | | NULL | 60 | NULL |
| 2 | bbb | NULL | 60 | NULL |
| 4 | ccc | 22 | 60 | NULL |
| 5 | ddd | 24 | 78 | NULL |
| 6 | eee | 17 | 90 | 201 |
| 7 | fff | 12 | 56 | 202 |
| 8 | | NULL | 60 | NULL |
| 9 | fff | NULL | 60 | NULL |
| 10 | ggg | 27 | 60 | NULL |
| 11 | kkk | 42 | 60 | NULL |
| 12 | kkk | 26 | 66 | NULL |
| 13 | lll | 40 | 99 | 203 |
| 14 | | NULL | 60 | 206 |
| 15 | | 45 | 60 | NULL |
| 67 | | NULL | 88 | NULL |
| 17 | mmm | NULL | 60 | NULL |
| 18 | | NULL | 60 | 207 |
| 19 | nnn | 99 | 100 | 210 |
| 20 | | 120 | 60 | NULL |
| 21 | | 300 | 60 | NULL |
±—±-----±-----±------±------+
21 rows in set (0.00 sec)``