日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql数据库基础 博客园_MySQL数据库基础

發布時間:2024/7/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据库基础 博客园_MySQL数据库基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據庫的一些概念題:

DB DBMS 和DBS三者之間的關系

DBS(數據庫系統) 包含DB(數據庫)和DBMS(數據庫管理系統)

DB:是指datebase(數據庫)

DBS:是指datebase systerm (數據庫系統)

DBMS:是指datebase mangement systerm(數據庫管理系統)

區別:數據庫就是存放數據的倉庫,數據庫管理系統就是用來管理數據庫的,其中數據庫系統是一個通稱,包括數據庫、數據庫管理系統、數據庫管理人員等的統稱,是最大的范疇。

常見存儲引擎的類型

需改表alter

4.修改表結構:

語法: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 舊字段名 新字段名 新數據類型 [完整性約束條件…];

外鍵的設置

在員工表里面先設置?emp_id的字段然后再關聯?emp表里面的字段

1、安裝mysql和navicat

2、Mysql數據語法學習

數據庫的種類:關系型數據庫和非關系型數據庫

mysql數據庫的操作

查看數據庫

show databases;

show create database db1;selectdatabase();

選擇數據庫

USE 數據庫名

刪除數據庫

DROP DATABASE 數據庫名;

修改數據庫

alter database db1 charset utf8;

查入數據insert

1. 插入完整數據(順序插入)

語法一:

INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);

語法二:

INSERT INTO 表名 VALUES (值1,值2,值3…值n);2. 指定字段插入數據

語法:

INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);3. 插入多條記錄

語法:

INSERT INTO 表名 VALUES

(值1,值2,值3…值n),

(值1,值2,值3…值n),

(值1,值2,值3…值n);4. 插入查詢結果

語法:

INSERT INTO 表名(字段1,字段2,字段3…字段n)

SELECT (字段1,字段2,字段3…字段n) FROM 表2

WHERE …;

更新數據UPDATE

語法:

UPDATE 表名 SET

字段1=值1,

字段2=值2,

WHERE CONDITION(條件);

示例:

UPDATE mysql.user SET password=password(‘123’)

where user=’root’ and host=’localhost’;

一定要加where

mysql表的操作

表的數據類型:

#1. 數字:

整型:tinyinitintbigint

小數:float:在位數比較短的情況下不精準double:在位數比較長的情況下不精準0.000001230123123123存成:0.000001230000

decimal:(如果用小數,則用推薦使用decimal)

精準

內部原理是以字符串形式去存

#2. 字符串:char(10):簡單粗暴,浪費空間,存取速度快

root存成root000000

varchar:精準,節省空間,存取速度慢

sql優化:創建表時,定長的類型往前放,變長的往后放

比如性別 比如地址或描述信息>255個字符,超了就把文件路徑存放到數據庫中。

比如圖片,視頻等找一個文件服務器,數據庫中只存路徑或url。

#3. 時間類型:

最常用:datetime

#4. 枚舉類型與集合類型enum('male','female')set('play','music','read','study')

MariaDB [db1]> create table consumer(

-> name varchar(50),

-> sex enum('male','female'),

-> level enum('vip1','vip2','vip3','vip4','vip5'), #在指定范圍內,多選一

-> hobby set('play','music','read','study') #在指定范圍內,多選多

-> );

表的約束

#1、建立表關系:

#先建被關聯的表,并且保證被關聯的字段唯一 #----- 父表--------create table dep(

idintprimary key,

namechar(16),

commentchar(50)

);

部門表和員工表 foreign key設置在員工表

#再建立關聯的表

create table emp(

idintprimary key,

namechar(10),

sexenum('male','female'),

dep_idint,

foreign key(dep_id) references dep(id)

on delete cascade # 刪除同步 只要被關聯的 ,關聯的 也刪除 解散it部門,其他關聯it部門的員工也刪除

on update cascade # 更新同步,

);

表與表之間的關系

分析步驟:

#1、先站在左表的角度去找

是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的一個字段foreign key(外鍵) 右表一個字段(通常是id)

#2、再站在右表的角度去找

是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的一個字段foreign key 左表一個字段(通常是id)

#3、總結:

#多對一:

如果只有步驟1成立,則是左表多對一右表

如果只有步驟2成立,則是右表多對一左表

#多對多

如果步驟1和2同時成立,則證明這兩張表時一個雙向的多對一,即多對多,需要定義一個這兩張表的關系表來專門存放二者的關系

#一對一:

如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,就是在左表foreign key右表的基礎上,將左表的外鍵字段設置成unique即可

mysql字段的操作

mysql表的查詢

單表查詢和多表查詢

select count(學號) as “總人數” FROM student;

這個as可以寫也可以不寫

單表查詢:

http://www.cnblogs.com/linhaifeng/articles/7267592.html

1.單表查詢的語法2.關鍵字的執行優先級(重點)3.簡單查詢4.where約束5.分組查詢:group by 在where之后查詢6.having 過濾7.查詢排序:order by

8.限制查詢得記錄數:limit9.使用正則表達式查詢

多表查詢:

SELECT DISTINCT FROM

JOIN ONWHEREGROUP BYHAVINGORDER BYLIMIT

內連接:只取兩張表的共同部分select * from employee inner join department on employee.dep_id =department.id ;

左連接:在內連接的基礎上保留左表的記錄select * from employee left join department on employee.dep_id =department.id ;

右連接:在內連接的基礎上保留右表的記錄select * from employee right join department on employee.dep_id =department.id ;

全外連接:在內連接的基礎上保留左右兩表沒有對應關系的記錄select * from employee full join department on employee.dep_id =department.id ;select * from employee left join department on employee.dep_id =department.id

unionselect * from employee right join department on employee.dep_id = department.id ;

7.4?使用事務保證數據完整性

事務就是將一組SQL語句放在同一批次內去執行,如果一個SQL語句出錯,則該批次內的所有SQL都將被取消執行。

注意:

MySQL事務處理只支持InnoDB和Berkeley DB數據表類型

ACID,指數據庫事務正確執行的四個基本要素的縮寫。

包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

一個支持事務(Transaction)的數據庫,必須要具有這四種特性,否則在事務過程(Transaction processing)當中無法保證數據的正確性。

使用場景:

銀行的交易系統

原子性:執行事務要么都成功,要么都不成功

一致性:執行后,保存數據的一致性

隔離性:事務之間相互獨立,互不影響

持久性:數據永遠存儲在數據庫中

start transaction = begin等效

start transaction;

update user set balance=900 where name='wsb'; #買支付100元

update user set balance=1010 where name='egon'; #中介拿走10元

update user set balance=1090 where name='ysb'; #賣家拿到90元

commit;#出現異常,回滾到初始狀態

start transaction;

update user set balance=900 where name='wsb'; #買支付100元

update user set balance=1010 where name='egon'; #中介拿走10元

uppdate user set balance=1090 where name='ysb'; #賣家拿到90元,出現異常沒有拿到

rollback; #回滾到原來的狀態

commit; #只有提交了,事務操作才完成

問題:有沒有遇到臟讀問題,怎么解決,用事務(隔離級別處理),事務是什么?

查看默認事務隔離級別

select @@tx_isolation;

如何關閉和開啟MySQL的自動提交?

在MySQL中執行命令時,通常都直接被確定提交了。也就是說用戶不用意識此事,所有的命令都會被自動COMMIT。特別是當存儲引擎為MyISAM的情況下,本身它是不支持事務處理的,只要執行了命令,所有的命令部會被提交。

這樣的默認自動提交的功能就被稱為自動提交功能。自動提交功能默認被置為ON的狀態。但是,如果存儲引擎為InnoDB 時,當執行了START TRANSACTION或BEGIN命令(MySQL事務處理-刪除后回滾)后,將不會自動提交了,只有明確執行了COMMIT命令后才會被提交,在這之前可以執行ROLLBACK 命令回滾更新操作。

用戶可以將自動提交功能強制置為OFF。這樣用戶執行SQL語句后將不會被提交了,而執行COMMIT命令才提交,執行ROLLBACK命令回壤。

下面是將自動提交功能置為ON以及置為OFF的具體語法。

將自動提交功能置為ON

SET AUTOCOMMIT=0;

將自動提交功能置為OFF

SET AUTOCOMMIT=1;

我們將演示自動提交功能設置為OFF后,會出現的什么樣的變化。置為OFF,我們向表user里插入一條數據后,看看是否能回滾。

將自動提交功能設置為OFF,執行結果如下。

mysql> SET AUTOCOMMIT=0;

Query OK, 0 rows affected (0.00 sec)

View Code

MySQL的事務處理實現流程是什么?

如果存儲引擎為InnoDB 時,不需要

將自動提交功能置為ON

SET AUTOCOMMIT=0;

1、關閉自動提交2、開始事務3、執行SQL語句操作4、要么rollback 要么commit

如果存儲引擎為InnoDB 時,當執行了START TRANSACTION或BEGIN命令(MySQL事務處理-刪除后回滾)后,將不會自動提交了,只有明確執行了COMMIT命令后才會被提交,在這之前可以執行ROLLBACK 命令回滾更新操作。

5、set autocommit=1;把提交變為初試狀態

7.5?使用DQL命令查詢數據

mysql語言的分類

SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。1. 數據查詢語言DQL

數據查詢語言DQL基本結構是由SELECT子句,FROM子句,WHERE

子句組成的查詢塊:

SELECTFROMWHERE

2.數據操縱語言DML

數據操縱語言DML主要有三種形式:1) 插入:INSERT2) 更新:UPDATE3) 刪除:DELETE3. 數據定義語言DDL

數據定義語言DDL用來創建數據庫中的各種對象-----表、視圖、

索引、同義詞、聚簇等如:

CREATE TABLE/VIEW/INDEX/SYN/CLUSTER| | | | |表 視圖 索引 同義詞 簇

DDL操作是隱性提交的!不能rollback4. 數據控制語言DCL

數據控制語言DCL用來授予或回收訪問數據庫的某種特權,并控制

數據庫操縱事務發生的時間及效果,對數據庫實行監視等。如:1) GRANT:授權。2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一點。

回滾---ROLLBACK

回滾命令使數據庫狀態回到上次最后提交的狀態。其格式為:

SQL>ROLLBACK;3) COMMIT [WORK]:提交。

在數據庫的插入、刪除和修改操作時,只有當事務在提交到數據

庫時才算完成。在事務提交前,只有操作數據庫的這個人才能有權看

到所做的事情,別人只有在最后提交完成后才可以看到。

提交數據有三種類型:顯式提交、隱式提交及自動提交。下面分

別說明這三種類型。

(1) 顯式提交

用COMMIT命令直接完成的提交為顯式提交。其格式為:

SQL>COMMIT;

(2) 隱式提交

用SQL命令間接完成的提交為隱式提交。這些命令是:

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,

EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

(3) 自動提交

若把AUTOCOMMIT設置為ON,則在插入、修改、刪除語句執行后,

系統將自動進行提交,這就是自動提交。其格式為:

SQL>SET AUTOCOMMIT ON;

View Code

練習:創建學生表、教師表、課程表、成績表

1、創建學生表:

create table student(學號 int primary key not null ,姓名 char null,年齡 int not null,性別 enum('男','女'))

2、創建教師表:

create table teacher(教師編號 int primary key not null,教師姓名 char)

3、創建課程表:與教師編號一對多關系

create table class(課程編號 int primary key not null,

課程名 char,教師編號 int,

foreign key(教師編號) references teacher(教師編號) on delete cascade on update cascade);

4、創建成績表:成績對應多個學生,成績對應多個課程

create table score(學號 int,課程編號 int,成績 int,foreign key(學號) references student(學號) on delete cascade on update cascade,

foreign key(課程編號) references class(課程編號) on delete cascade on update cascade);

插入數據:

插入學生數據:

insert into student(學號,姓名,年齡,性別) values(1001,'張三',10,'男'),(1002,'李四',11,'女')

總結

以上是生活随笔為你收集整理的mysql数据库基础 博客园_MySQL数据库基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。