目錄
一、數(shù)據(jù)庫(kù)的相關(guān)了解
1)數(shù)據(jù)庫(kù)的概念?
數(shù)據(jù)(Data)
表
數(shù)據(jù)庫(kù)系統(tǒng)
2)數(shù)據(jù)庫(kù)系統(tǒng)發(fā)展史
第一代數(shù)據(jù)庫(kù)
第二代數(shù)據(jù)庫(kù)
第三代數(shù)據(jù)庫(kù)
當(dāng)今主流數(shù)據(jù)庫(kù)介紹
2)數(shù)據(jù)庫(kù)的分類?
關(guān)系數(shù)據(jù)庫(kù)
非關(guān)系型數(shù)據(jù)庫(kù)
非關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
二、mysql的yum安裝與源碼編譯安裝??
1)源碼編譯安裝mysql
2)yum安裝 mysql5.7?
三、mysql的數(shù)據(jù)類型?
1)常用的數(shù)據(jù)庫(kù)類型
2)char與varchar的區(qū)別
四、查看數(shù)據(jù)庫(kù)結(jié)構(gòu)
1)查看當(dāng)前服務(wù)器中的數(shù)據(jù)庫(kù)
2)查看數(shù)據(jù)庫(kù)中包含的表
方法一:
方法二:?
3)查看表的結(jié)構(gòu)(字段)
方式一:先切換庫(kù),在查看指定表的字段
方式二:直接查看表結(jié)構(gòu)
四、SQL語(yǔ)句
1)SQL中的名詞介紹
2)SQL語(yǔ)言規(guī)范
數(shù)據(jù)庫(kù)對(duì)象和命名:
3)SQL語(yǔ)言分類
五、Mysql數(shù)據(jù)庫(kù)基本的增刪改查命令?
1)創(chuàng)建數(shù)據(jù)庫(kù)
2)創(chuàng)建表?
3)刪除指定的數(shù)據(jù)表
4)刪除指定的數(shù)據(jù)庫(kù)
六、管理表中數(shù)據(jù)記錄
1)向數(shù)據(jù)表中插入新的數(shù)據(jù)記錄
2)查詢數(shù)據(jù)記錄
3)修改、更新數(shù)據(jù)表中的數(shù)據(jù)記錄
4)在數(shù)據(jù)表中刪除指定的數(shù)據(jù)記錄
七、修改表名和表結(jié)構(gòu)
1)修改表名
2)擴(kuò)展表結(jié)構(gòu)(增加字段)
3)修改字段(列)名,添加唯一鍵?
?4)刪除字段
案例擴(kuò)展:
5)復(fù)制表結(jié)構(gòu)
方式一:創(chuàng)建新表,導(dǎo)入數(shù)據(jù)
方式二:復(fù)制表?
6)臨時(shí)表的創(chuàng)建
7)清除表的兩種方式比較
方式一:delete清空?
兩者區(qū)別:
七、Mysql中常見的約束?
保證數(shù)據(jù)的完整性和一致性
主鍵表與外鍵表的理解:
專業(yè)課程表
學(xué)生信息表
刪除外鍵步驟:
總結(jié)
一、數(shù)據(jù)庫(kù)的相關(guān)了解
1)數(shù)據(jù)庫(kù)的概念?
數(shù)據(jù)(Data)
- 描述事物的符號(hào)記錄
- 包括數(shù)字、文字、圖形、聲音、檔案記錄等
- 以“記錄”形式按統(tǒng)一的格式進(jìn)行存儲(chǔ)
表
- 將不同的記錄組織在一起
- 用來(lái)存儲(chǔ)具體數(shù)據(jù)
數(shù)據(jù)庫(kù)(database)
- 表的集合,是用來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
- 是實(shí)現(xiàn)對(duì)數(shù)據(jù)有效組織,管理和存取的系統(tǒng)軟件
- 數(shù)據(jù)的建立和維護(hù)功能,數(shù)據(jù)定義功能,數(shù)據(jù)操縱功能,數(shù)據(jù)庫(kù)的運(yùn)行管理功能,通信功能?
數(shù)據(jù)庫(kù)系統(tǒng)
- 是一個(gè)人機(jī)系統(tǒng),由硬件,os,數(shù)據(jù)庫(kù),DBMS ,應(yīng)用軟件和數(shù)據(jù)庫(kù)用戶組成
- 用戶可以通過DBMS 或則 應(yīng)用程序來(lái)操作數(shù)據(jù)庫(kù)?
2)數(shù)據(jù)庫(kù)系統(tǒng)發(fā)展史
第一代數(shù)據(jù)庫(kù)
- 自20世紀(jì)60年代起,第一代數(shù)據(jù)庫(kù)系統(tǒng)問世
- 是層次模型與網(wǎng)狀模型的數(shù)據(jù)庫(kù)系統(tǒng)
- 為統(tǒng)一管理和共享數(shù)據(jù)提供了有力的支撐
第二代數(shù)據(jù)庫(kù)
- 20世紀(jì)70年代初,第二代數(shù)據(jù)庫(kù)系統(tǒng)——關(guān)系數(shù)據(jù)庫(kù)開始出現(xiàn)
- 20世紀(jì)80年代初,IBM公司的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)DB2問世,開始逐步取代層次與網(wǎng)狀模型的數(shù)據(jù)庫(kù),成為行業(yè)主流
- 到目前為止關(guān)系數(shù)據(jù)庫(kù)仍占領(lǐng)數(shù)據(jù)庫(kù)應(yīng)用的主要地位
第三代數(shù)據(jù)庫(kù)
- 自20世紀(jì)80年代開始,適應(yīng)不同領(lǐng)域的新型數(shù)據(jù)庫(kù)系統(tǒng)不斷涌現(xiàn)
- 面向?qū)ο蟮臄?shù)據(jù)庫(kù)系統(tǒng),實(shí)用性強(qiáng)、適用面廣
- 20世紀(jì)90年代后期,形成了多種數(shù)據(jù)庫(kù)系統(tǒng)共同支撐應(yīng)用的局面
- 一些新的元素被添加進(jìn)主流數(shù)據(jù)庫(kù)系統(tǒng)中
當(dāng)今主流數(shù)據(jù)庫(kù)介紹
SQL Server(微軟公司產(chǎn)品)
- 面向Windows操作系統(tǒng)
- 簡(jiǎn)單、易用
Oracle (甲骨文公司產(chǎn)品)
- 面向所有主流平臺(tái)
- 安全、完善、操作復(fù)雜
DB2 (IBM公司產(chǎn)品)
- 面向所有主流平臺(tái)
- 大型、安全、完善
MySQL(甲骨文公司收購(gòu))
- 免費(fèi)、開源、體積小
2)數(shù)據(jù)庫(kù)的分類?
隨著時(shí)代的發(fā)展,當(dāng)今數(shù)據(jù)庫(kù)可分為兩大類:關(guān)系數(shù)據(jù)庫(kù)(SQL)和非關(guān)系數(shù)據(jù)庫(kù)(NO SQL)兩大類
關(guān)系數(shù)據(jù)庫(kù)
-
關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)是基于關(guān)系模型的數(shù)據(jù)庫(kù)系統(tǒng)、
-
關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)使用簡(jiǎn)單易懂的二維數(shù)據(jù)表
-
關(guān)系模型可用簡(jiǎn)單的“實(shí)體-關(guān)系”(E-R)圖來(lái)表示
-
E-R圖中包含了實(shí)體(數(shù)據(jù)對(duì)象)、關(guān)系和屬性三個(gè)要素
關(guān)系數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)是二維表格
在每個(gè)二維表格中
- 每一行稱為一條記錄,用來(lái)描述一個(gè)對(duì)象的信息
- 每一列成為一個(gè)字段,用來(lái)描述對(duì)象的一個(gè)屬性
非關(guān)系型數(shù)據(jù)庫(kù)
-
非關(guān)系數(shù)據(jù)庫(kù)也被稱為NoSQL(Not Only SQL)
-
存儲(chǔ)數(shù)據(jù)不以關(guān)系為依據(jù),不需要固定的表格式
非關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
- 可高并發(fā)讀寫
- 對(duì)海量數(shù)據(jù)依舊保持著高效率的存儲(chǔ)和訪問
- 具有高擴(kuò)展性和高可用性
二、mysql的yum安裝與源碼編譯安裝??
1)源碼編譯安裝mysql
---------------安裝環(huán)境包-----------------
確認(rèn)安裝 gcc 、 gcc-c++ 、make、cmake
ncurses-devel、(字符終端屏幕控制基本庫(kù))
bison、(語(yǔ)法分析器)
libaio-devel (支持同步I/O)的軟件包
yum -y install gcc gcc-c++ make ncurses ncurses-devel bison cmake libaio-devel
yum install autoconf -y ####安裝5.6版本是需要安裝autoconf庫(kù)
---------------添 加mysql用戶并加入到mysql組----------------
useradd -s /sbin/nologin mysql
mkdir -p /usr/local/mysql
tar zxvf mysql-5.5.24.tar.gz -C /opt/
cd mysql-5.5.24
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306
指定安裝路徑
指定家目錄 sock 數(shù)據(jù)庫(kù)連接文件
指定字符集
指定字符編碼
擴(kuò)展性的字符集 支持其他的字符集
開啟各種功能的存儲(chǔ)引擎機(jī)
存儲(chǔ)引擎機(jī)
存儲(chǔ)引擎機(jī)
支持readline程序平臺(tái) 讀取數(shù)據(jù)按行讀取,一行是一個(gè)對(duì)象
本地寫入文件,方便導(dǎo)入導(dǎo)出
數(shù)據(jù)庫(kù)的家目錄 數(shù)據(jù)庫(kù)存放的路徑
指定管理用戶和端口號(hào)
make -j 2 && make install
------如果報(bào)錯(cuò),清空緩存文件-如果正??珊雎?------
find -name CMakeCache.txt
rm -f ./CMakeCache.txt
---------------------------------
chown -R mysql:mysql /usr/local/mysql
export PATH=$PATH:/usr/local/mysql/bin/ \*開機(jī)時(shí)刷新*\
或者可選擇vi /etc/profile 在最后一行加入后 運(yùn)行source /etc/profile
cp support-files/my-medium.cnf /etc/my.cnf
或
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 35 on
--------------初始化數(shù)據(jù)庫(kù)------------------------------------------------
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock /*直接建立軟連接*/
vi /etc/init.d/mysqld #####46行和47行添加
basedir=/usr/local/mysql
datadir=/home/mysql
service mysqld start
netstat -tnl 3306
mysql #####初始登錄mysql
grant all privileges on *.* to 'root'@'%' identified by 'abc123'; ### ##授予root用戶可以在所有終端遠(yuǎn)程登錄,使用的密碼是abc123,并對(duì)所有數(shù)據(jù)庫(kù)和所有表有操作權(quán)限。
#數(shù)據(jù)庫(kù)密碼設(shè)置
mysqladmin -u root password "abc123"
---------------------------------------------------------------
mysql -u root -p
abc123
mysql>show databases;
2)yum安裝 mysql5.7?
1. #創(chuàng)建mysql安裝包的在線源
cd /etc/yum.repos.d/
vim mysql.repo
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
2. #安裝服務(wù)mysql-community-server
yum -y install mysql-community-server
3. #啟動(dòng)服務(wù)
systemctl start mysqld
ss -ntap |grep 3306
4. #此時(shí)無(wú)法使用mysql命令直接登入數(shù)據(jù)庫(kù)。需要查看本地root用戶的默認(rèn)密碼,使用密碼登錄。
grep password /var/log/mysqld.log #查看默認(rèn)密碼
mysql -u root -p'34/Jeoiq0fZb' #使用密碼登錄,特殊符號(hào)用單引號(hào)引起來(lái)
5. #登入數(shù)據(jù)庫(kù)后必須修改密碼。
mysql> alter user root@'localhost' identified by 'abc123';
?
#為保證安全,密碼的復(fù)雜性要足夠,需要包含英文字母大小寫、數(shù)字和特殊字符。
?
#可以使用"\h;"查看幫助
數(shù)據(jù)庫(kù)當(dāng)前使用的端口查看:
show global variables like 'port';
三、mysql的數(shù)據(jù)類型?
1)常用的數(shù)據(jù)庫(kù)類型
類型名稱 | 含義 |
tinyint(n) | 1個(gè)字節(jié),范圍(-128~127) |
smallint(n) | 2個(gè)字節(jié),范圍(-32768~32767) |
mediumint(n) | 3個(gè)字節(jié),范圍(-8388608~8388607) |
int(n) | 4個(gè)字節(jié)(32個(gè)比特位),整數(shù)型,范圍(-2147483648~2147483647) |
bigint(n) | 8個(gè)字節(jié),整數(shù)型,范圍(+-9.22*10的18次方) |
float(m,d) | 單精度浮點(diǎn),8位精度,4字節(jié)32位。m數(shù)字總個(gè)數(shù),d小數(shù)位 |
double(m,d) | 雙精度浮點(diǎn),16位精度,8字節(jié)64位 。m總個(gè)數(shù),d小數(shù)位 |
char | 固定長(zhǎng)度的字符類型 |
varchar | 可變長(zhǎng)度的字符類型 |
text | 文本 |
image | 圖片 |
decimal(5,2) | 5個(gè)有效長(zhǎng)度數(shù)字,小數(shù)點(diǎn)后面有2位(例如123.56) |
2)char與varchar的區(qū)別
值 | CHAR(4) | 存儲(chǔ)需求 | VARCHAR(4) | 存儲(chǔ)需求 |
---|---|---|---|---|
'' | ' ' | 4個(gè)字節(jié) | '' | 1個(gè)字節(jié) |
'ab' | 'ab ' | 4個(gè)字節(jié) | 'ab ' | 3個(gè)字節(jié) |
'abcd' | 'abcd' | 4個(gè)字節(jié) | 'abcd' | 5個(gè)字節(jié) |
'abcdefgh' | 'abcd' | 4個(gè)字節(jié) | 'abcd' | 5個(gè)字節(jié) |
CHAR和VARCHAR類型類似,但它們保存和檢索的方式不同。它們的最大長(zhǎng)度和是否尾部空格被保留等方面也不同。在存儲(chǔ)或檢索過程中不進(jìn)行大小寫轉(zhuǎn)換。?
字節(jié)大?。?/strong>
- char無(wú)論是否有值,都會(huì)占用固定長(zhǎng)度的字節(jié)大小,保存在磁盤上都是4字節(jié)
- varchar在保存字符時(shí),默認(rèn)會(huì)加一個(gè)隱藏的結(jié)束符,因此結(jié)束符會(huì)多算一個(gè)字節(jié)
優(yōu)劣比較:
- varchar比char節(jié)省磁盤空間
- 但varchar類型的數(shù)據(jù)讀寫速度比char慢,因?yàn)閏har是連續(xù)的磁盤空間,e而varchar在多次增刪改查中會(huì)產(chǎn)生一些磁盤空間碎片
四、查看數(shù)據(jù)庫(kù)結(jié)構(gòu)
1)查看當(dāng)前服務(wù)器中的數(shù)據(jù)庫(kù)
SHOW DATABASES; #大小寫不區(qū)分,分號(hào)“;”表示結(jié)束
2)查看數(shù)據(jù)庫(kù)中包含的表
方法一:
USE 數(shù)據(jù)庫(kù)名;
SHOW TABLES;
方法二:?
show tables from 庫(kù)名
3)查看表的結(jié)構(gòu)(字段)
方式一:先切換庫(kù),在查看指定表的字段
USE 數(shù)據(jù)庫(kù)名; #切換庫(kù)
DESCRIBE 表名; #查看指定表的結(jié)構(gòu)( DESCRIBE 可以縮寫為DESC)
由于屏幕占比問題與字段數(shù)量問題,會(huì)導(dǎo)致有些表結(jié)構(gòu)的效果呈現(xiàn)并不好。(由于默認(rèn)查看為橫向的查看 )?
縱向查看方式:
?desc 表名\G;
方式二:直接查看表結(jié)構(gòu)
DESCRIBE [數(shù)據(jù)庫(kù)名.]表名;
可縮寫成:DESC 數(shù)據(jù)庫(kù)名.表名;
四、SQL語(yǔ)句
SQL語(yǔ)句用于維護(hù)管理數(shù)據(jù)庫(kù),包括數(shù)據(jù)查詢、數(shù)據(jù)更新、訪問控制、對(duì)象管理等功能
1)SQL中的名詞介紹
- 數(shù)據(jù)庫(kù):database
- 表:table,行:row 列:column
- 索引:index
- 視圖:view
- 存儲(chǔ)過程:procedure
- 存儲(chǔ)函數(shù):function
- 觸發(fā)器:trigger
- 事件調(diào)度器:event scheduler,任務(wù)計(jì)劃
- 用戶:user
- 權(quán)限:privilege
2)SQL語(yǔ)言規(guī)范
- 在數(shù)據(jù)庫(kù)系統(tǒng)中,SQL 語(yǔ)句不區(qū)分大小寫,建議用大寫
- SQL語(yǔ)句可單行或多行書寫,默認(rèn)以 " ; " 結(jié)尾
- 關(guān)鍵詞不能跨多行或簡(jiǎn)寫
- 用空格和TAB 縮進(jìn)來(lái)提高語(yǔ)句的可讀性
- 子句通常位于獨(dú)立行,便于編輯,提高可讀性
數(shù)據(jù)庫(kù)對(duì)象和命名:
? ? 數(shù)據(jù)庫(kù)的組件(對(duì)象):
? ? 數(shù)據(jù)庫(kù)、表、索引、視圖、用戶、存儲(chǔ)過程、函數(shù)、觸發(fā)器、事件調(diào)度器等。
? ? 命名規(guī)則:
- 必須以字母開頭,后續(xù)可以包括字母,數(shù)字和三個(gè)特殊字符(# _ $)
- 不要使用MySQL的保留字,如table、select、show、databases。
- 數(shù)據(jù)庫(kù)名、表名、用戶名區(qū)分大小
3)SQL語(yǔ)言分類
1、DDL:數(shù)據(jù)定義語(yǔ)言(Data Definition Language),用于創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象,如庫(kù)、表、索引等
例如:CREATE,DROP,ALTER 等。
2、DML:數(shù)據(jù)操縱語(yǔ)言(Data Manipulation Language),用于對(duì)表中的數(shù)據(jù)進(jìn)行管理
例如: SELECT、UPDATE、INSERT、DELETE 等。
3、DQL:數(shù)據(jù)查詢語(yǔ)言( Data Query Languag ),用于從數(shù)據(jù)表中查找符合條件的數(shù)據(jù)記錄
例如: SELECT
4、DCL:數(shù)據(jù)控制語(yǔ)言(Data Control Language),用于設(shè)置或者更改數(shù)據(jù)庫(kù)用戶或角色權(quán)限
例如: GRANT,REVOKE
5、TCL:事務(wù)控制語(yǔ)言(Transaction Control Language),用于管理數(shù)據(jù)庫(kù)中的事務(wù)。 TCL經(jīng)常被用于快速原型開發(fā)、腳本編程、GUI和測(cè)試等方面
例如: COMMIT,ROLLBACK,SAVEPOINT
五、Mysql數(shù)據(jù)庫(kù)基本的增刪改查命令?
1)創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE 數(shù)據(jù)庫(kù)名;
2)創(chuàng)建表?
CREATE TABLE 表名(字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型[,...] [,PRIMARY KEY (主鍵名)]);
#主鍵一般選擇能代表唯一性的字段不允許取空值(NULL),一個(gè)表只能有一個(gè)主鍵。
例:
CREATE DATABASE school;
USE school;
CREATE TABLE student (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT '',PRIMARY KEY (id));
DESC student;
3)刪除指定的數(shù)據(jù)表
DROP TABLE [數(shù)據(jù)庫(kù)名.]表名; #如不用USE進(jìn)入庫(kù)中,則需加上數(shù)據(jù)庫(kù)名
4)刪除指定的數(shù)據(jù)庫(kù)
DROP DATABASE 數(shù)據(jù)庫(kù)名;
六、管理表中數(shù)據(jù)記錄
1)向數(shù)據(jù)表中插入新的數(shù)據(jù)記錄
INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);
例:
INSERT INTO student (id,name,score,passwd) values(1,'ggl',70.5,PASSWORD('123456'));
#PASSWORD('123456'):查詢數(shù)據(jù)記錄時(shí),密碼字串以加密形式顯示;若不使用PASSWORD(),查詢時(shí)以明文顯示。
INSERT INTO student VALUES(2,'lisi',90.5,654321);
SELECT * FROM student; #查詢表的數(shù)據(jù)記錄
2)查詢數(shù)據(jù)記錄
SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 條件表達(dá)式];
例:
SELECT * FROM student;
SELECT id,name,score FROM student WHERE id=2;
select name from YYDS\G #以列表方式豎向顯示
select * from YYDS limit 2; #只顯示頭2行
select * from YYDS limit 2,3; #顯示第2行后的前3行
3)修改、更新數(shù)據(jù)表中的數(shù)據(jù)記錄
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 條件表達(dá)式];
例:
UPDATE YYDS SET passwd=PASSWORD('') WHERE name='zhangsan';
UPDATE YYDS SET name='qhw',passwd='' WHERE id=3;
4)在數(shù)據(jù)表中刪除指定的數(shù)據(jù)記錄
DELETE FROM 表名 [WHERE 條件表達(dá)式];
例:
DELETE FROM YYDS WHERE id=4;
七、修改表名和表結(jié)構(gòu)
1)修改表名
ALTER TABLE 舊表名 RENAME 新表名;
例:
ALTER TABLE YYDS RENAME AWSL;
ALTER TABLE AWSL RENAME YYDS;
2)擴(kuò)展表結(jié)構(gòu)(增加字段)
ALTER TABLE 表名 ADD address varchar(50) default '地址不詳';
#default '地址不詳':表示此字段設(shè)置默認(rèn)值 地址不詳;可與 NOT NULL 配合使用
3)修改字段(列)名,添加唯一鍵?
ALTER TABLE 表名 CHANGE 舊列名 新列名 數(shù)據(jù)類型 [unique key];
例:
ALTER TABLE KY08 CHANGE name user_name varchar(10) unique key;
#CHANGE可修改字段名、數(shù)據(jù)類型、約束等所有項(xiàng)。
?4)刪除字段
ALTER TABLE 表名 DROP 字段名;
?例:
ALTER TABLE YYDS DROP passwd;
案例擴(kuò)展:
use kgc;
create table if not exists info (
id int(4) zerofill primary key auto_increment, #指定主鍵的第二種方式
name varchar(10) not null default '匿名',
cardid int(18) not null unique key,
hobby varchar(50));
#if not exists:表示檢測(cè)要?jiǎng)?chuàng)建的表是否已存在,如果不存在就繼續(xù)創(chuàng)建
#int(4) zerofill:表示若數(shù)值不滿4位數(shù),則前面用“0”填充,例0001
#auto_increment:表示此字段為自增長(zhǎng)字段,即每條記錄自動(dòng)遞增1,默認(rèn)從1開始遞增;自增長(zhǎng)字段數(shù)據(jù)不可以重復(fù);自增長(zhǎng)字段必須是主鍵;如添加的記錄數(shù)據(jù)沒有指定此字段的值且添加失敗也會(huì)自動(dòng)遞增一次
#unique key:表示此字段唯一鍵約束,此字段數(shù)據(jù)不可以重復(fù);一張表中只能有一個(gè)主鍵, 但是一張表中可以有多個(gè)唯一鍵
#not null:表示此字段不允許為NULL??
創(chuàng)建方式與創(chuàng)建表完全一致,最大的區(qū)別是,臨時(shí)表只在當(dāng)前的數(shù)據(jù)庫(kù)連接生效,當(dāng)數(shù)據(jù)庫(kù)連接斷開或重新連接終端時(shí),該臨時(shí)表均失效,無(wú)法查看
5)復(fù)制表結(jié)構(gòu)
方式一:創(chuàng)建新表,導(dǎo)入數(shù)據(jù)
create table 新表名 like 舊表名; #通過LIKE方法,復(fù)制舊表的結(jié)構(gòu)生成新表
insert into 新表名 select * from 舊表名; #再將舊表數(shù)據(jù)導(dǎo)入新表
方式二:復(fù)制表?
create table 新表名 (select * from 舊表名);
6)臨時(shí)表的創(chuàng)建
CREATE TEMPORARY TABLE 表名(字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型[, ...] [, PRIMARY KEY (主鍵名)]);
?創(chuàng)建方式與創(chuàng)建表完全一致,最大的區(qū)別是,臨時(shí)表只在當(dāng)前的數(shù)據(jù)庫(kù)連接生效,當(dāng)數(shù)據(jù)庫(kù)連接斷開或重新連接終端時(shí),該臨時(shí)表均失效,無(wú)法查看
7)清除表的兩種方式比較
方式一:delete清空?
delete from 表名;
方式二:truncate清空?
truncate table 表名;
兩者區(qū)別:
- delete清空屬于按照行清空,一行一行進(jìn)行,效率低,速度慢(對(duì)于表數(shù)據(jù)較多的情況) truncate相當(dāng)于刪除表數(shù)據(jù),保留表結(jié)構(gòu),重新創(chuàng)建一個(gè)與原表結(jié)構(gòu)相同的表?
- 當(dāng)數(shù)據(jù)表中有自增型約束字段時(shí),delete清除表數(shù)據(jù)后,在插入數(shù)據(jù)時(shí),自增字段的數(shù)值會(huì)接著被刪除表數(shù)據(jù)的最后一個(gè)自增數(shù),計(jì)數(shù)。(eg:被刪除表數(shù)據(jù)最后一行id(自增),為10,再創(chuàng)建時(shí),該id從11開始)。truncate清空后,自增型字段會(huì)從1開始計(jì)數(shù)
?
七、Mysql中常見的約束?
- 主鍵約束(primary key) PK
主鍵具有唯一性,不可重復(fù)性,不可為空的特點(diǎn)。一般用于刪除,查詢時(shí)條件語(yǔ)句的條件。主鍵在一張表中只能有一個(gè)
- 自增長(zhǎng)約束(auto_increment)
該約束針對(duì)于整數(shù)類型的字段,當(dāng)插入該字段數(shù)據(jù)為空時(shí),系統(tǒng)會(huì)根據(jù)上一個(gè)數(shù),自動(dòng)加1
- 非空約束(not null)
該約束到字段后,該字段中的數(shù)據(jù)插入不能為空
- 唯一性約束(unique)
該約束添加后,該字段的數(shù)據(jù)每行均為唯一的,不可重復(fù)。唯一性約束可以在一張表中有多個(gè)
- 默認(rèn)值約束(default)
默認(rèn)值約束,為該字段設(shè)置初始值,如果沒有為該字段插入數(shù)據(jù),就為初始值
- 零填充約束(zerofill)
零填充針對(duì)整數(shù)型的字段,例如int默認(rèn)為11位,除了填寫的數(shù)字以外其他用零填充
- 外鍵約束(foreign key)FK
保證數(shù)據(jù)的完整性和一致性
外鍵的定義:如果同一個(gè)屬性字段x在表一中是主鍵,而在表二中不是主鍵,則字段x稱為表二的外鍵
主鍵表與外鍵表的理解:
(1)以公共關(guān)鍵字作主鍵的表為主鍵表(父表、主表)
(2)以公共關(guān)鍵字作為外鍵的表為外鍵表(從表、外表)
與外鍵關(guān)聯(lián)的子表的字段必須設(shè)置為主鍵。要求主表外鍵字段和子表的字段具備相同的數(shù)據(jù)類型、字符長(zhǎng)度和約束
專業(yè)課程表
課程ID | 課程名稱 |
---|---|
1 | 云計(jì)算 |
2 | 大數(shù)據(jù) |
3 | JAVA |
4 | 前端 |
主鍵 |
學(xué)生信息表
學(xué)號(hào) | 姓名 | 年齡 | 課程ID |
---|---|---|---|
1 | zhangsan | 18 | 1 |
2 | lisi | 20 | 2 |
3 | wangwu | 22 | 4 |
4 | zhaoliu | 23 | 1 |
5 | zhuba | 24 | 2 |
外鍵 |
#為主表設(shè)置主鍵
mysql> alter table class add constraint PK_CID primary key(cid);
#主表插入記錄
mysql> insert into class values(1,'云計(jì)算');
mysql> insert into class values(2,'大數(shù)據(jù)');
mysql> insert into class values(3,'java');
mysql> insert into class values(4,'前端');
#為從表設(shè)置外鍵
mysql> alter table student ADD constraint FK_CLASSID foreign key(classid) references class(cid);
#從表插入記錄
mysql> insert into student values(1,'zhangsan',18,1);
mysql> insert into student values(2,'lisi',20,2);
mysql> insert into student values(3,'wangwu',22,4);
mysql> insert into student values(4,'zhaoliu',23,1);
mysql> insert into student values(5,'zhuba',24,2);
- 外鍵約束,至少將兩張表進(jìn)行關(guān)聯(lián)。我們將這兩張表分為主表和從表,主表的主鍵作為從表的外鍵。增加數(shù)據(jù)時(shí),先進(jìn)行主表操作,如果增加的數(shù)據(jù)外鍵值在主表中沒有,就要先在主表中添加。
- 若進(jìn)行刪除操作,就要先進(jìn)行從表操作,只要將從表有關(guān)主表(主鍵值)全部清除后,才能清除該主表的主鍵值
刪除外鍵步驟:
1.查看外鍵別名
mysql> show create table student\G;
2.刪除外鍵約束
mysql> alter table student drop foreign key FK_CLASSID;
3.刪除別名
mysql> alter table student drop key FK_CLASSID;
做了外鍵約束后
要插入新的數(shù)據(jù)記錄時(shí),需要先在主鍵表中插入相關(guān)數(shù)據(jù),才能在外鍵表插入相關(guān)數(shù)據(jù),插入數(shù)據(jù)時(shí),是先主后從文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-481229.html
要?jiǎng)h除數(shù)據(jù)記錄時(shí),要先刪除外鍵表的相關(guān)數(shù)據(jù),才能在主鍵表刪除相關(guān)數(shù)據(jù)記錄,刪除數(shù)據(jù)時(shí),是先從再主文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-481229.html
總結(jié)
create database 庫(kù)名;
use 庫(kù)名;
create table 表名 (字段1 數(shù)據(jù)類型, 字段2 數(shù)據(jù)類型, ... [,primary key (字段)]);
drop table 表名;
drop database 庫(kù)名;
show databases;
show tables [from 庫(kù)名];
desc [庫(kù)名.]表名;
DML 用于管理表數(shù)據(jù)
insert into 表名 values (字段1的值, 字段2的值, ....); #要按照表結(jié)構(gòu)的字段順序設(shè)置值
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
update 表名 set 字段=值, ... where 條件表達(dá)式;
delete from 表名 where 條件表達(dá)式;
DQL 用于根據(jù)條件查詢表數(shù)據(jù)
select * from 表名 [where 條件表達(dá)式];
select 字段1,字段2,... from 表名 [where 條件表達(dá)式];
select * from 表名\G #縱向查看每行記錄字段的值
select * from 表名 limit N; #顯示表的前N行記錄
select * from 表名 limit N,M; #顯示表的從第N行之后的連續(xù)M行記錄(不包含第N行)
修改表結(jié)構(gòu)
改表名 alter table 舊表名 rename 新表名;
增加字段 alter table 表名 add 新字段 數(shù)據(jù)類型 [字段屬性];
修改字段 alter table 表名 change 舊字段 新字段 數(shù)據(jù)類型 [字段屬性];
刪除字段 alter table 表名 drop 字段;
到了這里,關(guān)于MySql數(shù)據(jù)庫(kù)的初步安裝與數(shù)據(jù)表結(jié)構(gòu)數(shù)據(jù)管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!