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数据库基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 字符串第一个字符_深入Java
- 下一篇: gitbook mysql_使用Gitb