數據庫總結


什么是數據(Data)?
描述事物的符號記錄稱為數據,描述事物的符由多種表現形式(可以是數字,文字,圖片,圖像,聲音,語言等)

name,sex,age,birth,born_addr,major,entrance_time,school #字段
alice,male,18,1999,guangzhou,IT,2018,institute #記錄

什么是數據庫(Database,簡稱DB)
數據庫即存放數據的倉庫,
數據庫中的數據按一定的數據模型組織、描述和儲存,具有較小的冗余度、較高的數據獨立性和易擴展性,並可為各種用戶共享。


什么是數據庫管理系統(DataBase Management System 簡稱DBMS)
一個系統軟件---數據庫管理系統如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用於大型門戶,例如搜狗、新浪等,它主要的優勢就是開放源代碼,因為開放源代碼這個數據庫是免費的,他現在是甲骨文公司的產品。

oracle主要用於銀行、鐵路、飛機場等。該數據庫功能強大,軟件費用高。也是甲骨文公司的產品。
sql server是微軟公司的產品,主要應用於大中型企業,如聯想、方正等。


數據庫服務器、數據管理系統、數據庫、表與記錄的關系
記錄:1 alice 324245234 22(多個字段的信息組成一條記錄,即文件中的一行內容)

表:student,school,class_list(即文件)

數據庫:oldboy_stu(即文件夾)

數據庫管理系統:如mysql(是一個軟件)

數據庫服務器:一台計算機(對內存要求比較高)


數據庫服務器:運行數據庫管理軟件
數據庫管理軟件:管理-數據庫
數據庫:即文件夾,用來組織文件/表
表:即文件,用來存放多行內容/多條記錄

 

windows下MySQL的安裝與基本管理
MySQL 5.7 的安裝教程

#1、下載:MySQL Community Server 5.7.40
http://dev.mysql.com/downloads/mysql/

#2、解壓
如果想要讓MySQL安裝在指定目錄,那么就將解壓后的文件夾移動到指定目錄,如:C:\mysql

#3、添加環境變量
【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名為Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】

#4、初始化

mysqld --initialize-insecure 

#5、啟動MySQL服務

     mysqld   #  啟動MySQL服務  

#6、啟動MySQL客戶端並連接MySQL服務

mysql -u root -p # 連接MySQL服務器

可參考百度經驗安裝教程:https://jingyan.baidu.com/article/d7130635f1c77d13fdf475df.html

查看MySQL是否啟動:----->右擊計算機----->管理---->服務與應用程序(服務)------>找到MySQL,點擊查看是否啟動

登錄設置密碼:
初始狀態下,管理員root,密碼為空,默認只允許從本機登錄localhost
設置密碼

mysql> mysqladmin -uroot password "123" 設置初始密碼 由於原密碼為空,因此-p可以不用
mysql> mysqladmin -uroot -p"123" password "456" 修改mysql密碼,因為已經有密碼了,所以必須輸入原密碼才能設置新密碼

  


統一字符編碼
1. 修改配置文件(保存為my.ini格式)
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

2. 重啟服務

3. 查看修改結果:
\s
show variables like '%char%' 

初識sql語句

SQL語言主要用於存取數據、查詢數據、更新數據和管理關系數據庫系統,SQL語言由IBM開發。
SQL語言分為3種類型:
1、DDL語句 數據庫定義語言: 數據庫、表、視圖、索引、存儲過程,例如CREATE DROP ALTER
2、DML語句 數據庫操縱語言: 插入數據INSERT、刪除數據DELETE、更新數據UPDATE、查詢數據SELECT
3、DCL語句 數據庫控制語言: 例如控制用戶的訪問權限GRANT、REVOKE

#1. 操作文件夾
增:create database db1 charset utf8;

查:show databases;
show create database db1 ;

改:alter database db1 charset gbk;

刪除: drop database db1;
#2. 操作文件
先切換到文件夾下:use db1
查看當前庫:select database();

增:create table t1(id int,name char);

查:show tables
show create table t1;
desc t1;

改:alter table t1 modify name char(3);
alter table t1 change name NAME char(2);

刪:drop table t1; 
#3. 操作文件中的內容/記錄
先創建表: create table t1(id int,name char(6));

增:insert into t1 values(1,'xing1'),(2,'xing2'),(3,'xing3');

查:select * from t1;
select id,name from t1;

改:update t1 set name='sb' where id=2;

刪:delete from t1;
delete from t1 where id=1;  

庫操作
一、系統數據庫
information_schema: 虛擬庫,不占用磁盤空間,存儲的是數據庫啟動后的一些參數,如用戶表信息、列信息、權限信息、字符信息等

performance_schema: MySQL 5.5開始新增一個數據庫:主要用於收集數據庫服務器性能參數,記錄處理查詢請求時發生的各種事件、鎖等現象

mysql: 授權庫,主要存儲系統用戶的權限信息

test: MySQL數據庫系統自動創建的測試數據庫

二 、創建數據庫
1 語法(help create database)

CREATE DATABASE 數據庫名 charset utf8;

2 數據庫命名規則:

可以由字母、數字、下划線、@、#、$
區分大小寫
唯一性
不能使用關鍵字如 create select
不能單獨使用數字
最長128位

  



三、數據庫的相關操作
查看數據庫:

show databases;
show create database db1;
select database();
選擇數據庫:USE 數據庫名

刪除數據庫:DROP DATABASE 數據庫名;

修改數據庫:alter database db1 charset utf8;

表操作
存儲引擎
1、什么是存儲引擎?
存儲引擎就是表的類型

2、查看MySQL支持的存儲引擎

show engines;

3、指定表類型/存儲引擎

create table t1(id int)engine=innodb;
create table t2(id int)engine=memory;
create table t3(id int)engine=blackhole;
create table t4(id int)engine=myisam;


insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);

表的增刪改查
一、表的介紹
表相當於文件,表中的一條記錄就相當於文件的一行內容,
不同的是,表中的一條記錄有對應的標題,稱為表的字段

二、創建表
語法:
create table 表名(
字段名1 類型[(寬度) 約束條件],
字段名2 類型[(寬度) 約束條件],
字段名3 類型[(寬度) 約束條件]
);

#注意:
1. 在同一張表中,字段名是不能相同
2. 寬度和約束條件可選
3. 字段名和類型是必須的

創建表

create table t1(
id int,
name char(50),
sex enum('male','female'),
age int(3)
);

查看表

show tables;

desc t1;

select * from t1;

select id,name from t1;

向表中插入數據:

insert into t1 values
(1,'summer','male',18),
(2,'alice','female',22);

select * from t1;

增加數據:

insert into t1(id) values(3),(4);

select * from t1;

三、查看表的結構:

describe t1; # 可簡化為desc t1;

show create table t1\G; #查看表詳細結構,可加\G

四、修改表的結構:
語法:
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;

2. 增加字段
ALTER TABLE 表名
ADD 字段名 數據類型 [完整性約束條件…],
ADD 字段名 數據類型 [完整性約束條件…];
ALTER TABLE 表名
ADD 字段名 數據類型 [完整性約束條件…] FIRST;
ALTER TABLE 表名
ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名;

3. 刪除字段
ALTER TABLE 表名
DROP 字段名;

4. 修改字段
ALTER TABLE 表名
  MODIFY 字段名 數據類型 [完整性約束條件…];

ALTER TABLE 表名
  CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…];

ALTER TABLE 表名
  CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];

1.修改存儲引擎
alter table service
engine=innodb;

2.添加字段
alter table student10
add name char(20) not null,
add age int(3) not null default 22;


alter table student10
add stu_num varchar(10) not null after name; #添加name字段之后

alter table student10 
add sex enum('male','female') default 'male' first; #添加到最前面
3.刪除字段
alter table student10 
drop sex;

alter table service
drop mac;

4.修改字段類型modify
alter table student10
modify age int(9);

alter table student10
change name NAME char(7);

alter table student10
modify id int(11) not null primary key auto_increment; #修改為主鍵
5.增加約束(針對已有的主鍵增加auto_increment)
alter table student10 modify id int(11) not null auto_increment;

alter table student10 modify id int(11) not null primary key auto_increment;(ERROR)

6.對已經存在的表增加復合主鍵
alter table service2
add primary key(host_ip,port); 

7.增加主鍵
alter table student10
modify name varchar(10) not null primary key;

8.增加主鍵和自動增長
alter table student10
modify id int(10) not null primary key auto_increment;#自動增長的主鍵應該使用整型

9.刪除主鍵
a. 刪除自增約束
alter table student10 modify id int(11) not null; 

b. 刪除主鍵
alter table student10 
drop primary key;

五、復制表

復制表結構+記錄 (key不會復制: 主鍵、外鍵和索引)
mysql> create table new_service select * from service;

只復制表結構
mysql> select * from service where 1=2; #條件為假,查不到任何記錄
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2; 
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> create table t4 like employees; #模糊查詢

 

六、刪除表

DROP TABLE 表名;

數據類型
1.數值類型
整數類型:tinyint,smallint,mediumint,int,bigint
    MySQL中無布爾值,使用tinyint(1)構造。

        無符號數    有符號數
    tinyint   0-255      -128-127
    int     0-2~32       -2~31-2~31-1

tinyin中默認有符號 有符號數超出范圍最小值是-128 最大值是127
無符號數超出范圍最小值是0 最大值是255

其他int類型 同理 tinyint

浮點數:float double
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
單精度浮點數(非准確小數值),m是數字總個數,d是小數點后個數。m最大值為255,d最大值為30
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
雙精度浮點數(非准確小數值),m是數字總個數,d是小數點后個數。m最大值為255,d最大值為30
decimal[(m[,d])] [unsigned] [zerofill]
准確的小數值,m是數字總個數(負號不算),d是小數點后個數。 m最大值為65,d最大值為30。

2.字符串
char和varchar括號內的參數指的都是字符的長度

#char類型:定長,簡單粗暴,浪費空間,存取速度快
字符長度范圍:0-255(一個中文是一個字符,是utf8編碼的3個字節)
存儲:存儲char類型的值時,會往右填充空格來滿足長度
檢索:在檢索或者說查詢時,查出的結果會自動刪除尾部的空格

#varchar類型:變長,精准,節省空間,存取速度慢
字符長度范圍:0-65535
存儲:varchar類型存儲數據的真實內容,不會用空格填充,如果'ab ',尾部的空格也會被存起來
檢索:尾部有空格會保存下來,在檢索或者說查詢時,也會正常顯示包含空格在內的內容

3.時間類型
date time datetime timestamp
1. 單獨插入時間時,需要以字符串的形式,按照對應的格式插入
2. 插入年份時,盡量使用4位值
3. 插入兩位年份時,<=69,以20開頭,比如50, 結果2050
         >=70,以19開頭,比如71,結果1971

create table student(
  id int,
  name char(6),
  born_year year,
  birth_date date,
  class_time time,
  reg_time datetime
);

insert into student values(1,'wuli',now(),now(),now(),now());

insert into student values(2,'nice',"2018","2018-08-08","12:12:12","2018-08-08 12:12:12");


datetime與timestamp的區別

1.DATETIME的日期范圍是1001——9999年,TIMESTAMP的時間范圍是1970——2038年。
2.DATETIME存儲時間與時區無關,TIMESTAMP存儲時間與時區有關,顯示的值也依賴於時區。
3.DATETIME使用8字節的存儲空間,TIMESTAMP的存儲空間為4字節。
4.DATETIME的默認值為null;TIMESTAMP的字段默認不為空(not null),默認值為當前時間(CURRENT_TIMESTAMP)

4.枚舉類型與集合類型
enum 單選 只能在給定的范圍內選一個值,如性別 sex 男male/女female
set 多選 在給定的范圍內可以選擇一個或一個以上的值(愛好1,愛好2,愛好3...)

create table consumer(
  id int not null primary key auto_increment,
  name char(16),
  sex enum('male','female'),
  level enum('vip1','vip2','vip3'),
  hobbies set('play','music','read','run')
);
insert into consumer values(1,'wuli','male','vip2','music,read');
insert into consumer values(2,'wuli316','fale','vip3','play,run,music');

5.完整性約束

#約束條件主要分為:
PRIMARY KEY (pk) 標識該字段為該表的主鍵,可以唯一的標識記錄
FOREIGN KEY (fk) 標識該字段為該表的外鍵
NOT NULL 標識該字段不能為空
UNIQUE KEY (UK) 標識該字段的值是唯一的
AUTO_INCREMENT 標識該字段的值自動增長(整數類型,而且為主鍵)
DEFAULT 為該字段設置默認值
UNSIGNED 無符號
ZEROFILL 使用0填充
1. 是否允許為空,默認NULL,可設置NOT NULL,字段不允許為空,必須賦值
2. 字段是否有默認值,缺省的默認值是NULL,如果插入記錄時不給字段賦值,此字段使用默認值
sex enum('male','female') not null default 'male'
age int unsigned NOT NULL default 20 必須為正值(無符號) 不允許為空 默認是20
3. 是否是key
主鍵 primary key 一個表內只能有一個主鍵primary key
外鍵 foreign key
索引 (index,unique...)

  

 

 

 


免責聲明!

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



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