数据库常用操作(未完待续)
1.數(shù)據(jù)庫建立在計算機上的存儲設備上,按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù),可以對其進行操作,不僅僅是文本,也可以是圖片等。
2.特點:
- 數(shù)據(jù)共享
- 減少冗余
- 數(shù)據(jù)獨立
- 數(shù)據(jù)視線集中控制
- 數(shù)據(jù)一致性
- 故障恢復
3.它由軟件和硬件組成,硬件主要存儲數(shù)據(jù)庫中的數(shù)據(jù),軟件主要包括操作系統(tǒng)以及應用程序。
-----------------------
問題1:
mysql在按裝過的情況下,無法正確安裝,處理辦法
(1)將MySQL目錄刪除掉
(2)將注冊表中的數(shù)據(jù)刪除
一般可以解決
安裝時候的說明:
Typical:只安裝MySQL服務器.MySQL命令行客戶端和命令使用程序
Custom:自定義安裝
Complete:安裝所有組件
--------------
4.MySQL啟動
net stop mysql
net start mysql
5.使用
mysql -uroot -p
exit;
6.常用命令
clear:清除當前輸入語句
connect:鏈接到服務器,并顯示結(jié)果
delimiter:設置語句分隔符
print:打印當前命令
source:執(zhí)行腳本
charset:切換到另一個字符集
-----------------------------
-----------------------------
-----------------------------
-----------------------------
-------- 第二章 -------------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
1.數(shù)值類型
tinyint 1
smallint 2
mediumint 3
int/integer 4
bigint 8
float 4
double 8
decimal(M,D) 變長,整數(shù)部分和小數(shù)部分計算
2.字符串類型
- char和varchar類型
- char用于定長字符串,必須使用圓括號指定,最大為255,超過將會被切斷
- varchar:是一個變長的,范圍是0~65535,char不足時使用空格來加,varchar認為是最大值,如果超過了指定的長度也會被刪除掉
-TEXT和BLOB類型
- 超過255的將會提供了text和blob,根據(jù)存儲的數(shù)據(jù)的大小,會有不同的子類型。
具體如下:
- Text或者blob存儲和檢索過程不存在大小寫變換,他們會將最大的截斷,如果不是空格,將會被刪除,并拋出警告。
- 都不可以有默認值
- 在保存或者是text咧的時候,將不會被截斷
- 日期類型
- YEAR 1 YYYY 超過就會變?yōu)?000 兩位就會轉(zhuǎn)為4位
- DATE 4 YYYY-MM-DD
- Time 3 HH:MM:SS DX24+HH current_time:當前時間
- DATETIME 8 YYYY-MM-DD HH:MM:SS
- TIMESTAMP 4 YYYY-MM-DD HH:MM:SS
3.基本操作
- 修改編碼
```mysql
ALTER DATABASE 數(shù)據(jù)庫名稱 DEFAULT CHARACTER SET 編碼格式 COLLATER 編碼格式_bin
```
- 查看數(shù)據(jù)庫表
```mysql
show create table 表名
格式
show create table 表名\G
```
- 修改表名
```mysql
ALTER TABLE 原表名 RENAME to 新表名;
```
- 修改字段
```mysql
ALTER TABLE 表名 CHANGE 原字段 新字段名 新數(shù)據(jù)類型;
```
- 修改字段類型
```mysql
ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型;
```
-=======
- 增加字段
```mysql
ALTER TABLE 表名 ADD 新字段名 數(shù)據(jù)類型;
```
- 刪除字段
```mysql
ALTER TABLE 表名 DROP 字段名;
```
-----------------------------
-----------------------------
-----------------------------
-----------------------------
---- 第三章 數(shù)據(jù)完整性 ------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
1.數(shù)據(jù)完整性
- 主鍵約束
- 主鍵用于標識一個某一條記錄
- 一個表中引用來自另一個特色記錄,一個主鍵可以由多個關(guān)鍵字組成。
- 使用主鍵
```mysql
ALTER TABLE 表名 ADD PRIMARY KEY("列名");
或者
oid int PRIMARY KEY,
兩個主鍵的添加
PRIMARY KEY(oid,pid);
```
- 唯一約束
- 只能有一個值
- 使用
```mysql
phone varchar(20) unique
或者
ALTER TABLE 表名 ADD UNIQUE(列名);
```
- 自增長
```mysql
字段名 數(shù)據(jù)類型 AUTO_INCREMENT,
或
ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 PRIMARY KEY AUTO_INCREMENT;
```
2,索引
索引是一種單獨、物理對數(shù)據(jù)對數(shù)據(jù)庫中一列或者多咧的值進行排序存儲,索引包括普通索引、唯一索引、全文索引、單列索引、多列索引、
空間索引、組合索引等
- 普通索引 只會增加查找速度 因此只需要對那些經(jīng)常出現(xiàn)的查詢條件或者排序條件中的數(shù)據(jù)進行創(chuàng)建索引
創(chuàng)建方式
```mysql
INDEX(name)
或
CREATE INDEX test_2 ON 表名(字段)
```
- 唯一索引 他可以被索引的列,重復的值,我們也可以做成一個唯一的值
```mysql
unique index (字段名)
或
create unique index 索引名 on 表名(字段名)
```
3.域完整性
對關(guān)系中的單元格進行約束,域代表單元格,對列的約束
- 非空
```mysql
NOT NULL
或
ALTER TABLE test6 MODIFY id INT NOT NULL;
```
- 默認約束
```mysql
字段名 數(shù)據(jù)類型 DEFAULT 默認值
或
ALTER TABLE test MODIFY 字段名 數(shù)據(jù)類型 DEFAULT 默認值;
```
4.引用完整性
對實體之間的關(guān)系
外健的概念:引用另一個表中的一列或者是多列,引用的列應該具有主鍵約束和唯一約束,用于兩個表之間的鏈接。
```mysql
FOREIGN KEY(stu_id) REFERENCES student(stu_id);
或
ALTER TABLE 表名 ADD FOREIGN KEY(外鍵字段) REFERENCES 主表表名(主表字段名);
```
效果就是主表沒有數(shù)據(jù),從表是沒有數(shù)據(jù)的。
從表引用主表無法刪除數(shù)據(jù)
-----------------------------------------------
刪除外鍵約束
```mysql
ALTER TABLE student DROP FOREIGN KEY 主鍵名
```
-----------------------------
-----------------------------
-----------------------------
-----------------------------
----- 第三章 多表查詢 -------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
1.表之間的關(guān)系
一對一 一夫一妻
```mysql
create Table user(
uid INT PRIMARY KEY,
uname VARCHAR(20),
uaddress VARCHAR(50)
);
一對一的時候,可以直接使用主鍵,因為主鍵唯一的
create Table user_text(
uid INT PRIMARY KEY,
utext VARCHAR(100),
FOREIGN KEY(uid)REFERENCES user(uid)
);
```
一對多
```mysql
create Table student (
stu_id int PRIMARY KEY,
stu_name varchar(20)
);
一對多就重新創(chuàng)建一個字段專門作為外鍵
create Table score(
sco_id int PRIMARY KEY,
score INT,
stu_id INT,
FOREIGN KEY(stu_id)REFERENCES student(stu_id);
);
```
多對一
多對多
```mysql
它做的時候,需要使用第三個表
create Table teacher(
tea_id INT PRIMARY KEY,
tea_name VARCHAR(20)
);
create Table student(
stu_id INT PRIMARY KEY,
stu_name VARCHAR(20)
);
create Table teacher(
tea_id INT,
stu_id INT,
FOREIGN KEY(tea_id) REFERENCES teacher(tea_id),
FOREIGN KEY(stu_id) REFERENCES stu(stu_id)
);
```
2.合并結(jié)果集
UNION / UNION ALL
結(jié)果并集
```mysql
select *from stu1 union slect *from stu2;
```
區(qū)別就是一個會過濾掉重復一個不會過濾掉重復。
3.鏈接查詢
迪卡爾查詢 將左右的都查詢
```mysql
slect 查詢字段 from 表1 cross join 表2;
```
內(nèi)鏈接查詢 查詢只有滿足條件的行
```mysql
select 查詢字段 form 表1 inner join 表2 on 表1.字段 = 表2.字段 where 查詢條件;
```
?
?
-----------------------------
-----------------------------
-----------------------------
-----------------------------
----- 第四章 常用函數(shù) ------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
ASCII(str) 最左邊的ASCII代碼
CONCAT(str1,str2,……,strn) 鏈接字符串
INSERT(str , str , num ,instr) 1開始,數(shù)num個
LEFT(str , pos) 左側(cè)開始指定個數(shù)的字符
RIGHT(str , num) 右側(cè)開始指定個數(shù)的字符
?
-----------------------------
-----------------------------
-----------------------------
-----------------------------
------- 第五章 視圖 --------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
視圖:是虛擬的表,和真實的表類似。
創(chuàng)建視圖
```mysql
一個表創(chuàng)建視圖
create view view_emp(id,name,……)
As
SELECT ID,NAME,…… FROM EMP;
兩個表上創(chuàng)建視圖
CREATE VIEW VIEW_DEMO(ID,AGE,NAME,GENDER)
AS
SELECT A.ID,A,AGE,B.NAME,B.GENDER FROM DEMO01 A,DEMO02 B;
```
查看試圖
SELECT SHOW_VIEW_DEMO FORM MYSQL.USER WHERE USER='ROOT';查看用戶是否有試圖權(quán)限
查看試圖 DESCRIBE 視圖名; DESC 視圖名;
-----主要是字段---------
SHOW TABLE STATUS查看試圖的基本信息,
SHOW TABLE STATUS LIKE '視圖名';
--------試圖相關(guān)信息---------
SHOW CREATE VIEW 視圖名;
-------- 創(chuàng)建試圖的語句和編碼等信息 -----------
修改試圖
修改數(shù)據(jù)庫中已經(jīng)存在的
使用create or replace view 語句修改試圖。必須確保有刪除試圖的權(quán)限。
```mysql
SELECT DROP_PRIV FROM MYSQL.USER WHERE USER='ROOT';
create or replace view view_detail(id,name,sex) AS
SELECT ID,NAME,SEX FROM EMP;
```
使用ALTER修改
```mysql
ALTER VIEW VIEW_DEMO
AS
SELECT NAME,AGE FROM EMP;
```
更新試圖
試圖是虛擬出來的,在試圖上的操作,也就是在表上的操作。刪除也是一樣。
刪除試圖
DROP VIEW IF EXISTS VIEW_EMP_DETAIL;
?
-----------------------------
-----------------------------
-----------------------------
-----------------------------
----- 第liu章 存儲過程 ------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
存儲過程
?
-----------------------------
-----------------------------
-----------------------------
-----------------------------
-------- 第七章 其他 --------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
數(shù)據(jù)庫范式:
第一范式:每個字段都是不可分割的基本數(shù)據(jù)項,同一個字段不可以有多個值。
第二范式:滿足第二的必須滿足第一,每個實例可以被唯一的區(qū)分。
數(shù)據(jù)庫指定端口的使用:
```mysql
mysql -h 127.0.0.1 -P 3306 -u root -p
ip 端口 用戶名 密碼
```
亂碼解決方法:
亂碼原因是因為使用了latin1,但字節(jié)編碼,
處理方式:
- 在登入的時候進行設置
```mysql
mysql --default-character-set=字符集 -h 服務器 -P 端口號 -u -p
```
- 查看編碼
SHOW VARIABLES LIKE '%CHAR%'
查看結(jié)束之后再設置編碼
```MYSQL
SET CHARACTER_SET_CLIENT = GBK
SET CHARACTER_SET_CONNECTION = GBK
SET CHARACTER_SET_DATABASE = GBK
SET CHARACTER_SET_RESULT = GBK
SET CHARACTER_SET_SERVER = GBK
SET COLLATION_CONNECTION = GBK_CHINESE_CI
SET COLLATION_DATEBASE = GBK_CHINESE_CI
SET COLLATION_SERVER = GBK_CHINESE_CI
```
修改密碼:
```mysql
mysqladmin -u root password "新密碼"
```
創(chuàng)建數(shù)據(jù)庫是提供編碼
```mysql
創(chuàng)建數(shù)據(jù)庫 指定默認的編碼 數(shù)據(jù)庫校驗,大小寫不敏感
CREATE DATABASE DATABASENAME DEFAULT CHARACTER SET UTF8 COLLATER UTF8_GENERAL_CI;
UTF8_GENERAL_CS:大小寫敏感
utf8_bin:將字符串用二進制存儲
```
數(shù)據(jù)庫的備份和恢復
```mysql
可以將其備份成為一個文件
步驟:
(1)首先查詢需要備份的表結(jié)構(gòu)
(2)在文本中生成一個create語句
(3)將表中的記錄變?yōu)橐粋€insert語句。
```
操作
- mysqldump 命令備份數(shù)據(jù)庫,先將其內(nèi)存中的數(shù)據(jù)刷到數(shù)據(jù)庫文件中,同時鎖定表
flush tables with read lock 將其鎖住,禁止各種更新操作,但是可查詢。
- MySQLdump用于轉(zhuǎn)存數(shù)據(jù)庫命令,主要是生成一個sql文件,需要制定到處的目錄
```mysql
mysqldump -u root -p 表名 > 文件名
```
備份多個表
```mysql
mysqldump -u root -p --databases test mysql > 文件名
```
備份所有
```mysql
mysqldump -u root -p -all-databases > 文件名
```
使用復制數(shù)據(jù)庫的方式進行備份
恢復數(shù)據(jù)庫
```mysql
mysql -u root -p databases < 文件名
```
操作,首先創(chuàng)建一個數(shù)據(jù)庫,然后將其導入。
恢復方式2
```mysql
source 腳本文件
```
數(shù)據(jù)庫導入導出
將數(shù)據(jù)庫中表導出到一個txt文件中
```mysql
SELECT 字段 FROM INTO OUTFILE 'PATH/FILENAME'
```
案例:
```mysql
SELECT * FROM STUDENT INTO OUTFILE 'C:\STUDENT.TXT'
```
兩個服務器之間數(shù)據(jù)的導入和導出
```mysql
MYSQLDUMP -U ROOT -P DATABASE_NAME MYSQL -H ip DATABASE_NAME;
```
導入數(shù)據(jù)
```mysql
LOAD DATA LOCAL INFILE 'dump.txt' INFO TABLE mytbl;
```
使用import導入
```mysql
mysqlimport -u root -p --local databases_name dump.txt
```
數(shù)據(jù)庫編程
在開發(fā)過程中一個功能調(diào)用多次,為一組提供結(jié)果集
- 存儲過程
- 增強sql語言功能性和靈活性,在存儲過程中書寫各種代碼,完成各種復雜的運算
- 可以被調(diào)用多次
- 較快的執(zhí)行速度
- 減少網(wǎng)絡流量
- 增強安全性
創(chuàng)建過程
- 創(chuàng)建語句
```mysql
CREATE PROCEDURE 過程名 (過程參數(shù))
BEGIN
過程體
END
```
執(zhí)行
```mysql
CALL 過程名();
```
案例:
```mysql
CREATE PROCEDURE sp_1()
BEGIN
SELECT * FROM stu;
END;
```
```mysql
CALL sp_1();
```
----------------------------
```mysql
CREATE PROCEDURE sp_1(IN student_no CHAR(10))
BEGIN
SELECT * FROM STUDENT WHERE STU_NO = student_no;
END
```
```mysql
CALL SP1('383')
```
帶有OUT的過程
```mysql
CREATE PROCEDURE sp_1(OUT name VARCHAR(20))
BEGIN
SELECT st_name FROM student;
END
```
```mysql
CALL sp_1(@name)
```
?
-----------------------------
-----------------------------
-----------------------------
-----------------------------
-------- 第ba章 安全 --------
-----------------------------
-----------------------------
-----------------------------
-----------------------------
用戶一般分為兩類,一類是root管理員,一類是普通用戶
- 創(chuàng)建普通用戶
```mysql
GRANT privileges ON database.table to 'USERNAME' @ 'hostname' [identified BY [PASSWORD] 'password'];
用戶具有的權(quán)限 權(quán)限指定在特定的表上
案例:
GRANT SELECT ON database.table TO 'KW' @ 'LOCALHOST' IDENTIFIED BY '123456';
CREATE USER 'username' @ 'hostname' IDENTIFIED BY 'abc123456';
CREATE USER 'username' @ 'localhost' IDENTIFIED BY 'abc123456';
使用insert
INSERT INTO MYSQL.USER(HOST,USER,PASSWD) VALUES(xx,xx,XX);
```
刪除用戶
```mysql
DROP USER 'USERNAME' @ 'HOSTNAME'
DELETE FROM MYSQL.USER WHERE HOST='LOCALHOST' AND user="USERNAME"
```
修改密碼:
使用UPDATE
```mysql
UPDATE MYSQL.USER SET PASSWORD ('NEW_password') where user = 'username' and Host = 'hostname'
mysqladmin -u root -p password 123456;
SET PASSWORD = PASSWORD(NEW_password);
```
?
轉(zhuǎn)載于:https://www.cnblogs.com/kw28188151/p/10843112.html
總結(jié)
以上是生活随笔為你收集整理的数据库常用操作(未完待续)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二分图模板(女生赛要用)
- 下一篇: Vi编辑器中查找替换