做空調(diào)的網(wǎng)站蘭州模板網(wǎng)站seo價(jià)格
數(shù)據(jù)庫基本概念
- 數(shù)據(jù)庫(DataBase):數(shù)據(jù)庫就是存儲(chǔ)數(shù)據(jù)的倉庫
- 數(shù)據(jù)庫管理系統(tǒng)(DBMS):可以獨(dú)立運(yùn)行的軟件,維護(hù)磁盤上的數(shù)據(jù),用統(tǒng)一的方式維護(hù)不同種類的數(shù)據(jù),做到通用且高效。
- 常見的DBMS:
- mysql
- oracle
- db2
- sqlserver
- 數(shù)據(jù)庫實(shí)例可以被視為數(shù)據(jù)庫管理系統(tǒng)的一個(gè)運(yùn)行實(shí)體。
數(shù)據(jù)庫與表的概念
- 在DBMS中,一個(gè)項(xiàng)目中用到的所有數(shù)據(jù)都可以以一個(gè)數(shù)據(jù)庫形式保存在一起。每種不同的數(shù)據(jù)都是以表的形式保存。
數(shù)據(jù)庫中表的概念
- 表用來保存數(shù)據(jù),一張表是由行和列構(gòu)成
- 列被稱為字段:保存一組數(shù)據(jù)中各個(gè)屬性
- 行被稱為記錄:保存具體的一條信息。
如下是一張用戶表
如何操作數(shù)據(jù)庫系統(tǒng)
所有的DBMS都支持一種結(jié)構(gòu)化查詢語句進(jìn)行對(duì)應(yīng)的操作。我們以客戶端的角度與DBMS進(jìn)行連接,并發(fā)送對(duì)應(yīng)的語句進(jìn)行操作。
結(jié)構(gòu)化查詢語言:Structured Query Language簡稱為SQL
SQL是有標(biāo)準(zhǔn)的:SQL92已經(jīng)SQL99,所有數(shù)據(jù)庫都支持SQL92標(biāo)準(zhǔn)
數(shù)據(jù)庫連接方式
數(shù)據(jù)庫連接有:命令行
、圖形化界面軟件
、JDBC連接
- 命令行形式
- 圖形化界面
- 使用JDBC連接以及數(shù)據(jù)庫連接池的形式
- 在集成開發(fā)環(huán)境中使用(ECLIPSE,IDEA)
- 我們編寫的JAVA程序也是通過JDBC連接
SQL
SQL主要分為以下幾種類:DDL
、DML
、DQL
、TCL
、DCL
,接下來我們會(huì)一一的詳細(xì)介紹這幾種語言
DDL
DDL語言詳細(xì)名稱為data definition language,是數(shù)據(jù)定義語言,用來進(jìn)行數(shù)據(jù)庫對(duì)象操作的。
數(shù)據(jù)庫對(duì)象包括不限于:數(shù)據(jù)庫,表,視圖,索引等
主要需要認(rèn)識(shí)的關(guān)鍵字如下:CREATE
、ALTER
、DROP
操作數(shù)據(jù)庫
查看當(dāng)前DBMS中已有的數(shù)據(jù)庫:SHOW DATABASES
新建一個(gè)數(shù)據(jù)庫
-- 基本語法
CREATE DATABASE 數(shù)據(jù)庫名 [charset=字符集名稱]-- 例子1 創(chuàng)建一個(gè)名為mydb的數(shù)據(jù)庫
CREATE DATABASE mydb;-- 例子2 創(chuàng)建數(shù)據(jù)庫時(shí)指定字符集
CREATE DATABASE mydb1 CHARSET=UTF8;
CREATE DATABASE mydb2 CHARSET=GBK;
查看數(shù)據(jù)庫信息
-- 語法
SHOW CREATE DATABASE 數(shù)據(jù)庫名-- 例子 查看到曾經(jīng)創(chuàng)建mydb庫時(shí)的SQL,查看指定的字符集信息。
SHOW CREATE DATABASE mydb
刪除數(shù)據(jù)庫
刪庫是一個(gè)危險(xiǎn)操作,需謹(jǐn)慎,最好備份,skr
-- 語法
DROP DATABASE 數(shù)據(jù)庫名-- 例子 刪除數(shù)據(jù)庫mydb1
DROP DATABASE mydb1;-- 查詢時(shí)發(fā)現(xiàn)mydb1已經(jīng)被刪除了
SHOW DATABASES;
使用數(shù)據(jù)庫(切換到另一個(gè)數(shù)據(jù)庫)
要保存數(shù)據(jù)都是要將數(shù)據(jù)保存在表中,而數(shù)據(jù)庫相當(dāng)于是表的集合。我們?yōu)椴煌捻?xiàng)目創(chuàng)建不同的數(shù)據(jù)庫,在DBMS上要為不同的數(shù)據(jù)庫的表進(jìn)行操作時(shí)要先切換到對(duì)應(yīng)的數(shù)據(jù)庫上再進(jìn)行相關(guān)操作。
語法:
-- 語法
USE 數(shù)據(jù)庫名-- 例子切換到一個(gè)名為mydb的數(shù)據(jù)庫上
USE mydb;
操作表
查看一個(gè)數(shù)據(jù)庫中創(chuàng)建了多少張表
SHOW TABLES
創(chuàng)建表
-- 語法
CREATE TABLE 表名(字段名1 類型[(長度)][默認(rèn)值] [約束],字段名2 ...
)-- 例子 切換到mydb數(shù)據(jù)庫上,將userinfo表創(chuàng)建在該庫中
USE mydb;-- 創(chuàng)建userinfo表
CREATE TABLE userinfo(id INT primary key, -- 一張表第一個(gè)字段通常為ID(主鍵,唯一標(biāo)識(shí)) username VARCHAR(30), -- VARCHAR在數(shù)據(jù)庫中是字符串類型password VARCHAR(30), -- VARCHAR后面指定的長度為最多占用的字節(jié)數(shù)nickname VARCHAR(30), -- 若使用UTF8編碼,意味著最多保存10個(gè)漢字(每個(gè)漢字3字節(jié))age INT(3), -- 在MySQL中整數(shù)使用INT類型 注:不同數(shù)據(jù)庫不同sex TINYINT(1) DEFAULT 0 -- 創(chuàng)建TINYINT,如果新增值時(shí)為空,則默認(rèn)為0
)
查看表結(jié)構(gòu)和已創(chuàng)建表的信息
-- 語法 查看表結(jié)構(gòu)
DESC 表名
-- 例子 查看userinfo表的結(jié)構(gòu)
DESC userinfo;-- 語法 查看已創(chuàng)建的表的創(chuàng)建語句
SHOW CREATE TABLE 表名-- 例子 查看創(chuàng)建userinfo表的信息
SHOW CREATE TABLE userinfo;
刪除表
-- 語法
DROP TABLE 表名-- 例子 刪除userinfo表
DROP TABLE userinfo;
修改表
修改表名
-- 語法
RENAME TABLE 原表名 TO 新表名-- 例子 將userinfo表改名為user
RENAME TABLE userinfo TO user
修改表結(jié)構(gòu)
-- 準(zhǔn)備一張表
CREATE TABLE hero(name VARCHAR(30),age INT(3)
)
添加字段
-- 語法
-- 添加新字段到表的第一行
ALTER TABLE 表名 ADD 字段名 類型 FIRST-- 向表的末尾追加一個(gè)新的字段
ALTER TABLE 表名 ADD 字段名 類型-- 將新字段添加到表中現(xiàn)有某個(gè)字段之后
ALTER TABLE 表名 ADD 字段名 類型 AFTER 表中現(xiàn)有某字段-- ------------------------------------------------- 例子
-- 添加地址字段到hero表第一行
ALTER TABLE hero ADD address varchar(20) FIRST-- 向hero表的末尾追加一個(gè)地址字段
ALTER TABLE hero ADD address varchar(20)-- 將新字段地址添加到hero表中name字段之后
ALTER TABLE 表名 ADD address varchar(20) AFTER name
刪除字段
-- 語法
ALTER TABLE 表名 DROP 字段名-- 例子 刪除hero表中地址字段
ALTER TABLE hero DROP address
修改字段
-- 語法
ALTER TABLE 表名 CHANGE 原字段名 新字段名 類型-- 例子1 將hero表中的age字段長度改為5
ALTER TABLE hero CHANGE age age INT(5)-- 例子2 將hero表中的age字段類型改為VARCHAR(10)
ALTER TABLE hero CHANGE age age VARCHAR(10) -- 例子3 將hero表中的gender字段改為phonenumber
ALTER TABLE hero CHANGE gender phonenumber INT(11)-- 例子4 將hero表中phonenumber字段添加非空約束
ALTER TABLE hero CHANGE phonenumber phonenumber INT(11) NOT NULL
修改表結(jié)構(gòu)應(yīng)當(dāng)在表中還沒有數(shù)據(jù)時(shí)進(jìn)行,否則可能出現(xiàn)因修改與表中現(xiàn)有數(shù)據(jù)沖突導(dǎo)致修改失敗
- 修改字段類型時(shí),如果表中該字段原數(shù)據(jù)類型與新類型不匹配時(shí),會(huì)導(dǎo)致原數(shù)據(jù)無法轉(zhuǎn)換為新類型
- 性別字段,原類型VARCHAR,記錄的值為"男"或"女"。現(xiàn)希望將性別字段改為INT型。會(huì)發(fā)生類型沖突
- 修改字段長度,長度減少可能導(dǎo)致失敗
- 手機(jī)號(hào)字段,原有長度11位。現(xiàn)在想將其改為5位,會(huì)因?yàn)楝F(xiàn)有數(shù)據(jù)該字段值長度都為11不能縮短導(dǎo)致修改失敗。
- 為現(xiàn)有字段添加約束,可能導(dǎo)致表中該現(xiàn)有記錄該字段值存在不滿足約束要求,導(dǎo)致修改失敗。
- 性別字段開始沒有非空約束,表中部分記錄該字段值為NULL,此時(shí)若修改該字段并追加非空約束,會(huì)導(dǎo)致現(xiàn)有該字段為NULL值的記錄不滿足該約束,導(dǎo)致約束無法修改。
索引操作
創(chuàng)建索引
- 創(chuàng)建表的同時(shí)創(chuàng)建索引.(例如 create table tablename(…,index 索引名 (字段名)))
drop table if exists student;
create table if not exists student
(id bigint auto_increment,first_name varchar(50) not null comment '學(xué)生名字',last_name varchar(20) not null comment '學(xué)生姓',phone varchar(15) not null comment '手機(jī)號(hào)',email varchar(50) default '' comment '郵箱',birthday date comment '出生日期',create_time datetime default current_timestamp comment '注冊(cè)日期',primary key (id),unique key (phone),index h_index (email)
)engine = InnoDB character set utf8mb4;
- 創(chuàng)建表后通過create語句創(chuàng)建索引(例如 create index 索引名 on 表名(字段名))
- 創(chuàng)建表后通過alter語句創(chuàng)建索引(例如 alter table add index 索引名(字段名))
- 創(chuàng)建普通索引例子
create index index_first_name on student(first_name);
alter table student add index index_last_name (last_name);
- 創(chuàng)建唯一索引例子
create unique index index_first_name on student(first_name);
alter student add unique index index_email (email)
- 創(chuàng)建組合(聯(lián)合)索引例子
create index index_first_last on student(first_name,last_name);
alter table student add index index_first_last (first_name,last_name);
查看索引
-- 語法,查看某張表上的索引
show index from 表名
刪除索引
-- 語法
drop index 索引名 on 表名;
-- 例子 刪除student表中的index_first_last索引
drop index index_first_last on student;
DML
DML語言詳細(xì)名稱為data manipulation language,是數(shù)據(jù)操作語言,用來對(duì)表中的數(shù)據(jù)進(jìn)行操作的。
主要需要認(rèn)識(shí)的關(guān)鍵字如下:INSERT
、UPDATE
、DELETE
-- 準(zhǔn)備一張表:
CREATE TABLE person(name VARCHAR(30),age INT(3)
)
INSERT 插入數(shù)據(jù)
-- 語法 注:在語法定義上[]中的內(nèi)容是可寫可不寫的。
INSERT INTO 表名 [(字段1,字段2,字段3...)] VALUES (值1,值2,值3...)-- 例子
INSERT INTO person (name,age) VALUES ('張三',22);
INSERT INTO person (age,name) VALUES (33,'李四');
注:
- 在SQL中字符串的字面量使用**單引號(hào)(‘’)**括起來。
- VALUES后面指定的值的類型,順序,個(gè)數(shù)要與前面指定的字段完全一致,且一一對(duì)應(yīng)
插入默認(rèn)值
當(dāng)插入一條記錄時(shí),表中某字段沒有指定時(shí),則是插入該字段的默認(rèn)值。若該字段沒有明確指定過默認(rèn)值時(shí),默認(rèn)值為NULL。
-- 例如
INSERT INTO person (name) VALUES ('王五')
-- 上述SQL中沒有指定age字段,此時(shí)該條記錄插入后,age使用該字段的默認(rèn)值NULL。
可以在創(chuàng)建表或后期修改表結(jié)構(gòu)時(shí),使用DEFAULT關(guān)鍵字為某個(gè)字段指定默認(rèn)值
-- 為person表中的age字段添加默認(rèn)值:20
ALTER TABLE person CHANGE age age INT(3) DEFAULT 20;-- 在創(chuàng)建表時(shí)為字段指定默認(rèn)值:
CREATE TABLE person(name VARCHAR(30) DEFAULT '無名氏',age INT(3) DEFAULT 20
)
修改表為age添加默認(rèn)值20
-- 此時(shí)插入后的趙六記錄中age應(yīng)當(dāng)已經(jīng)采取了指定的默認(rèn)值:20
INSERT INTO person(name) VALUES('趙六');
全列插入
在INSERT語句中沒有指定字段名時(shí)就是全列插入,此時(shí)需要注意VALUES子句中指定的值的個(gè)數(shù),順序,類型必須與表中定義時(shí)指定的字段一致。
例
INSERT INTO person VALUES('錢七',38)-- 若想使用某個(gè)字段的默認(rèn)值,可以使用DEFAULT關(guān)鍵字表達(dá)
INSERT INTO person VALUES('錢七',DEFAULT)-- 若希望插入NULL值,可以使用NULL表達(dá)
INSERT INTO person VALUES('錢七',NULL)-- 下面是錯(cuò)誤的情況:
INSERT INTO person VALUES('錢七') 列的個(gè)數(shù)不匹配
INSERT INTO person VALUES(22,'錢七') 列的類型不匹配
查詢插入
查詢另一張表的數(shù)據(jù)插入到person表
INSERT INTO person SELECT name,age FROM user
UPDATE 修改數(shù)據(jù)
-- 語法
UPDATE 表名 SET 字段1=新值1[,字段2=新值2,...] [WHERE 過濾條件]-- 例子 當(dāng)缺少WHERE子句時(shí),數(shù)據(jù)庫會(huì)將person表中每條記錄的age字段都改為15
UPDATE person SET age=15
修改指定的記錄
僅將滿足WHERE條件的記錄進(jìn)行修改。
-- 將張三的年齡修改為22歲
UPDATE person SET age=22 WHERE name='張三'-- 只要滿足WHERE條件的記錄都會(huì)被修改。
UPDATE person
SET age=36
WHERE age=15
WHERE子句常用的條件
=,>,>= >,<,<=,<>(不等于:<>。實(shí)際上!=也可以用。)
-- 例子1 將年齡大于35歲的人年齡修改為30
UPDATE person
SET age=30
WHERE age>35-- 例子2 將person表中每個(gè)人的年齡漲一歲
UPDATE person
SET age=age+1
修改多個(gè)字段的值
-- 例子 將'李四'的名字改為'李老四'并且年齡改為50
UPDATE person
SET name='李老四',age=50
WHERE name='李四'
DELETE 刪除數(shù)據(jù)
-- 語法
DELETE FROM 表名 [WHERE 過濾條件]
注:DELETE語句中通常都要添加WHERE條件,否則是清空表操作!
--例子1 刪除'李老四'
DELETE FROM person
WHERE name='李老四'-- 例子2 刪除年齡大于30的人
DELETE FROM person
WHERE age>30
清空表操作
DELETE FROM person
處理DELETE可以刪除表的數(shù)據(jù),還有一個(gè)TRUNCATE
也可以清空表,但是并不常用,如果要使用最好查詢這個(gè)關(guān)鍵字的用法和使用后果
DQL
DQL語言詳細(xì)名稱為data query language,是數(shù)據(jù)查詢語言,用來查詢表中數(shù)據(jù)的。
主要需要認(rèn)識(shí)的關(guān)鍵字如下:SELECT
-- 基本語法
SELECT 字段1, 字段2
FROM 表名
WHERE 條件表達(dá)式;-- 例子 查詢person表中年齡為16的數(shù)據(jù),且只展示name、sex、age字段
SELECT name, sex, age
FROM person
WHERE age = 16;
本章只是做介紹,所以并不會(huì)深入講解DQL的其他關(guān)鍵字,例如:DISTINCT
、GROUP BY、HAVING、ORDER BY、LIMIT
TCL
TCL語言詳細(xì)名稱為transaction control lauguage,是事務(wù)控制語言,用來保證一些列數(shù)據(jù)庫操作具有原子性,隔離性,一致性,持久性
主要需要認(rèn)識(shí)的關(guān)鍵字如下:COMMIT
、ROLLBACK
事務(wù)需要在對(duì)數(shù)據(jù)庫有一定了解后再去深入了解。
DCL
DCL語言詳細(xì)名稱為data control language,數(shù)據(jù)控制語言,進(jìn)行數(shù)據(jù)庫管理操作的,比如用戶創(chuàng)建,權(quán)限分配等,是DBA經(jīng)常使用的操作,DCL通常是用來確保使用合適的權(quán)限控制來保護(hù)數(shù)據(jù)庫的安全性
主要需要認(rèn)識(shí)的關(guān)鍵字如下:GRANT
、REVOKE
授予用戶權(quán)限
-- 語法
GRANT 權(quán)限 ON 數(shù)據(jù)庫名[.表名] TO '用戶名'@'主機(jī)名';
其中權(quán)限可以有:ALL PRIVILEGES
或具體的權(quán)限如 SELECT
, INSERT
, UPDATE
等
-- 例子
GRANT SELECT,INSERT ON mydatabase.mytable TO 'pp'@'localhost';
撤銷用戶權(quán)限
-- 語法
REVOKE 權(quán)限 ON 數(shù)據(jù)庫名[.表名] TO '用戶名'@'主機(jī)名';
其中權(quán)限可以有:ALL PRIVILEGES
或具體的權(quán)限如 SELECT
, INSERT
, UPDATE
等
-- 例子
REVOKE SELECT,INSERT ON mydatabase.mytable TO 'pp'@'localhost';